You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2006/12/21 10:29:18 UTC

svn commit: r489300 - in /incubator/tuscany/java/sca/services/bindings/binding.jms/src: main/java/org/apache/tuscany/binding/jms/ test/java/org/apache/tuscany/binding/jms/

Author: antelder
Date: Thu Dec 21 01:29:17 2006
New Revision: 489300

URL: http://svn.apache.org/viewvc?view=rev&rev=489300
Log:
Support non-temporary reply destinations

Modified:
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java?view=diff&rev=489300&r1=489299&r2=489300
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java Thu Dec 21 01:29:17 2006
@@ -60,6 +60,7 @@
 	private String operationSelectorPropertyName = "OpName";
 
         private String correlationScheme;
+        private String responseDestinationName;
 
 	public JMSBinding(int destinationType, String destinationName, String connectionFactoryName, String activationSpecName, String initialContextFactoryName, String providerURL, int deliveryMode, int timeToLive, int priority, String replyTo) {
 		super();
@@ -196,8 +197,10 @@
     }
 
     public void setResponseDestinationName(String name) {
-        // TODO Auto-generated method stub
-        
+        this.responseDestinationName = name;
+    }
+    public String getResponseDestinationName() {
+        return responseDestinationName;
     }
 
     public void setResponseDestinationType(int destination_type_queue2) {

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java?view=diff&rev=489300&r1=489299&r2=489300
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java Thu Dec 21 01:29:17 2006
@@ -19,6 +19,9 @@
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 
+import javax.jms.Destination;
+import javax.naming.NamingException;
+
 import org.apache.axiom.om.OMElement;
 import org.apache.tuscany.binding.jms.databinding.XMLTextMsgDataBinding;
 import org.apache.tuscany.idl.wsdl.WSDLServiceContract;
@@ -101,13 +104,23 @@
 		} catch (JMSBindingException e) {
 			throw new JMSBindingRuntimeException("Error building JMS reference",e);
 		}
+                Destination requestDest;
+                Destination replyDest = null;
+                try {
+                    requestDest = jmsResourceFactory.lookupDestination(jmsBinding.getDestinationName());
+                    if (jmsBinding.getResponseDestinationName() != null) {
+                        replyDest = jmsResourceFactory.lookupDestination(jmsBinding.getResponseDestinationName());
+                    }
+                } catch (NamingException e) {
+                    throw new JMSBindingRuntimeException(e);
+                }
         
-        Reference reference = new JMSReference(name,parent,wireService, jmsBinding, jmsResourceFactory,opSec,interfaze);
+        Reference reference = new JMSReference(name,parent,wireService, jmsBinding, jmsResourceFactory,opSec,interfaze, requestDest, replyDest);
         reference.setBindingServiceContract(serviceContract);
         return reference;
 
     }
