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 2008/07/11 15:32:32 UTC

svn commit: r675946 - in /tuscany/java/sca/modules: binding-jms-runtime/ binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/ binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/provider/ binding-jms/src/main/...

Author: antelder
Date: Fri Jul 11 06:32:31 2008
New Revision: 675946

URL: http://svn.apache.org/viewvc?rev=675946&view=rev
Log:
Start getting callbacks over jms to work

Modified:
    tuscany/java/sca/modules/binding-jms-runtime/pom.xml
    tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingInvoker.java
    tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingListener.java
    tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceBindingProvider.java
    tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingServiceBindingProvider.java
    tuscany/java/sca/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceQueueCreateModeTestCaseFIXME.java
    tuscany/java/sca/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingConstants.java

Modified: tuscany/java/sca/modules/binding-jms-runtime/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-jms-runtime/pom.xml?rev=675946&r1=675945&r2=675946&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-jms-runtime/pom.xml (original)
+++ tuscany/java/sca/modules/binding-jms-runtime/pom.xml Fri Jul 11 06:32:31 2008
@@ -50,6 +50,12 @@
 
         <dependency>
             <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-core</artifactId>
+            <version>1.4-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
             <artifactId>tuscany-interface-java</artifactId>
             <version>1.4-SNAPSHOT</version>
         </dependency>

Modified: tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingInvoker.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingInvoker.java?rev=675946&r1=675945&r2=675946&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingInvoker.java (original)
+++ tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingInvoker.java Fri Jul 11 06:32:31 2008
@@ -32,8 +32,12 @@
 import org.apache.tuscany.sca.binding.jms.impl.JMSBindingConstants;
 import org.apache.tuscany.sca.binding.jms.impl.JMSBindingException;
 import org.apache.tuscany.sca.interfacedef.Operation;
