You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by as...@apache.org on 2007/03/20 21:27:54 UTC

svn commit: r520555 - in /webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms: JMSConnectionFactory.java JMSMessageReceiver.java JMSSender.java

Author: asankha
Date: Tue Mar 20 13:27:53 2007
New Revision: 520555

URL: http://svn.apache.org/viewvc?view=rev&rev=520555
Log:
fix AXIS2-2030 and AXIS2-2277 after review
thanks John Turner

Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConnectionFactory.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSMessageReceiver.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSSender.java

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConnectionFactory.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConnectionFactory.java?view=diff&rev=520555&r1=520554&r2=520555
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConnectionFactory.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConnectionFactory.java Tue Mar 20 13:27:53 2007
@@ -18,12 +18,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.MessageConsumer;
-import javax.jms.Session;
+import javax.jms.*;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NameNotFoundException;
@@ -87,9 +82,13 @@
      */
     private String jndiName = null;
     /**
-     * A map of destinations to service names they belong to
+     * Map of destination JNDI names to service names
      */
-    private Map destinations = null;
+    private Map serviceJNDINameMapping = null;
+    /**
+     * Map of destinations to service names
+     */
+    private Map serviceDestinationMapping = null;
     /**
      * The JMS Sessions listening for messages
      */
@@ -124,7 +123,8 @@
     JMSConnectionFactory(String name, String jndiName) {
         this.name = name;
         this.jndiName = jndiName;
-        destinations = new HashMap();
+        serviceJNDINameMapping = new HashMap();
+        serviceDestinationMapping = new HashMap();        
         properties = new Hashtable();
         jmsSessions = new HashMap();
     }
@@ -176,17 +176,24 @@
      * @param serviceName     the service to which it belongs
      */
     public void addDestination(String destinationJndi, String serviceName) {
-        destinations.put(destinationJndi, serviceName);
+        serviceJNDINameMapping.put(destinationJndi, serviceName);
+        serviceDestinationMapping.put(getDestinationName(destinationJndi), serviceName);
     }
 
     /**
      * Remove listen destination on this connection factory
      *
      * @param destinationJndi the JMS destination to be removed
+     * @throws if an error occurs trying to stop listening for messages before removal
      */
     public void removeDestination(String destinationJndi) throws JMSException {
+        // find and save provider specific Destination name before we delete
+        String providerSpecificDestination = getDestinationName(destinationJndi);
         stoplistenOnDestination(destinationJndi);
-        destinations.remove(destinationJndi);
+        serviceJNDINameMapping.remove(destinationJndi);
+        if (providerSpecificDestination != null) {
+            serviceDestinationMapping.remove(providerSpecificDestination);
+        }
     }
 
     /**
@@ -227,12 +234,12 @@
     }
 
     /**
-     * Get the list of destinations associated with this connection factory
+     * Get the list of destinations (JNDI) associated with this connection factory
      *
      * @return destinations to service maping
      */
     public Map getDestinations() {
-        return destinations;
+        return serviceJNDINameMapping;
     }
 
     /**
@@ -271,7 +278,7 @@
             }
         }
 
-        Iterator iter = destinations.keySet().iterator();
+        Iterator iter = serviceJNDINameMapping.keySet().iterator();
         while (iter.hasNext()) {
             String destinationJndi = (String) iter.next();
             listenOnDestination(destinationJndi);
@@ -306,7 +313,7 @@
             log.warn("Error looking up destination : " + destinationJndi, e);
             // mark service as faulty
             JMSUtils.markServiceAsFaulty(
-                    (String) destinations.get(destinationJndi),
+                    (String) serviceJNDINameMapping.get(destinationJndi),
                     "Error looking up JMS destination : " + destinationJndi,
                     this.msgRcvr.getAxisConf().getAxisConfiguration());
         }
@@ -334,7 +341,7 @@
      */
     public String getServiceNameForDestination(String destination) {
 
-        return (String) destinations.get(destination);
+        return (String) serviceJNDINameMapping.get(destination);
     }
 
     /**
@@ -346,6 +353,34 @@
         } catch (JMSException e) {
             log.warn("Error shutting down connection factory : " + name, e);
         }
+    }
+
+    /**
+     * Return the provider specific Destination name if any for the destination with the given
+     * JNDI name
+     * @param destinationJndi the JNDI name of the destination
+     * @return the provider specific Destination name or null if cannot be found
+     */
+    public String getDestinationName(String destinationJndi) {
+        try {
+            Destination destination = (Destination) context.lookup(destinationJndi);
+            if (destination != null && destination instanceof Queue) {
+                return ((Queue) destination).getQueueName();
+            } else if (destination != null && destination instanceof Topic) {
+                return ((Topic) destination).getTopicName();
+            }
+        } catch (JMSException e) {
+            log.warn("Error reading provider specific JMS destination name for destination " +
+                "with JNDI name : " + destinationJndi, e);
+        } catch (NamingException e) {
+            log.warn("Error looking up destination with JNDI name : " + destinationJndi +
+                " to map its corresponding provider specific Destination name");
+        }
+        return null;
+    }
+
+    public String getServiceByDestination(String destinationName) {
+        return (String) serviceDestinationMapping.get(destinationName);
     }
 
     private void handleException(String msg) throws AxisJMSException {

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSMessageReceiver.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSMessageReceiver.java?view=diff&rev=520555&r1=520554&r2=520555
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSMessageReceiver.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSMessageReceiver.java Tue Mar 20 13:27:53 2007
@@ -19,6 +19,7 @@
 import org.apache.axiom.om.util.UUIDGenerator;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.RelatesTo;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.ContextFactory;
 import org.apache.axis2.context.MessageContext;
@@ -130,7 +131,7 @@
                 destinationName = ((Topic) dest).getTopicName();
             }
 
-            String serviceName = jmsConFac.getServiceNameForDestination(destinationName);
+            String serviceName = jmsConFac.getServiceByDestination(destinationName);
 
             // hack to get around the crazy Active MQ dynamic queue and topic issues
             if (serviceName == null) {
@@ -165,6 +166,7 @@
 
             msgContext.setServerSide(true);
             msgContext.setServiceGroupContextId(UUIDGenerator.getUUID());
+            msgContext.setMessageID(message.getJMSMessageID());
 
             String soapAction = JMSUtils.getProperty(message, JMSConstants.SOAPACTION);
             if (soapAction != null) {
@@ -173,6 +175,14 @@
 
             msgContext.setEnvelope(
                     JMSUtils.getSOAPEnvelope(message, msgContext, in));
+
+            // set correlation id
+            String correlationId = message.getJMSCorrelationID();
+            if (correlationId != null && correlationId.length() > 0) {
+                msgContext.setProperty(JMSConstants.JMS_COORELATION_ID, correlationId);
+                msgContext.setRelationships(
+                    new RelatesTo[] { new RelatesTo(correlationId) });
+            }
 
             return msgContext;
 

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSSender.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSSender.java?view=diff&rev=520555&r1=520554&r2=520555
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSSender.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSSender.java Tue Mar 20 13:27:53 2007
@@ -243,6 +243,10 @@
 
         // set the JMS correlation ID if specified
         String correlationId = getProperty(msgContext, JMSConstants.JMS_COORELATION_ID);
+        if (correlationId == null) {
+            correlationId = msgContext.getRelatesTo().getValue();
+        }
+
         if (correlationId != null) {
             message.setJMSCorrelationID(correlationId);
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org