package org.apache.tuscany.binding.jms; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageConsumer; import javax.jms.Session; import javax.naming.NamingException; import javax.xml.namespace.QName; import org.apache.tuscany.spi.component.CompositeComponent; import org.apache.tuscany.spi.extension.ServiceExtension; import org.apache.tuscany.spi.wire.WireService; import commonj.sdo.helper.TypeHelper; /** * @version $Rev$ $Date$ */ public class JMSService extends ServiceExtension { private JMSBinding jmsBinding; private TypeHelper typeHelper; private JMSResourceFactory jmsResourceFactory; private MessageConsumer consumer; private OperationSelector operationSelector; public JMSService(String name, CompositeComponent parent, WireService wireService, JMSBinding jmsBinding, JMSResourceFactory jmsResourceFactory, OperationSelector operationSelector, Class service, TypeHelper typeHelper) { super(name, service, parent, wireService); this.jmsBinding = jmsBinding; this.typeHelper = typeHelper; this.jmsResourceFactory = jmsResourceFactory; this.operationSelector = operationSelector; } public void start() { super.start(); try { registerListerner(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void stop() { try { consumer.close(); jmsResourceFactory.closeConnection(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } super.stop(); } private void registerListerner() throws NamingException, JMSException{ Object entryPointProxy = this.getServiceInstance(); QName responseQN = new QName("payload"); SDODataBinding dataBinding = new SDODataBinding(typeHelper, false, responseQN); Session session = jmsResourceFactory.createSession(); Destination destination = session.createQueue(jmsBinding.getDestinationName()); consumer = session.createConsumer(destination); consumer.setMessageListener(new JMSProxy(entryPointProxy,jmsResourceFactory,jmsBinding,dataBinding,operationSelector)); jmsResourceFactory.startConnection(); } }