-import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.runtime.ReferenceParameters;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
 import org.osoa.sca.ServiceRuntimeException;
 
 /**
@@ -52,8 +56,9 @@
     protected JMSMessageProcessor responseMessageProcessor;
     protected Destination requestDest;
     protected Destination replyDest;
+	private String callbackDestName;
 
-    public JMSBindingInvoker(JMSBinding jmsBinding, Operation operation, JMSResourceFactory jmsResourceFactory) {
+    public JMSBindingInvoker(JMSBinding jmsBinding, Operation operation, JMSResourceFactory jmsResourceFactory, RuntimeComponentReference reference) {
 
         this.operation = operation;
         operationName = operation.getName();
@@ -65,13 +70,38 @@
         try {
             requestDest = lookupDestination();
             replyDest = lookupResponseDestination();
+
+            if (hasCallback()) {
+            	callbackDestName = getCallbackDestinationName(reference);            	
+            }
+            
         } catch (NamingException e) {
             throw new JMSBindingException(e);
         }
 
     }
 
-    /**
+    protected String getCallbackDestinationName(RuntimeComponentReference reference) {
+    	RuntimeComponentService s = (RuntimeComponentService) reference.getCallbackService();
+    	JMSBinding b = s.getBinding(JMSBinding.class);
+    	if (b != null) {
+    		JMSBindingServiceBindingProvider bp = (JMSBindingServiceBindingProvider) s.getBindingProvider(b);
+    		return bp.getDestinationName();
+    	}
+		return null;
+	}
+
+	protected boolean hasCallback() {
+    	if (operation.getInterface() instanceof JavaInterface) {
+    		JavaInterface jiface = (JavaInterface) operation.getInterface();
+    		if (jiface.getCallbackClass() != null) {
+    			return true;
+    		}
+    	}
+    	return false;
+	}
+
+	/**
      * Looks up the Destination Queue for the JMS Binding
      * 
      * @return The Destination Queue
@@ -177,29 +207,31 @@
         return dest;
     }
 
-    public org.apache.tuscany.sca.invocation.Message invoke(org.apache.tuscany.sca.invocation.Message msg) {
+    public org.apache.tuscany.sca.invocation.Message invoke(org.apache.tuscany.sca.invocation.Message tuscanyMsg) {
         try {
-            Object resp = invokeTarget((Object[])msg.getBody(), (short)0);
-            msg.setBody(resp);
+        	
+            Object resp = invokeTarget(tuscanyMsg);
+            tuscanyMsg.setBody(resp);
+
         } catch (InvocationTargetException e) {
-            msg.setFaultBody(e.getCause());
+            tuscanyMsg.setFaultBody(e.getCause());
         } catch (ServiceRuntimeException e) {
             if (e.getCause() instanceof InvocationTargetException) {
                 if ((e.getCause().getCause() instanceof RuntimeException)) {
-                    msg.setFaultBody(e.getCause());
+                    tuscanyMsg.setFaultBody(e.getCause());
                 } else {
-                    msg.setFaultBody(e.getCause().getCause());
+                    tuscanyMsg.setFaultBody(e.getCause().getCause());
                 }
             } else {
-                msg.setFaultBody(e);
+                tuscanyMsg.setFaultBody(e);
             }
         } catch (Throwable e) {
-            msg.setFaultBody(e);
+            tuscanyMsg.setFaultBody(e);
         }
-        return msg;
+        return tuscanyMsg;
     }
 
-    public Object invokeTarget(Object payload, final short sequence) throws InvocationTargetException {
+    public Object invokeTarget(org.apache.tuscany.sca.invocation.Message tuscanyMsg) throws InvocationTargetException {
         try {
             Session session = jmsResourceFactory.createSession();
             try {
@@ -211,7 +243,8 @@
                     replyToDest = (replyDest != null) ? replyDest : session.createTemporaryQueue();
                 }
 
-                Message requestMsg = sendRequest((Object[])payload, session, replyToDest);
+                Message requestMsg = sendRequest(tuscanyMsg, session, replyToDest);
+
                 if (replyToDest == null) {
                     return null;
                 } else {
@@ -229,13 +262,15 @@
         }
     }
 
-    protected Message sendRequest(Object payload, Session session, Destination replyToDest) throws JMSException {
+    protected Message sendRequest(org.apache.tuscany.sca.invocation.Message tuscanyMsg, Session session, Destination replyToDest) throws JMSException {
 
-        Message requestMsg = requestMessageProcessor.insertPayloadIntoJMSMessage(session, payload);
+        Message requestMsg = requestMessageProcessor.insertPayloadIntoJMSMessage(session, tuscanyMsg.getBody());
 
         requestMsg.setJMSDeliveryMode(jmsBinding.getDeliveryMode());
         requestMsg.setJMSPriority(jmsBinding.getPriority());
 
+        setCallbackHeaders(tuscanyMsg, requestMsg);
+
         requestMessageProcessor.setOperationName(operationName, requestMsg);
         requestMsg.setJMSReplyTo(replyToDest);
 
@@ -248,6 +283,23 @@
         return requestMsg;
     }
 
+	private void setCallbackHeaders(org.apache.tuscany.sca.invocation.Message tuscanyMsg, Message jmsMsg) throws JMSException {
+
+        ReferenceParameters parameters = tuscanyMsg.getFrom().getReferenceParameters();
+
+//        if (parameters.getCallbackReference() != null) {
+//        	jmsMsg.setStringProperty(JMSBindingConstants.CALLBACK_EPR_PROPERTY, parameters.getCallbackReference().getBinding().getURI());
+//        }
+
+        if (parameters.getCallbackID() != null) {
+        	jmsMsg.setStringProperty(JMSBindingConstants.CALLBACK_ID_PROPERTY, parameters.getCallbackID().toString());
+        }
+
+        if (callbackDestName != null) {
+        	jmsMsg.setStringProperty(JMSBindingConstants.CALLBACK_Q_PROPERTY, callbackDestName);
+        }
+	}
+
     protected Message receiveReply(Session session, Destination replyToDest, String requestMsgId) throws JMSException,
         NamingException {
         String msgSelector = "JMSCorrelationID = '" + requestMsgId + "'";

Modified: tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingListener.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingListener.java?rev=675946&r1=675945&r2=675946&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingListener.java (original)
+++ tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingListener.java Fri Jul 11 06:32:31 2008
@@ -34,7 +34,11 @@
 import org.apache.tuscany.sca.binding.jms.impl.JMSBinding;
 import org.apache.tuscany.sca.binding.jms.impl.JMSBindingConstants;
 import org.apache.tuscany.sca.binding.jms.impl.JMSBindingException;
+import org.apache.tuscany.sca.core.assembly.EndpointReferenceImpl;
+import org.apache.tuscany.sca.core.invocation.MessageImpl;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.runtime.EndpointReference;
+import org.apache.tuscany.sca.runtime.ReferenceParameters;
 import org.apache.tuscany.sca.runtime.RuntimeComponentService;
 
 /**
@@ -114,15 +118,39 @@
             }
         }
 
-        if (operation != null) {
-            return service.getRuntimeWire(jmsBinding).invoke(operation, (Object[])requestPayload);
-        } else {
+        if (operation == null) {
             throw new JMSBindingException("Can't find operation " + (operationName != null ? operationName
                 : ON_MESSAGE_METHOD_NAME));
         }
 
+        MessageImpl tuscanyMsg = new MessageImpl();
+        tuscanyMsg.setBody(requestPayload);
+        tuscanyMsg.setOperation(operation);
+
+        setCallbackProperties(requestJMSMsg, tuscanyMsg);
+
+        return service.getRuntimeWire(jmsBinding).invoke(operation, tuscanyMsg);
     }
 
+	protected void setCallbackProperties(Message requestJMSMsg, MessageImpl tuscanyMsg) throws JMSException {
+		if (service.getInterfaceContract().getCallbackInterface() != null) {
+
+			EndpointReference from = new EndpointReferenceImpl(null);
+			tuscanyMsg.setFrom(from);
+            ReferenceParameters parameters = from.getReferenceParameters();
+            
+            String callbackdestName = requestJMSMsg.getStringProperty(JMSBindingConstants.CALLBACK_Q_PROPERTY);
+            if (callbackdestName != null) {
+                parameters.setCallbackReference(new EndpointReferenceImpl(callbackdestName));
+            }
+
+            String callbackID = requestJMSMsg.getStringProperty(JMSBindingConstants.CALLBACK_ID_PROPERTY);        
+            if (callbackID != null) {
+                parameters.setCallbackID(callbackID);
+            }
+        }
+	}
+
     protected void sendReply(Message requestJMSMsg, Object responsePayload, boolean isFault) {
         try {
 

Modified: tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceBindingProvider.java?rev=675946&r1=675945&r2=675946&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceBindingProvider.java (original)
+++ tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceBindingProvider.java Fri Jul 11 06:32:31 2008
@@ -114,7 +114,7 @@
                     jmsBinding.setResponseDestinationName(reference.getName());
                 }    
         */        
