You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by al...@apache.org on 2013/11/04 04:31:19 UTC

svn commit: r1538499 - in /juddi/trunk/juddi-examples: ./ subscription-notification-amqp/ subscription-notification-amqp/src/ subscription-notification-amqp/src/main/ subscription-notification-amqp/src/main/java/ subscription-notification-amqp/src/main...

Author: alexoree
Date: Mon Nov  4 03:31:18 2013
New Revision: 1538499

URL: http://svn.apache.org/r1538499
Log:
JUDDI-672 done

Added:
    juddi/trunk/juddi-examples/subscription-notification-amqp/
    juddi/trunk/juddi-examples/subscription-notification-amqp/pom.xml
    juddi/trunk/juddi-examples/subscription-notification-amqp/src/
    juddi/trunk/juddi-examples/subscription-notification-amqp/src/main/
    juddi/trunk/juddi-examples/subscription-notification-amqp/src/main/java/
    juddi/trunk/juddi-examples/subscription-notification-amqp/src/main/java/org/
    juddi/trunk/juddi-examples/subscription-notification-amqp/src/main/java/org/apache/
    juddi/trunk/juddi-examples/subscription-notification-amqp/src/main/java/org/apache/juddi/
    juddi/trunk/juddi-examples/subscription-notification-amqp/src/main/java/org/apache/juddi/subscription/
    juddi/trunk/juddi-examples/subscription-notification-amqp/src/main/java/org/apache/juddi/subscription/notify/
    juddi/trunk/juddi-examples/subscription-notification-amqp/src/main/java/org/apache/juddi/subscription/notify/AMQPNotifier.java
    juddi/trunk/juddi-examples/subscription-notification-amqp/src/test/
    juddi/trunk/juddi-examples/subscription-notification-amqp/src/test/java/
Removed:
    juddi/trunk/juddi-examples/subscription-notification-handler/
Modified:
    juddi/trunk/juddi-examples/pom.xml

Modified: juddi/trunk/juddi-examples/pom.xml
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-examples/pom.xml?rev=1538499&r1=1538498&r2=1538499&view=diff
==============================================================================
--- juddi/trunk/juddi-examples/pom.xml (original)
+++ juddi/trunk/juddi-examples/pom.xml Mon Nov  4 03:31:18 2013
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-	<!--
+<!--
 		* Copyright 2001-2009 The Apache Software Foundation. * * Licensed
 		under the Apache License, Version 2.0 (the "License"); * you may not
 		use this file except in compliance with the License. * You may obtain
@@ -10,8 +10,7 @@
 		OR CONDITIONS OF ANY KIND, either express or implied. * See the
 		License for the specific language governing permissions and *
 		limitations under the License. * */
-	-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<parent>
 		<groupId>org.apache.juddi</groupId>
@@ -35,5 +34,6 @@
        <module>uddi-annotations</module>
        <module>wsdl2uddi</module>
        <module>wsdl2uddi-lifecyle</module>
-    </modules>
-</project>
+    <module>subscription-notification-amqp</module>
+  </modules>
+</project>
\ No newline at end of file

Added: juddi/trunk/juddi-examples/subscription-notification-amqp/pom.xml
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-examples/subscription-notification-amqp/pom.xml?rev=1538499&view=auto
==============================================================================
--- juddi/trunk/juddi-examples/subscription-notification-amqp/pom.xml (added)
+++ juddi/trunk/juddi-examples/subscription-notification-amqp/pom.xml Mon Nov  4 03:31:18 2013
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.juddi.example</groupId>
+    <artifactId>juddi-examples</artifactId>
+    <version>3.2.0-SNAPSHOT</version>
+  </parent>
+  
+  <artifactId>subscription-notification-amqp</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <name>jUDDI subscription-notification-amqp</name>
+  <description>Demonstrates how to write a custom notifier for subscriptions</description>
+  <dependencies>
+		<dependency>
+			<groupId>org.apache.juddi</groupId>
+			<artifactId>uddi-ws</artifactId>
+			<version>3.2.0-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.juddi</groupId>
+			<artifactId>juddi-client</artifactId>
+			<version>3.2.0-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+		  <groupId>org.apache.geronimo.specs</groupId>
+		  <artifactId>geronimo-jms_1.1_spec</artifactId>
+		  <version>1.0</version>
+		</dependency>
+		<dependency>
+		  <groupId>org.apache.qpid</groupId>
+		  <artifactId>qpid-client</artifactId>
+		  <version>0.24</version>
+		</dependency>
+		<dependency>
+		  <groupId>org.apache.qpid</groupId>
+		  <artifactId>qpid-amqp-1-0-client-jms</artifactId>
+		  <version>0.24</version>
+		</dependency>
+    <dependency>
+      <groupId>org.apache.juddi</groupId>
+      <artifactId>juddi-core</artifactId>
+      <version>3.2.0-SNAPSHOT</version>
+    </dependency>
+  </dependencies>
+</project>

