summaryrefslogtreecommitdiffstats
path: root/sandbox/rajith/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/rajith/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java')
-rw-r--r--sandbox/rajith/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java80
1 files changed, 80 insertions, 0 deletions
diff --git a/sandbox/rajith/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java b/sandbox/rajith/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java
new file mode 100644
index 0000000000..d088e0f288
--- /dev/null
+++ b/sandbox/rajith/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java
@@ -0,0 +1,80 @@
+package org.apache.tuscany.binding.jms;
+
+import java.lang.reflect.Method;
+
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.naming.Context;
+import javax.naming.NamingException;
+
+public class JMSProxy implements MessageListener{
+
+ protected Method operationMethod;
+ protected SDODataBinding dataBinding;
+ private Object entryPointProxy;
+ private JMSBinding jmsBinding;
+ private Context context;
+ private JMSResourceFactory jmsResourceFactory;
+ private OperationSelector operationSelector;
+
+ public JMSProxy(Object entryPointProxy,JMSResourceFactory jmsResourceFactory, JMSBinding jmsBinding,SDODataBinding dataBinding, OperationSelector operationSelector) throws NamingException{
+
+ this.entryPointProxy = entryPointProxy;
+ this.dataBinding = dataBinding;
+ this.jmsBinding = jmsBinding;
+ this.jmsResourceFactory = jmsResourceFactory;
+ this.operationSelector = operationSelector;
+ }
+
+ public void onMessage(Message msg){
+
+ String operationName = operationSelector.getOperationName(msg);
+
+ try {
+
+ Object[] args = dataBinding.fromXML(((TextMessage)msg).getText());
+
+ operationMethod = getOperationMethod(entryPointProxy,operationName,args);
+
+ Object result = operationMethod.invoke(entryPointProxy,args);
+
+ // if result is null then the method can be assumed as oneway
+ if (result != null){
+ String response = dataBinding.toXML(new Object[] {result} );
+ sendReply(operationName, response);
+ }
+ } catch (Exception e) {
+ // need to do proper error handling
+ e.printStackTrace();
+ }
+ }
+
+ private Method getOperationMethod(Object entryPointProxy2, String operationName, Object[] args) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ private void sendReply(String operationName,String payload) throws JMSException, NamingException{
+
+ Session session = jmsResourceFactory.createSession();
+
+ javax.jms.Message message = jmsResourceFactory.createMessage(session);
+ message.setJMSCorrelationID(operationName); // I am using the existing header instead of adding a new JMS property.
+
+ ((javax.jms.TextMessage)message).setText((String)payload);
+
+ Destination destination = null;
+ Object obj = context.lookup(jmsBinding.getDestinationName());
+ destination = (Destination) obj;
+
+ MessageProducer producer = session.createProducer(destination);
+ producer.send(message);
+ producer.close();
+ session.close();
+ }
+}