diff options
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.java | 80 |
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(); + } +} |