Added: juddi/trunk/juddi-examples/subscription-notification-amqp/src/main/java/org/apache/juddi/subscription/notify/AMQPNotifier.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-examples/subscription-notification-amqp/src/main/java/org/apache/juddi/subscription/notify/AMQPNotifier.java?rev=1538499&view=auto
==============================================================================
--- juddi/trunk/juddi-examples/subscription-notification-amqp/src/main/java/org/apache/juddi/subscription/notify/AMQPNotifier.java (added)
+++ juddi/trunk/juddi-examples/subscription-notification-amqp/src/main/java/org/apache/juddi/subscription/notify/AMQPNotifier.java Mon Nov  4 03:31:18 2013
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2013 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.juddi.subscription.notify;
+
+import java.net.URISyntaxException;
+import java.rmi.RemoteException;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.api_v3.AccessPointType;
+import org.apache.juddi.config.AppConfig;
+import org.apache.juddi.jaxb.JAXBMarshaller;
+import org.apache.juddi.model.BindingTemplate;
+import org.uddi.api_v3.DispositionReport;
+import org.uddi.api_v3.Result;
+import org.uddi.subr_v3.NotifySubscriptionListener;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+
+/**
+ * AMQP Notifier
+ * 
+ * This is designed to enable users to setup AMQP based alerts for UDDI subscriptions
+ * 
+ * This class is partically complete, but it is largely untested and lacks any kind of 
+ * 
+ * the following settings need to be added to the juddiv3.xml file
+ * amqp.java.naming.factory.initial=org.apache.qpid.jndi.PropertiesFileInitialContextFactory
+ * amqp.connectionfactory.qpidConnectionfactory
+ * amqp.destination=(some topic or queue name)
+ * amqp.destination.type=topic
+ * 
+ * usage
+ * create a service/bindingtemplate/accessPoint where the value is amqp://url_to_qpid/amqp The useType must be "endPoint".
+ * create a subscription where the binding template reference points to this endpoint.
+ * trigger the subscription and wait for delivery.
+ * @author <a href="mailto:alexoree@apache.org">Alex O'Ree</a>
+ */
+public class AMQPNotifier implements Notifier {
+
+    Log log = LogFactory.getLog(this.getClass());
+    String destination = null;
+
+    public AMQPNotifier(BindingTemplate bindingTemplate) throws URISyntaxException, ConfigurationException {
+        super();
+        if (!AccessPointType.END_POINT.toString().equalsIgnoreCase(bindingTemplate.getAccessPointType())) {
+            log.error("AMQP enpoints only support AccessPointType " + AccessPointType.END_POINT);
+        }
+        String accessPointUrl = bindingTemplate.getAccessPointUrl().toLowerCase();
+        if (!accessPointUrl.startsWith("amqp:")) {
+            log.warn("AMQP accessPointUrl for bindingTemplate " + bindingTemplate.getEntityKey()
+                    + " should start with 'amqp:'");
+        } else {
+            destination = accessPointUrl.substring(accessPointUrl.indexOf(":") + 1);
+
+        }
+    }
+
+    @Override
+    public DispositionReport notifySubscriptionListener(NotifySubscriptionListener body) throws DispositionReportFaultMessage, RemoteException {
+        Connection connection = null;
+        Context context = null;
+        boolean success = false;
+        String err = null;
+        try {
+            if (destination != null) {
+                log.info("Sending notification AMQP to " + destination);
+                Properties properties = new Properties();
+                 
+                properties.put("java.naming.factory.initial", 
+                        AppConfig.getConfiguration().getString("amqp.java.naming.factory.initial", "org.apache.qpid.jndi.PropertiesFileInitialContextFactory"));
+                properties.put("connectionfactory.qpidConnectionfactory", destination);
+                properties.put("destination." +AppConfig.getConfiguration().getString("amqp.destination") ,
+                        AppConfig.getConfiguration().getString("amqp.destination.type"));
+                //test only
+                //properties.load(this.getClass().getResourceAsStream("hello.properties"));
+                context = new InitialContext(properties);
+
+                ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("qpidConnectionfactory");
+                connection = connectionFactory.createConnection();
+                connection.start();
+
+                Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+                Destination destinationLocal = (Destination) context.lookup("UDDISubscriptionUpdates");
+
+                MessageProducer messageProducer = session.createProducer(destinationLocal);
+
+
+                String subscriptionResultXML = JAXBMarshaller.marshallToString(body, JAXBMarshaller.PACKAGE_SUBSCR_RES);
+                TextMessage message = session.createTextMessage(subscriptionResultXML);
+                messageProducer.send(message);
+                success = true;
+
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            err = e.getMessage();
+
+        } finally {
+            try {
+                connection.close();
+            } catch (JMSException ex) {
+                log.error(null, ex);
+            }
+            try {
+                context.close();
+            } catch (NamingException ex) {
+                log.error(null, ex);
+            }
+        }
+        if (!success) {
+            throw new DispositionReportFaultMessage(err, null);
+        }
+        DispositionReport dr = new DispositionReport();
+        Result res = new Result();
+        dr.getResult().add(res);
+
+        return dr;
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@juddi.apache.org
For additional commands, e-mail: commits-help@juddi.apache.org