-
+        
     private JMSResourceFactory getJMSResourceFactory(JMSBinding jmsBinding) throws JMSBindingException {
     	String className = jmsBinding.getJmsResourceFactoryName();   
     	if (className != null && !className.equals("")){

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java?view=diff&rev=489300&r1=489299&r2=489300
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java Thu Dec 21 01:29:17 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.binding.jms;
 
+import javax.jms.Destination;
+
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.extension.ReferenceExtension;
 import org.apache.tuscany.spi.model.Operation;
@@ -29,27 +31,35 @@
  * @version $Rev: 449970 $ $Date: 2006-09-26 06:05:35 -0400 (Tue, 26 Sep 2006) $
  */
 public class JMSReference<T> extends ReferenceExtension {
-	
-	private JMSBinding jmsBinding; 
-	private JMSResourceFactory jmsResourceFactory;
-	private OperationSelector operationSelector;
-	
-    public JMSReference(String name, 
-    		            CompositeComponent parent,
-			            WireService wireService, 
-			            JMSBinding jmsBinding,			            
-			            JMSResourceFactory jmsResourceFactory,
-			            OperationSelector operationSelector,
-			            Class<?> service) {
-    	
-		super(name, service, parent, wireService);
-
-		this.jmsBinding = jmsBinding;
-		this.jmsResourceFactory = jmsResourceFactory;
-		this.operationSelector = operationSelector;
-	}
+
+    protected JMSBinding jmsBinding;
+    protected JMSResourceFactory jmsResourceFactory;
+    protected OperationSelector operationSelector;
+    protected Destination requestDest;
+    protected Destination replyDest;
+
+    public JMSReference(String name,
+                        CompositeComponent parent,
+                        WireService wireService,
+                        JMSBinding jmsBinding,
+                        JMSResourceFactory jmsResourceFactory,
+                        OperationSelector operationSelector,
+                        Class<?> service,
+                        Destination requestDest,
+                        Destination replyDest) {
+
+        super(name, service, parent, wireService);
+
+        this.jmsBinding = jmsBinding;
+        this.jmsResourceFactory = jmsResourceFactory;
+        this.operationSelector = operationSelector;
+        this.requestDest = requestDest;
+        this.replyDest = replyDest;
+    }
 
     public TargetInvoker createTargetInvoker(ServiceContract contract, Operation operation) {
-    	return new JMSTargetInvoker(jmsResourceFactory, jmsBinding, operation.getName(),operationSelector);
+        return new JMSTargetInvoker(jmsResourceFactory, jmsBinding, operation.getName(), operationSelector,
+                                    requestDest, replyDest);
     }
+
 }

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java?view=diff&rev=489300&r1=489299&r2=489300
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java Thu Dec 21 01:29:17 2006
@@ -18,7 +18,6 @@
  */
 package org.apache.tuscany.binding.jms;
 
-
 import java.lang.reflect.InvocationTargetException;
 
 import javax.jms.Destination;
@@ -32,61 +31,71 @@
 
 /**
  * Invoke a JMS reference.
- *
+ * 
  * @version $Rev: 449970 $ $Date: 2006-09-26 06:05:35 -0400 (Tue, 26 Sep 2006) $
  */
 public class JMSTargetInvoker extends TargetInvokerExtension {
     private JMSBinding jmsBinding;
     private String operationName;
-	private JMSResourceFactory jmsResourceFactory;
+    private JMSResourceFactory jmsResourceFactory;
     private OperationSelector operationSelector;
-    
-    public JMSTargetInvoker(JMSResourceFactory jmsResourceFactory,JMSBinding jmsBinding, String operationName, OperationSelector operationSelector){
+    protected Destination requestDest;
+    protected Destination replyDest;
+
+    public JMSTargetInvoker(JMSResourceFactory jmsResourceFactory,
+                            JMSBinding jmsBinding,
+                            String operationName,
+                            OperationSelector operationSelector,
+                            Destination requestDest,
+                            Destination replyDest) {
         super(null, null, null);
         this.jmsBinding = jmsBinding;
         this.jmsResourceFactory = jmsResourceFactory;
         this.operationName = operationName;
         this.operationSelector = operationSelector;
+        this.requestDest = requestDest;
+        this.replyDest = replyDest;
     }
 
-    public Object invokeTarget(Object payload,final short sequence)throws InvocationTargetException {
+    public Object invokeTarget(Object payload, final short sequence) throws InvocationTargetException {
         try {
-            
-        	return sendReceiveMessage((Object[])payload);
-        	
+
+            return sendReceiveMessage((Object[])payload);
+
         } catch (Exception e) { // catch JMS specific error
-                e.printStackTrace();
-        	throw new AssertionError(e);
+            e.printStackTrace();
+            throw new AssertionError(e);
         }
 
     }
 
-    private Object sendReceiveMessage(Object[] payload) throws JMSException, NamingException, JMSBindingException{
-    	
-    	Session session = jmsResourceFactory.createSession();
+    private Object sendReceiveMessage(Object[] payload) throws JMSException, NamingException, JMSBindingException {
+
+        Session session = jmsResourceFactory.createSession();
 
         javax.jms.Message message = jmsResourceFactory.createMessage(session, payload);
-    	
-        operationSelector.setOperationName(operationName,message);  
-        
-    	Destination destination = jmsResourceFactory.lookupDestination(jmsBinding.getDestinationName());
-        
-        MessageProducer producer = session.createProducer(destination);
-        
-        // create a temporary queue and listen to the response
-        //Destination replyDest = session.createQueue(jmsBinding.getDestinationName()+ "-reply");
-        Destination replyDest = session.createTemporaryQueue();
+        operationSelector.setOperationName(operationName, message);
+
+        if (jmsBinding.getResponseDestinationName() == null) {
+            replyDest = session.createTemporaryQueue();
+        }
+
         message.setJMSReplyTo(replyDest);
-        
+
+        MessageProducer producer = session.createProducer(requestDest);
+
         producer.send(message);
         producer.close();
+
+        String msgSelector = "JMSCorrelationID = '" + message.getJMSMessageID() + "'";
         
-        MessageConsumer consumer = session.createConsumer(replyDest);
+        MessageConsumer consumer = session.createConsumer(replyDest, msgSelector);
         jmsResourceFactory.startConnection();
-        javax.jms.Message reply = consumer.receive(jmsBinding.getTimeToLive());        
-        consumer.close();        
+        javax.jms.Message reply = consumer.receive(jmsBinding.getTimeToLive());
+        consumer.close();
         session.close();
-        
+
         return jmsResourceFactory.getMessagePayload(reply);
     }
+
 }

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java?view=diff&rev=489300&r1=489299&r2=489300
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java Thu Dec 21 01:29:17 2006
@@ -115,6 +115,9 @@
 	}
 
 	public Destination lookupDestination(String jndiName) throws NamingException {
+                if(context == null){
+                        createInitialContext();
+                }
 		return (Destination)context.lookup(jndiName);
 	}
 

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java?view=diff&rev=489300&r1=489299&r2=489300
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java Thu Dec 21 01:29:17 2006
@@ -21,6 +21,9 @@
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.naming.NamingException;
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.activemq.broker.BrokerContainer;
@@ -42,7 +45,7 @@
     protected static final String REQUEST_XML = "<ns:getGreetings xmlns:ns=\"http://helloworld\"><ns:name>petra</ns:name></ns:getGreetings>";
     protected static final String REPLY_XML = "<ns1:getGreetingsResponse xmlns:ns1=\"http://helloworld\"><ns1:getGreetingsReturn>Hello petra</ns1:getGreetingsReturn></ns1:getGreetingsResponse>";
 
-    public void testJMSBinding() throws InvocationTargetException, SAXException, IOException, ParserConfigurationException {
+    public void testJMSBinding() throws InvocationTargetException, SAXException, IOException, ParserConfigurationException, NamingException, JMSException {
         String reply = introService.greet("Rajith");
         assertEquals("Hello Rajith", reply);
 
@@ -55,7 +58,7 @@
     
     }
 
-    private JMSTargetInvoker createJMSInvoker() {
+    private JMSTargetInvoker createJMSInvoker() throws NamingException, JMSException {
         JMSBinding binding = new JMSBinding();
         binding.setInitialContextFactoryName("org.activemq.jndi.ActiveMQInitialContextFactory");
         binding.setConnectionFactoryName("ConnectionFactory");
@@ -65,7 +68,8 @@
         binding.setOperationSelectorPropertyName("scaOperationName");
         JMSResourceFactory rf = new SimpleJMSResourceFactory(binding);
         rf.setDataBinding(new XMLTextMsgDataBinding());
-        JMSTargetInvoker invoker = new JMSTargetInvoker(rf, binding, "getGreetings", new DefaultOperationSelector(binding));
+        Destination requestDest = rf.lookupDestination(binding.getDestinationName());
+        JMSTargetInvoker invoker = new JMSTargetInvoker(rf, binding, "getGreetings", new DefaultOperationSelector(binding), requestDest, null);
         return invoker;
     }
 



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