I modified axis2 transport JMS to ensure it creates a queue session instead of a topic session but this did not sovle my problem. Below is the same error, it's essentially the same call stack with createQueueSession instead of createTopicSession. My axis2.xml JMS transport configuration included below. Also including the jms sender and receiver definition from my axis2.xml.
2014-12-17 13:38:26,765 [-] [HttpClientWorker-2] ERROR JMSSender Unable to create a JMSMessageSender for : org.apache.axis2.transport.jms.JMSOutTransportInfo@315d2a36 oracle.jms.AQjmsException: JMS-107: Operation not allowed on Connection at oracle.jms.AQjmsError.throwEx(AQjmsError.java:334) at oracle.jms.AQjmsConnection.createQueueSession(AQjmsConnection.java:643) at org.apache.axis2.transport.jms.JMSOutTransportInfo.createJMSSender(JMSOutTransportInfo.java:361) at org.apache.axis2.transport.jms.JMSSender.sendMessage(JMSSender.java:121) at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:119) at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443) at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:159) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:265) at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:84) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:60) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:229) <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener"> <parameter name="myQueueConnectionFactory" locked="false"> <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.ldap.LdapCtxFactory</parameter> <parameter name="java.naming.provider.url" locked="false">ldap://localhost:10389/</parameter> <parameter name="server_dn" locked="false">cn=ORCL,cn=OracleContext,ou=Services, o=sgi,c=us</parameter> <parameter name="java.naming.security.principal" locked="false">uid=tromanow,ou=Services,o=sgi,c=us</parameter> <parameter name="java.naming.security.credentials" locked="false">tromanow</parameter> <parameter name="java.naming.security.authentication" locked="false">simple</parameter> <parameter name="transport.jms.UserName" locked="false">tromanow</parameter> <parameter name="transport.jms.Password" locked="false">tromanow</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">cn=tro_jms,cn=oracledbconnections,cn=ORCL, cn=OracleContext,ou=Services, o=sgi,c=us</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> </parameter> <parameter name="default" locked="false"> <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.ldap.LdapCtxFactory</parameter> <parameter name="java.naming.provider.url" locked="false">ldap://localhost:10389/</parameter> <parameter name="server_dn" locked="false">cn=ORCL,cn=OracleContext,ou=Services, o=sgi,c=us</parameter> <parameter name="java.naming.security.principal" locked="false">uid=tromanow,ou=Services,o=sgi,c=us</parameter> <parameter name="java.naming.security.credentials" locked="false">tromanow</parameter> <parameter name="java.naming.security.authentication" locked="false">simple</parameter> <parameter name="transport.jms.UserName" locked="false">tromanow</parameter> <parameter name="transport.jms.Password" locked="false">tromanow</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">cn=tro_jms,cn=oracledbconnections,cn=ORCL, cn=OracleContext,ou=Services, o=sgi,c=us</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> </parameter> </transportReceiver> <transportSender name="jms" class="org.apache.axis2.transport.jms.JMSSender"> <parameter name="myQueueConnectionFactory" locked="false"> <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.ldap.LdapCtxFactory</parameter> <parameter name="java.naming.provider.url" locked="false">ldap://localhost:10389/</parameter> <parameter name="server_dn" locked="false">cn=ORCL,cn=OracleContext,ou=Services, o=sgi,c=us</parameter> <parameter name="java.naming.security.principal" locked="false">uid=tromanow,ou=Services,o=sgi,c=us</parameter> <parameter name="java.naming.security.credentials" locked="false">tromanow</parameter> <parameter name="java.naming.security.authentication" locked="false">simple</parameter> <parameter name="transport.jms.UserName" locked="false">tromanow</parameter> <parameter name="transport.jms.Password" locked="false">tromanow</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">cn=tro_jms,cn=oracledbconnections,cn=ORCL, cn=OracleContext,ou=Services, o=sgi,c=us</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> </parameter> <parameter name="default" locked="false"> <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.ldap.LdapCtxFactory</parameter> <parameter name="java.naming.provider.url" locked="false">ldap://localhost:10389/</parameter> <parameter name="server_dn" locked="false">cn=ORCL,cn=OracleContext,ou=Services, o=sgi,c=us</parameter> <parameter name="java.naming.security.principal" locked="false">uid=tromanow,ou=Services,o=sgi,c=us</parameter> <parameter name="java.naming.security.credentials" locked="false">tromanow</parameter> <parameter name="java.naming.security.authentication" locked="false">simple</parameter> <parameter name="transport.jms.UserName" locked="false">tromanow</parameter> <parameter name="transport.jms.Password" locked="false">tromanow</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">cn=tro_jms,cn=oracledbconnections,cn=ORCL, cn=OracleContext,ou=Services, o=sgi,c=us</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> </parameter> </transportSender> On Wednesday, December 17, 2014 11:24 AM, Tech Bolek <[email protected]> wrote: I think I found the problem. It looks like Oracle is not compatible with Axis2 jms transport library. JMSOutTransportInfo(JMSConnectionFactory jmsConnectionFactory, Destination dest, String contentTypeProperty) { this.jmsConnectionFactory = jmsConnectionFactory; this.destination = dest; destinationType = dest instanceof Topic ? JMSConstants.DESTINATION_TYPE_TOPIC : JMSConstants.DESTINATION_TYPE_QUEUE; this.contentTypeProperty = contentTypeProperty; } In order to determine, whether the destination is a topic or a queue axis2 jms first checks to see if the destination implements the Topic interface. The problem is, the Oracle class is the same for both Topic and Queue, AQjmsDestination which implements both the Topic and the Queue interface. On Tuesday, December 16, 2014 11:54 PM, Hiranya Jayathilaka <[email protected]> wrote: It's been a while since I used the JMS transport. But perhaps you should try defining the appropriate connection factories under the JMS configuration in the axis2.xml file. Thanks, Hiranya On Dec 15, 2014, at 12:54 PM, Tech Bolek <[email protected]> wrote: > I'm sort of operating half-blind here but it seems like the configuration > below, even though is still not working, makes more sense than the previous > one. Again, the bold lines are what I added to the original configuration. > This timeI'm getting an error: > 2014-12-15 13:50:06,488 [-] [HttpClientWorker-1] ERROR JMSSender Unable to > create a JMSMessageSender for : > org.apache.axis2.transport.jms.JMSOutTransportInfo@283dd358 > oracle.jms.AQjmsException: JMS-107: Operation not allowed on Connection > at oracle.jms.AQjmsError.throwEx(AQjmsError.java:334) > at oracle.jms.AQjmsConnection.createTopicSession(AQjmsConnection.java:728) > at >org.apache.axis2.transport.jms.JMSOutTransportInfo.createJMSSender(JMSOutTransportInfo.java:365) > at org.apache.axis2.transport.jms.JMSSender.sendMessage(JMSSender.java:121) > at >org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:119) > at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443) > at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:159) > at >org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:265) > at >org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:84) > at >org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:60) > at >org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114) > at >org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:229) > at >org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:370) > at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive( > > > <definitions xmlns="http://ws.apache.org/ns/synapse"> > <proxy name="StockQuoteProxy" transports="https http jms" startOnLoad="true" >trace="disable"> > <target> > <endpoint> > <address uri="http://localhost:9000/services/SimpleStockQuoteService" >/> > </endpoint> > <inSequence> > <log level="full" /> > <enrich> > <source type="body" clone="true" /> > <target type="property" property="jms_body_text" /> > </enrich> > <property name="jms_body_text" >expression="get-property('jms_body_text')" scope="default" /> > <xslt key="jmsMsgToSoapMsg_xslt"> > <property name="jms_text" expression="get-property('jms_body_text')" >/> > </xslt> > <log level="full"> > <property name="After transformation" value="************" /> > </log> > </inSequence> > <outSequence> > <log level="full"> > <property name="OUT SEQUENCE" value="************" /> > </log> > <send/> > </outSequence> > </target> > > <publishWSDL >uri="file:repository/conf/sample/resources/proxy/sample_proxy_1.wsdl"/> > > <parameter name="transport.jms.ContentType"> > <rules> > <jmsProperty>ContentType</jmsProperty> > <default>text/plain</default> > </rules> > </parameter> > > <parameter >name="transport.jms.Destination">cn=tro_Q_JMS2,cn=OracleDBQueues,cn=ORCL,cn=OracleContext,ou=Services, > o=sgi,c=us</parameter> > <parameter >name="transport.jms.ReplyDestination">cn=tro_Q_JMS1,cn=OracleDBQueues,cn=ORCL,cn=OracleContext,ou=Services, > o=sgi,c=us</parameter> > > </proxy> > > <localEntry key="jmsMsgToSoapMsg_xslt" src="file:jmsMsgToSoapMsg.xslt" /> > > <sequence name="fault"> > <log level="full"> > <property name="MESSAGE" value="Executing default "fault" >sequence" /> > <property name="ERROR_CODE" expression="get-property('ERROR_CODE')" /> > <property name="ERROR_MESSAGE" >expression="get-property('ERROR_MESSAGE')" /> > </log> > <drop/> > </sequence> > > <sequence name="main"> > <log/> > <drop/> > </sequence> > </definitions> > > > On Monday, December 15, 2014 11:26 AM, Tech Bolek <[email protected]> >wrote: > > > Thanks. I've set up an LDAP server and configured my queues (I'm using JMS > queues though, not XML queues). Usign this link > http://wso2.com/library/tutorials/2011/11/configuring-wso2-esb-with-oracle-as-messaging-media/. > > My synapse configuration does the following:1. Read a message from JMS > queue2. Perform XSLT transformation and forward the request to the apache2 > axis server to invoke the test stock quote service3. The stock quote response > is captured in the log. > Now I'd like to capture the response in another JMS queue. I've tried > epanding the synapse config file as with the bold lines below but I'm getting > an error: > > 2014-12-15 11:24:59,000 [-] [HttpClientWorker-1] ERROR NativeWorkerPool > Uncaught exception > java.lang.NullPointerException > at org.apache.axis2.transport.jms.JMSSender.sendMessage(JMSSender.java:135) > at >org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:119) > at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443) > at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:159) > at >org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:265) > at >org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:84) > at >org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:60) > at >org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114) > at >org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:229) > at >org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:370) > at >org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:160) > at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181) > > > > > <definitions xmlns="http://ws.apache.org/ns/synapse"> > <proxy name="StockQuoteProxy" transports="https http jms" > startOnLoad="true" trace="disable"> > <target> > <endpoint> > <address >uri="http://localhost:9000/services/SimpleStockQuoteService" /> > </endpoint> > <inSequence> > <log level="full" /> > <enrich> > <source type="body" clone="true" /> > <target type="property" >property="jms_body_text" /> > </enrich> > <property name="jms_body_text" >expression="get-property('jms_body_text')" scope="default" /> > <xslt key="jmsMsgToSoapMsg_xslt"> > <property name="jms_text" >expression="get-property('jms_body_text')" /> > </xslt> > <log level="full"> > <property name="After transformation" >value="************" /> > </log> > </inSequence> > <outSequence> > <log level="full"> > <property name="OUT SEQUENCE" >value="************" /> > </log> > <send> > <header name="To" >value="jms:/cn=tro_Q_JMS1,cn=OracleDBQueues,cn=ORCL,cn=OracleContext,ou=Services,o=sgi,c=us"/> > </send> > </outSequence> > </target> > <publishWSDL > >uri="file:repository/conf/sample/resources/proxy/sample_proxy_1.wsdl"/> > <parameter name="transport.jms.ContentType"> > <rules> > <jmsProperty>ContentType</jmsProperty> > <default>text/plain</default> > </rules> > </parameter> > <parameter >name="transport.jms.Destination">cn=tro_Q_JMS2,cn=OracleDBQueues,cn=ORCL,cn=OracleContext,ou=Services, > o=sgi,c=us</parameter> > </proxy> > <localEntry key="jmsMsgToSoapMsg_xslt" src="file:jmsMsgToSoapMsg.xslt" >/> > <sequence name="fault"> > <log level="full"> > <property name="MESSAGE" value="Executing default >"fault" sequence" /> > <property name="ERROR_CODE" >expression="get-property('ERROR_CODE')" /> > <property name="ERROR_MESSAGE" >expression="get-property('ERROR_MESSAGE')" /> > </log> > <drop /> > </sequence> > <sequence name="main"> > <log /> > <drop /> > </sequence> > </sequence> > > On Monday, November 3, 2014 5:37 PM, Isuru Udana <[email protected]> wrote: > > > Hi All, > We can use existing JMS transport for Oracle AQ integration. There are set of > extra configurations needed to be done like setting us a LDAP server etc. > Resource available at [1] describes Oracle AQ integration with WSO2 ESB. > Since WSO2 ESB uses synapse as the mediation engine, we should be able do in > the same way for synapse. > And synapse do support to plug-in custom MessageStores. So we have that > option too. > [1] > http://wso2.com/library/tutorials/2011/11/configuring-wso2-esb-with-oracle-as-messaging-media/ > > Thanks. > On Tue, Nov 4, 2014 at 2:30 AM, Rajika Kumarasiri > <[email protected]> wrote: > > Oracle AQ provides a JNDI API and you should be able to use the JMS > transport without much trouble. > > Rajika > > On Mon, Nov 3, 2014 at 10:31 AM, Tech Bolek <[email protected]> > wrote: > >> Greetings, >> I'm looking for recomendations how to extend Synapse to support Oracle AQ >> messages. For example, I'd like to be able to specify in the configuration >> file that a message from a specific channel is to be sent to a pecific >> queue. Or that a message that originates in a specific queue is to be >> forwarded to web service. Oracle AQ has its own java API and I'm wondering >> how to integrate it with Synapse. I'm considering wiritng a custom >> transport and as well as looking at the Task interface or the Mediator >> interface. >> > > > > > -- > Isuru Udana > Senior Software Engineer; WSO2 Inc.; http://wso2.com > > email: [email protected] > blog: http://mytecheye.blogspot.com/ > twitter: http://twitter.com/isudana > > > > > > > -- Hiranya Jayathilaka Mayhem Lab/RACE Lab; Dept. of Computer Science, UCSB; http://cs.ucsb.edu E-mail: [email protected]; Mobile: +1 (805) 895-7443 Blog: http://techfeast-hiranya.blogspot.com