-        JMSBindingInvoker invoker = new JMSBindingInvoker(jmsBinding, operation, jmsResourceFactory);
+        JMSBindingInvoker invoker = new JMSBindingInvoker(jmsBinding, operation, jmsResourceFactory, reference);
         jmsBindingInvokers.add(invoker);
         return invoker;
     }

Modified: tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingServiceBindingProvider.java?rev=675946&r1=675945&r2=675946&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingServiceBindingProvider.java (original)
+++ tuscany/java/sca/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingServiceBindingProvider.java Fri Jul 11 06:32:31 2008
@@ -26,7 +26,9 @@
 import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.MessageConsumer;
+import javax.jms.Queue;
 import javax.jms.Session;
+import javax.jms.Topic;
 import javax.naming.NamingException;
 
 import org.apache.tuscany.sca.binding.jms.impl.JMSBinding;
@@ -54,6 +56,8 @@
     private WorkScheduler workScheduler;
     private boolean running;
 
+	private Destination destination;
+
     public JMSBindingServiceBindingProvider(RuntimeComponent component,
                                             RuntimeComponentService service,
                                             JMSBinding binding,
@@ -122,7 +126,7 @@
     private void registerListerner() throws NamingException, JMSException {
 
         Session session = jmsResourceFactory.createSession();
-        Destination destination = lookupDestinationQueue();
+        destination = lookupDestinationQueue();
 
         consumer = session.createConsumer(destination);
 
@@ -224,4 +228,18 @@
 
         return destination;
     }
+    
+    public String getDestinationName() {
+    	try {
+        	if (destination instanceof Queue) {
+            	return ((Queue)destination).getQueueName();
+        	} else if (destination instanceof Topic){
+            	return ((Topic)destination).getTopicName();
+        	} else {
+        	    return null;
+        	}
+    	} catch (JMSException e) {
+    		throw new JMSBindingException(e);
+    	}
+    }
 }

Modified: tuscany/java/sca/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceQueueCreateModeTestCaseFIXME.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceQueueCreateModeTestCaseFIXME.java?rev=675946&r1=675945&r2=675946&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceQueueCreateModeTestCaseFIXME.java (original)
+++ tuscany/java/sca/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceQueueCreateModeTestCaseFIXME.java Fri Jul 11 06:32:31 2008
@@ -296,7 +296,7 @@
 
         // Try and create the JMS Binding Invoker for the JMS Binding
         try {
-            new JMSBindingInvoker(jmsBinding, operation, null);
+            new JMSBindingInvoker(jmsBinding, operation, null, null);
 
             // Check whether we were expecting an exception
             if (expectingRequestException || expectingResponseException) {

Modified: tuscany/java/sca/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingConstants.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingConstants.java?rev=675946&r1=675945&r2=675946&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingConstants.java (original)
+++ tuscany/java/sca/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingConstants.java Fri Jul 11 06:32:31 2008
@@ -65,5 +65,7 @@
 
     String FAULT_PROPERTY = "org.apache.tuscany.sca.fault";
     
+    String CALLBACK_ID_PROPERTY = "CallbackID";
+    String CALLBACK_Q_PROPERTY = "scaCallbackQueue ";
 
 }