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/29 19:53:45 UTC

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

Author: asankha
Date: Thu Mar 29 10:53:45 2007
New Revision: 523781

URL: http://svn.apache.org/viewvc?view=rev&rev=523781
Log:
Fix AXIS2-2434 and AXIS2-2266

Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java
    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/JMSConstants.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/Constants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java?view=diff&rev=523781&r1=523780&r2=523781
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java Thu Mar 29 10:53:45 2007
@@ -266,8 +266,6 @@
         public static final String CONTENT_TYPE = "ContentType";
         public static final String CONTENT_TYPE_OF_FAULT = "ContentTypeOfFault";
 
-        public static final String IS_USING_SEPARATE_LISTENER = "IsUsingSeparateListener";
-
         public static final String CONFIG_CONTEXT_TIMOUT_INTERVAL = "ConfigContextTimeoutInterval";
 
         public static final String TRANSPORT_IN_URL = "TransportInURL";

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=523781&r1=523780&r2=523781
==============================================================================
--- 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 Thu Mar 29 10:53:45 2007
@@ -17,6 +17,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.axis2.addressing.EndpointReference;
 
 import javax.jms.*;
 import javax.naming.Context;
@@ -176,8 +177,38 @@
      * @param serviceName     the service to which it belongs
      */
     public void addDestination(String destinationJndi, String serviceName) {
+
         serviceJNDINameMapping.put(destinationJndi, serviceName);
-        serviceDestinationMapping.put(getDestinationName(destinationJndi), serviceName);
+        String destinationName = getDestinationName(destinationJndi);
+        log.warn("JMS Destination with JNDI name : " + destinationJndi + " does not exist");
+
+        Connection con = null;
+        try {
+            con = conFactory.createConnection();
+            Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
+            Queue queue = session.createQueue(destinationJndi);
+            destinationName = queue.getQueueName();
+            log.warn("JMS Destination with JNDI name : " + destinationJndi + " created");
+            
+        } catch (JMSException e) {
+            log.error("Unable to create a Destination with JNDI name : " + destinationJndi, e);
+            // mark service as faulty
+            JMSUtils.markServiceAsFaulty(
+                (String) serviceJNDINameMapping.get(destinationJndi),
+                "Error looking up JMS destination : " + destinationJndi,
+                msgRcvr.getAxisConf().getAxisConfiguration());
+
+        } finally {
+            if (con != null) {
+                try {
+                    con.close();
+                } catch (JMSException ignore) {}
+            }
+        }
+
+        serviceDestinationMapping.put(destinationName, serviceName);
+        log.info("Mapping JNDI name : " + destinationJndi + " and JMS Destination name : " +
+            destinationName + " against service : " + serviceName);
     }
 
     /**
@@ -377,6 +408,28 @@
                 " to map its corresponding provider specific Destination name");
         }
         return null;
+    }
+
+    /**
+     * Return the EPR for the JMS Destination with the given JNDI name and using
+     * this connection factory
+     * @param destination the JNDI name of the JMS Destionation
+     * @return the EPR
+     */
+    public EndpointReference getEPRForDestination(String destination) {
+
+        StringBuffer sb = new StringBuffer();
+        sb.append(JMSConstants.JMS_PREFIX).append(destination);
+        sb.append("?").append(JMSConstants.CONFAC_JNDI_NAME_PARAM).
+                append("=").append(getJndiName());
+        Iterator props = getProperties().keySet().iterator();
+        while (props.hasNext()) {
+            String key = (String) props.next();
+            String value = (String) getProperties().get(key);
+            sb.append("&").append(key).append("=").append(value);
+        }
+
+        return new EndpointReference(sb.toString());
     }
 
     public String getServiceByDestination(String destinationName) {

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConstants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConstants.java?view=diff&rev=523781&r1=523780&r2=523781
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConstants.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConstants.java Thu Mar 29 10:53:45 2007
@@ -28,9 +28,14 @@
     public static final String JMS_PREFIX = "jms:/";
 
     /**
-     * The Parameter name indicating a JMS destination
+     * The Parameter name indicating a JMS destination for requests
      */
     public static final String DEST_PARAM = "transport.jms.Destination";
+
+    /**
+     * The Parameter name indicating the response JMS destination
+     */
+    public static final String REPLY_PARAM = "transport.jms.ReplyDestination";
 
     /**
      * The Parameter name indicating the JMS destination type

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=523781&r1=523780&r2=523781
==============================================================================
--- 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 Thu Mar 29 10:53:45 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.description.Parameter;
 import org.apache.axis2.addressing.RelatesTo;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.ContextFactory;
@@ -101,8 +102,14 @@
     public void onMessage(Message message) {
         // directly create a new worker and delegate processing
         try {
-            log.debug("Received JMS message to destination : " +
-                    message.getJMSDestination());
+            if (log.isDebugEnabled()) {
+                StringBuffer sb = new StringBuffer();
+                sb.append("Received JMS message to destination : " + message.getJMSDestination());                
+                sb.append("\nMessage ID : " + message.getJMSMessageID());
+                sb.append("\nCorrelation ID : " + message.getJMSCorrelationID());
+                sb.append("\nReplyTo ID : " + message.getJMSReplyTo());
+                log.debug(sb.toString());
+            }
         } catch (JMSException e) {
             e.printStackTrace();
         }
@@ -168,6 +175,19 @@
             msgContext.setServerSide(true);
             msgContext.setServiceGroupContextId(UUIDGenerator.getUUID());
             msgContext.setMessageID(message.getJMSMessageID());
+
+            Destination replyTo = message.getJMSReplyTo();
+            String jndiDestinationName = null;
+            if (replyTo == null) {
+                Parameter param = msgContext.getAxisService().getParameter(JMSConstants.REPLY_PARAM);
+                if (param != null && param.getValue() != null) {
+                    jndiDestinationName = (String) param.getValue();
+                }
+            }
+
+            if (jndiDestinationName != null) {
+                msgContext.setReplyTo(jmsConFac.getEPRForDestination(jndiDestinationName));
+            }
 
             String soapAction = JMSUtils.getProperty(message, JMSConstants.SOAPACTION);
             if (soapAction != null) {

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=523781&r1=523780&r2=523781
==============================================================================
--- 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 Thu Mar 29 10:53:45 2007
@@ -22,6 +22,8 @@
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.description.TransportOutDescription;
+import org.apache.axis2.description.WSDL2Constants;
+import org.apache.axis2.description.Parameter;
 import org.apache.axis2.handlers.AbstractHandler;
 import org.apache.axis2.transport.TransportSender;
 import org.apache.commons.logging.Log;
@@ -38,8 +40,13 @@
 import javax.jms.Session;
 import javax.jms.TextMessage;
 import javax.xml.stream.XMLStreamException;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.naming.Context;
+import javax.naming.NameNotFoundException;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.util.Hashtable;
 
 /**
  * The TransportSender for JMS
@@ -83,17 +90,6 @@
                     msgContext.getProperty(Constants.OUT_TRANSPORT_INFO);
         }
 
-        // should we wait and listen for a response?
-        boolean waitForResponse = false;
-
-        Object seprLisn = msgContext.getProperty(
-                Constants.Configuration.IS_USING_SEPARATE_LISTENER);
-        if (Boolean.TRUE.equals(seprLisn)) {
-            waitForResponse = false;
-        } else if (!msgContext.isServerSide()) {
-            waitForResponse = !msgContext.getOptions().isUseSeparateListener();
-        }
-
         // get the ConnectionFactory to be used for the send
         ConnectionFactory connectionFac = transportInfo.getConnectionFactory();
 
@@ -119,14 +115,45 @@
             MessageProducer producer = session.createProducer(dest);
             Destination replyDest = null;
 
+            boolean waitForResponse =
+                msgContext.getOperationContext() != null &&
+                WSDL2Constants.MEP_URI_OUT_IN.equals(
+                    msgContext.getOperationContext().getAxisOperation().getMessageExchangePattern());
+
             if (waitForResponse) {
-                try {
-                    // create temporary queue to receive reply
-                    replyDest = session.createTemporaryQueue();
-                    message.setJMSReplyTo(replyDest);
-                } catch (JMSException e) {
-                    handleException("Error creating temporary queue for response");
+                String replyToJNDIName = (String) msgContext.getProperty(JMSConstants.REPLY_PARAM);
+                if (replyToJNDIName != null && replyToJNDIName.length() > 0) {
+                    Context context = null;
+                    Hashtable props = JMSUtils.getProperties(targetAddress);
+                    try {
+                        context = new InitialContext(props);
+                    } catch (NamingException e) {
+                        handleException("Could not get the initial context", e);
+                    }
+
+                    try {
+                        replyDest = (Destination) context.lookup(replyToJNDIName);
+
+                    } catch (NameNotFoundException e) {
+                        log.warn("Cannot get or lookup JMS response destination : " +
+                            replyToJNDIName + " : " + e.getMessage() +
+                            ". Attempting to create a Queue named : " + replyToJNDIName);
+                        replyDest = session.createQueue(replyToJNDIName);
+
+                    } catch (NamingException e) {
+                        handleException("Cannot get JMS response destination : " +
+                            replyToJNDIName + " : ", e);
+                    }
+
+                } else {
+                    try {
+                        // create temporary queue to receive reply
+                        replyDest = session.createTemporaryQueue();
+                    } catch (JMSException e) {
+                        handleException("Error creating temporary queue for response");
+                    }
                 }
+                message.setJMSReplyTo(replyDest);
             }
 
             try {



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


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

Posted by Deepal Jayasinghe <de...@opensource.lk>.
Hi Asankha;

Dont we need to commit this change to 1.2 branch ?

Thanks
Deepal

asankha@apache.org wrote:

>Author: asankha
>Date: Thu Mar 29 10:53:45 2007
>New Revision: 523781
>
>URL: http://svn.apache.org/viewvc?view=rev&rev=523781
>Log:
>Fix AXIS2-2434 and AXIS2-2266
>
>Modified:
>    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java
>    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/JMSConstants.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/Constants.java
>URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java?view=diff&rev=523781&r1=523780&r2=523781
>==============================================================================
>--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java (original)
>+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java Thu Mar 29 10:53:45 2007
>@@ -266,8 +266,6 @@
>         public static final String CONTENT_TYPE = "ContentType";
>         public static final String CONTENT_TYPE_OF_FAULT = "ContentTypeOfFault";
> 
>-        public static final String IS_USING_SEPARATE_LISTENER = "IsUsingSeparateListener";
>-
>         public static final String CONFIG_CONTEXT_TIMOUT_INTERVAL = "ConfigContextTimeoutInterval";
> 
>         public static final String TRANSPORT_IN_URL = "TransportInURL";
>
>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=523781&r1=523780&r2=523781
>==============================================================================
>--- 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 Thu Mar 29 10:53:45 2007
>@@ -17,6 +17,7 @@
> 
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>+import org.apache.axis2.addressing.EndpointReference;
> 
> import javax.jms.*;
> import javax.naming.Context;
>@@ -176,8 +177,38 @@
>      * @param serviceName     the service to which it belongs
>      */
>     public void addDestination(String destinationJndi, String serviceName) {
>+
>         serviceJNDINameMapping.put(destinationJndi, serviceName);
>-        serviceDestinationMapping.put(getDestinationName(destinationJndi), serviceName);
>+        String destinationName = getDestinationName(destinationJndi);
>+        log.warn("JMS Destination with JNDI name : " + destinationJndi + " does not exist");
>+
>+        Connection con = null;
>+        try {
>+            con = conFactory.createConnection();
>+            Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
>+            Queue queue = session.createQueue(destinationJndi);
>+            destinationName = queue.getQueueName();
>+            log.warn("JMS Destination with JNDI name : " + destinationJndi + " created");
>+            
>+        } catch (JMSException e) {
>+            log.error("Unable to create a Destination with JNDI name : " + destinationJndi, e);
>+            // mark service as faulty
>+            JMSUtils.markServiceAsFaulty(
>+                (String) serviceJNDINameMapping.get(destinationJndi),
>+                "Error looking up JMS destination : " + destinationJndi,
>+                msgRcvr.getAxisConf().getAxisConfiguration());
>+
>+        } finally {
>+            if (con != null) {
>+                try {
>+                    con.close();
>+                } catch (JMSException ignore) {}
>+            }
>+        }
>+
>+        serviceDestinationMapping.put(destinationName, serviceName);
>+        log.info("Mapping JNDI name : " + destinationJndi + " and JMS Destination name : " +
>+            destinationName + " against service : " + serviceName);
>     }
> 
>     /**
>@@ -377,6 +408,28 @@
>                 " to map its corresponding provider specific Destination name");
>         }
>         return null;
>+    }
>+
>+    /**
>+     * Return the EPR for the JMS Destination with the given JNDI name and using
>+     * this connection factory
>+     * @param destination the JNDI name of the JMS Destionation
>+     * @return the EPR
>+     */
>+    public EndpointReference getEPRForDestination(String destination) {
>+
>+        StringBuffer sb = new StringBuffer();
>+        sb.append(JMSConstants.JMS_PREFIX).append(destination);
>+        sb.append("?").append(JMSConstants.CONFAC_JNDI_NAME_PARAM).
>+                append("=").append(getJndiName());
>+        Iterator props = getProperties().keySet().iterator();
>+        while (props.hasNext()) {
>+            String key = (String) props.next();
>+            String value = (String) getProperties().get(key);
>+            sb.append("&").append(key).append("=").append(value);
>+        }
>+
>+        return new EndpointReference(sb.toString());
>     }
> 
>     public String getServiceByDestination(String destinationName) {
>
>Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConstants.java
>URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConstants.java?view=diff&rev=523781&r1=523780&r2=523781
>==============================================================================
>--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConstants.java (original)
>+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConstants.java Thu Mar 29 10:53:45 2007
>@@ -28,9 +28,14 @@
>     public static final String JMS_PREFIX = "jms:/";
> 
>     /**
>-     * The Parameter name indicating a JMS destination
>+     * The Parameter name indicating a JMS destination for requests
>      */
>     public static final String DEST_PARAM = "transport.jms.Destination";
>+
>+    /**
>+     * The Parameter name indicating the response JMS destination
>+     */
>+    public static final String REPLY_PARAM = "transport.jms.ReplyDestination";
> 
>     /**
>      * The Parameter name indicating the JMS destination type
>
>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=523781&r1=523780&r2=523781
>==============================================================================
>--- 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 Thu Mar 29 10:53:45 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.description.Parameter;
> import org.apache.axis2.addressing.RelatesTo;
> import org.apache.axis2.context.ConfigurationContext;
> import org.apache.axis2.context.ContextFactory;
>@@ -101,8 +102,14 @@
>     public void onMessage(Message message) {
>         // directly create a new worker and delegate processing
>         try {
>-            log.debug("Received JMS message to destination : " +
>-                    message.getJMSDestination());
>+            if (log.isDebugEnabled()) {
>+                StringBuffer sb = new StringBuffer();
>+                sb.append("Received JMS message to destination : " + message.getJMSDestination());                
>+                sb.append("\nMessage ID : " + message.getJMSMessageID());
>+                sb.append("\nCorrelation ID : " + message.getJMSCorrelationID());
>+                sb.append("\nReplyTo ID : " + message.getJMSReplyTo());
>+                log.debug(sb.toString());
>+            }
>         } catch (JMSException e) {
>             e.printStackTrace();
>         }
>@@ -168,6 +175,19 @@
>             msgContext.setServerSide(true);
>             msgContext.setServiceGroupContextId(UUIDGenerator.getUUID());
>             msgContext.setMessageID(message.getJMSMessageID());
>+
>+            Destination replyTo = message.getJMSReplyTo();
>+            String jndiDestinationName = null;
>+            if (replyTo == null) {
>+                Parameter param = msgContext.getAxisService().getParameter(JMSConstants.REPLY_PARAM);
>+                if (param != null && param.getValue() != null) {
>+                    jndiDestinationName = (String) param.getValue();
>+                }
>+            }
>+
>+            if (jndiDestinationName != null) {
>+                msgContext.setReplyTo(jmsConFac.getEPRForDestination(jndiDestinationName));
>+            }
> 
>             String soapAction = JMSUtils.getProperty(message, JMSConstants.SOAPACTION);
>             if (soapAction != null) {
>
>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=523781&r1=523780&r2=523781
>==============================================================================
>--- 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 Thu Mar 29 10:53:45 2007
>@@ -22,6 +22,8 @@
> import org.apache.axis2.context.ConfigurationContext;
> import org.apache.axis2.context.MessageContext;
> import org.apache.axis2.description.TransportOutDescription;
>+import org.apache.axis2.description.WSDL2Constants;
>+import org.apache.axis2.description.Parameter;
> import org.apache.axis2.handlers.AbstractHandler;
> import org.apache.axis2.transport.TransportSender;
> import org.apache.commons.logging.Log;
>@@ -38,8 +40,13 @@
> import javax.jms.Session;
> import javax.jms.TextMessage;
> import javax.xml.stream.XMLStreamException;
>+import javax.naming.InitialContext;
>+import javax.naming.NamingException;
>+import javax.naming.Context;
>+import javax.naming.NameNotFoundException;
> import java.io.ByteArrayOutputStream;
> import java.io.IOException;
>+import java.util.Hashtable;
> 
> /**
>  * The TransportSender for JMS
>@@ -83,17 +90,6 @@
>                     msgContext.getProperty(Constants.OUT_TRANSPORT_INFO);
>         }
> 
>-        // should we wait and listen for a response?
>-        boolean waitForResponse = false;
>-
>-        Object seprLisn = msgContext.getProperty(
>-                Constants.Configuration.IS_USING_SEPARATE_LISTENER);
>-        if (Boolean.TRUE.equals(seprLisn)) {
>-            waitForResponse = false;
>-        } else if (!msgContext.isServerSide()) {
>-            waitForResponse = !msgContext.getOptions().isUseSeparateListener();
>-        }
>-
>         // get the ConnectionFactory to be used for the send
>         ConnectionFactory connectionFac = transportInfo.getConnectionFactory();
> 
>@@ -119,14 +115,45 @@
>             MessageProducer producer = session.createProducer(dest);
>             Destination replyDest = null;
> 
>+            boolean waitForResponse =
>+                msgContext.getOperationContext() != null &&
>+                WSDL2Constants.MEP_URI_OUT_IN.equals(
>+                    msgContext.getOperationContext().getAxisOperation().getMessageExchangePattern());
>+
>             if (waitForResponse) {
>-                try {
>-                    // create temporary queue to receive reply
>-                    replyDest = session.createTemporaryQueue();
>-                    message.setJMSReplyTo(replyDest);
>-                } catch (JMSException e) {
>-                    handleException("Error creating temporary queue for response");
>+                String replyToJNDIName = (String) msgContext.getProperty(JMSConstants.REPLY_PARAM);
>+                if (replyToJNDIName != null && replyToJNDIName.length() > 0) {
>+                    Context context = null;
>+                    Hashtable props = JMSUtils.getProperties(targetAddress);
>+                    try {
>+                        context = new InitialContext(props);
>+                    } catch (NamingException e) {
>+                        handleException("Could not get the initial context", e);
>+                    }
>+
>+                    try {
>+                        replyDest = (Destination) context.lookup(replyToJNDIName);
>+
>+                    } catch (NameNotFoundException e) {
>+                        log.warn("Cannot get or lookup JMS response destination : " +
>+                            replyToJNDIName + " : " + e.getMessage() +
>+                            ". Attempting to create a Queue named : " + replyToJNDIName);
>+                        replyDest = session.createQueue(replyToJNDIName);
>+
>+                    } catch (NamingException e) {
>+                        handleException("Cannot get JMS response destination : " +
>+                            replyToJNDIName + " : ", e);
>+                    }
>+
>+                } else {
>+                    try {
>+                        // create temporary queue to receive reply
>+                        replyDest = session.createTemporaryQueue();
>+                    } catch (JMSException e) {
>+                        handleException("Error creating temporary queue for response");
>+                    }
>                 }
>+                message.setJMSReplyTo(replyDest);
>             }
> 
>             try {
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
>For additional commands, e-mail: axis-cvs-help@ws.apache.org
>
>
>
>  
>

-- 
Thanks,
Deepal
................................................................
"The highest tower is built one brick at a time"



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


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

Posted by Deepal Jayasinghe <de...@opensource.lk>.
Hi Asankha;

Dont we need to commit this change to 1.2 branch ?

Thanks
Deepal

asankha@apache.org wrote:

>Author: asankha
>Date: Thu Mar 29 10:53:45 2007
>New Revision: 523781
>
>URL: http://svn.apache.org/viewvc?view=rev&rev=523781
>Log:
>Fix AXIS2-2434 and AXIS2-2266
>
>Modified:
>    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java
>    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/JMSConstants.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/Constants.java
>URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java?view=diff&rev=523781&r1=523780&r2=523781
>==============================================================================
>--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java (original)
>+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java Thu Mar 29 10:53:45 2007
>@@ -266,8 +266,6 @@
>         public static final String CONTENT_TYPE = "ContentType";
>         public static final String CONTENT_TYPE_OF_FAULT = "ContentTypeOfFault";
> 
>-        public static final String IS_USING_SEPARATE_LISTENER = "IsUsingSeparateListener";
>-
>         public static final String CONFIG_CONTEXT_TIMOUT_INTERVAL = "ConfigContextTimeoutInterval";
> 
>         public static final String TRANSPORT_IN_URL = "TransportInURL";
>
>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=523781&r1=523780&r2=523781
>==============================================================================
>--- 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 Thu Mar 29 10:53:45 2007
>@@ -17,6 +17,7 @@
> 
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>+import org.apache.axis2.addressing.EndpointReference;
> 
> import javax.jms.*;
> import javax.naming.Context;
>@@ -176,8 +177,38 @@
>      * @param serviceName     the service to which it belongs
>      */
>     public void addDestination(String destinationJndi, String serviceName) {
>+
>         serviceJNDINameMapping.put(destinationJndi, serviceName);
>-        serviceDestinationMapping.put(getDestinationName(destinationJndi), serviceName);
>+        String destinationName = getDestinationName(destinationJndi);
>+        log.warn("JMS Destination with JNDI name : " + destinationJndi + " does not exist");
>+
>+        Connection con = null;
>+        try {
>+            con = conFactory.createConnection();
>+            Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
>+            Queue queue = session.createQueue(destinationJndi);
>+            destinationName = queue.getQueueName();
>+            log.warn("JMS Destination with JNDI name : " + destinationJndi + " created");
>+            
>+        } catch (JMSException e) {
>+            log.error("Unable to create a Destination with JNDI name : " + destinationJndi, e);
>+            // mark service as faulty
>+            JMSUtils.markServiceAsFaulty(
>+                (String) serviceJNDINameMapping.get(destinationJndi),
>+                "Error looking up JMS destination : " + destinationJndi,
>+                msgRcvr.getAxisConf().getAxisConfiguration());
>+
>+        } finally {
>+            if (con != null) {
>+                try {
>+                    con.close();
>+                } catch (JMSException ignore) {}
>+            }
>+        }
>+
>+        serviceDestinationMapping.put(destinationName, serviceName);
>+        log.info("Mapping JNDI name : " + destinationJndi + " and JMS Destination name : " +
>+            destinationName + " against service : " + serviceName);
>     }
> 
>     /**
>@@ -377,6 +408,28 @@
>                 " to map its corresponding provider specific Destination name");
>         }
>         return null;
>+    }
>+
>+    /**
>+     * Return the EPR for the JMS Destination with the given JNDI name and using
>+     * this connection factory
>+     * @param destination the JNDI name of the JMS Destionation
>+     * @return the EPR
>+     */
>+    public EndpointReference getEPRForDestination(String destination) {
>+
>+        StringBuffer sb = new StringBuffer();
>+        sb.append(JMSConstants.JMS_PREFIX).append(destination);
>+        sb.append("?").append(JMSConstants.CONFAC_JNDI_NAME_PARAM).
>+                append("=").append(getJndiName());
>+        Iterator props = getProperties().keySet().iterator();
>+        while (props.hasNext()) {
>+            String key = (String) props.next();
>+            String value = (String) getProperties().get(key);
>+            sb.append("&").append(key).append("=").append(value);
>+        }
>+
>+        return new EndpointReference(sb.toString());
>     }
> 
>     public String getServiceByDestination(String destinationName) {
>
>Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConstants.java
>URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConstants.java?view=diff&rev=523781&r1=523780&r2=523781
>==============================================================================
>--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConstants.java (original)
>+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSConstants.java Thu Mar 29 10:53:45 2007
>@@ -28,9 +28,14 @@
>     public static final String JMS_PREFIX = "jms:/";
> 
>     /**
>-     * The Parameter name indicating a JMS destination
>+     * The Parameter name indicating a JMS destination for requests
>      */
>     public static final String DEST_PARAM = "transport.jms.Destination";
>+
>+    /**
>+     * The Parameter name indicating the response JMS destination
>+     */
>+    public static final String REPLY_PARAM = "transport.jms.ReplyDestination";
> 
>     /**
>      * The Parameter name indicating the JMS destination type
>
>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=523781&r1=523780&r2=523781
>==============================================================================
>--- 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 Thu Mar 29 10:53:45 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.description.Parameter;
> import org.apache.axis2.addressing.RelatesTo;
> import org.apache.axis2.context.ConfigurationContext;
> import org.apache.axis2.context.ContextFactory;
>@@ -101,8 +102,14 @@
>     public void onMessage(Message message) {
>         // directly create a new worker and delegate processing
>         try {
>-            log.debug("Received JMS message to destination : " +
>-                    message.getJMSDestination());
>+            if (log.isDebugEnabled()) {
>+                StringBuffer sb = new StringBuffer();
>+                sb.append("Received JMS message to destination : " + message.getJMSDestination());                
>+                sb.append("\nMessage ID : " + message.getJMSMessageID());
>+                sb.append("\nCorrelation ID : " + message.getJMSCorrelationID());
>+                sb.append("\nReplyTo ID : " + message.getJMSReplyTo());
>+                log.debug(sb.toString());
>+            }
>         } catch (JMSException e) {
>             e.printStackTrace();
>         }
>@@ -168,6 +175,19 @@
>             msgContext.setServerSide(true);
>             msgContext.setServiceGroupContextId(UUIDGenerator.getUUID());
>             msgContext.setMessageID(message.getJMSMessageID());
>+
>+            Destination replyTo = message.getJMSReplyTo();
>+            String jndiDestinationName = null;
>+            if (replyTo == null) {
>+                Parameter param = msgContext.getAxisService().getParameter(JMSConstants.REPLY_PARAM);
>+                if (param != null && param.getValue() != null) {
>+                    jndiDestinationName = (String) param.getValue();
>+                }
>+            }
>+
>+            if (jndiDestinationName != null) {
>+                msgContext.setReplyTo(jmsConFac.getEPRForDestination(jndiDestinationName));
>+            }
> 
>             String soapAction = JMSUtils.getProperty(message, JMSConstants.SOAPACTION);
>             if (soapAction != null) {
>
>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=523781&r1=523780&r2=523781
>==============================================================================
>--- 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 Thu Mar 29 10:53:45 2007
>@@ -22,6 +22,8 @@
> import org.apache.axis2.context.ConfigurationContext;
> import org.apache.axis2.context.MessageContext;
> import org.apache.axis2.description.TransportOutDescription;
>+import org.apache.axis2.description.WSDL2Constants;
>+import org.apache.axis2.description.Parameter;
> import org.apache.axis2.handlers.AbstractHandler;
> import org.apache.axis2.transport.TransportSender;
> import org.apache.commons.logging.Log;
>@@ -38,8 +40,13 @@
> import javax.jms.Session;
> import javax.jms.TextMessage;
> import javax.xml.stream.XMLStreamException;
>+import javax.naming.InitialContext;
>+import javax.naming.NamingException;
>+import javax.naming.Context;
>+import javax.naming.NameNotFoundException;
> import java.io.ByteArrayOutputStream;
> import java.io.IOException;
>+import java.util.Hashtable;
> 
> /**
>  * The TransportSender for JMS
>@@ -83,17 +90,6 @@
>                     msgContext.getProperty(Constants.OUT_TRANSPORT_INFO);
>         }
> 
>-        // should we wait and listen for a response?
>-        boolean waitForResponse = false;
>-
>-        Object seprLisn = msgContext.getProperty(
>-                Constants.Configuration.IS_USING_SEPARATE_LISTENER);
>-        if (Boolean.TRUE.equals(seprLisn)) {
>-            waitForResponse = false;
>-        } else if (!msgContext.isServerSide()) {
>-            waitForResponse = !msgContext.getOptions().isUseSeparateListener();
>-        }
>-
>         // get the ConnectionFactory to be used for the send
>         ConnectionFactory connectionFac = transportInfo.getConnectionFactory();
> 
>@@ -119,14 +115,45 @@
>             MessageProducer producer = session.createProducer(dest);
>             Destination replyDest = null;
> 
>+            boolean waitForResponse =
>+                msgContext.getOperationContext() != null &&
>+                WSDL2Constants.MEP_URI_OUT_IN.equals(
>+                    msgContext.getOperationContext().getAxisOperation().getMessageExchangePattern());
>+
>             if (waitForResponse) {
>-                try {
>-                    // create temporary queue to receive reply
>-                    replyDest = session.createTemporaryQueue();
>-                    message.setJMSReplyTo(replyDest);
>-                } catch (JMSException e) {
>-                    handleException("Error creating temporary queue for response");
>+                String replyToJNDIName = (String) msgContext.getProperty(JMSConstants.REPLY_PARAM);
>+                if (replyToJNDIName != null && replyToJNDIName.length() > 0) {
>+                    Context context = null;
>+                    Hashtable props = JMSUtils.getProperties(targetAddress);
>+                    try {
>+                        context = new InitialContext(props);
>+                    } catch (NamingException e) {
>+                        handleException("Could not get the initial context", e);
>+                    }
>+
>+                    try {
>+                        replyDest = (Destination) context.lookup(replyToJNDIName);
>+
>+                    } catch (NameNotFoundException e) {
>+                        log.warn("Cannot get or lookup JMS response destination : " +
>+                            replyToJNDIName + " : " + e.getMessage() +
>+                            ". Attempting to create a Queue named : " + replyToJNDIName);
>+                        replyDest = session.createQueue(replyToJNDIName);
>+
>+                    } catch (NamingException e) {
>+                        handleException("Cannot get JMS response destination : " +
>+                            replyToJNDIName + " : ", e);
>+                    }
>+
>+                } else {
>+                    try {
>+                        // create temporary queue to receive reply
>+                        replyDest = session.createTemporaryQueue();
>+                    } catch (JMSException e) {
>+                        handleException("Error creating temporary queue for response");
>+                    }
>                 }
>+                message.setJMSReplyTo(replyDest);
>             }
> 
>             try {
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
>For additional commands, e-mail: axis-cvs-help@ws.apache.org
>
>
>
>  
>

-- 
Thanks,
Deepal
................................................................
"The highest tower is built one brick at a time"



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