[mule-user] javax.jms.JMSException: MQJCA1018:Only one session per connection allowed.

13 views
Skip to first unread message

Om Soni

unread,
Jun 7, 2011, 9:56:04 PM6/7/11
to us...@mule.codehaus.org
I am using JCA, without XA. Mule is embedded inside Webapp deployed in JBOSS. Messaging works just fine with one endpoint. Problem starts when I have two (one to read and one to write). Queues I am connecting to are in Websphere MQ.

Here is config:

<jms:connector name="jmsConnector" jndiInitialFactory="org.jnp.interfaces.NamingContextFactory"
jndiProviderUrl="jnp://127.0.0.1:1099"
connectionFactoryJndiName="java:wmq/myFC" jndiDestinations="true"
forceJndiDestinations="true" createMultipleTransactedReceivers="true"
numberOfConcurrentTransactedReceivers="10" disableTemporaryReplyToDestinations="true">
</jms:connector>

<xml-entity-decoder-transformer name="xmlDecoder" />
<mulexml:xslt-transformer name="xsltFedexRequest" xsl-file="xsl/fedexaddress.xslt" />
<mulexml:xslt-transformer name="xsltJavaAddressRequest" xsl-file="xsl/soap-address-jdbc-in.xslt" />

<jms:endpoint name="AgencyIn" queue="In" connector-ref="jmsConnector">
<jms:transaction action="NONE" />
</jms:endpoint>

<jms:endpoint name="AgencyOut" queue="out" connector-ref="jmsConnector">
<jms:transaction action="NONE" />
</jms:endpoint>


<flow name="GatewayFlow">
<inbound-endpoint
address="http://localhost:8888/GatewayService"
exchange-pattern="request-response"/>
<cxf:jaxws-service serviceClass="com.****.service.mule.address.AddressService" />
<component class ="com.***.service.mule.address.AddressService" />
<outbound-endpoint ref="AgencyIn"/>
</flow>

<flow name="AgencySOAP">
<inbound-endpoint ref="AgencyIn" transformer-refs="xsltFedexRequest xmlDecoder " />
<component class ="com.***.service.mule.address.FedexService"/>
<outbound-endpoint ref="AgencyOut" />
</flow>

<flow name="AddressMYSQL">

<inbound-endpoint ref="AgencyOut" transformer-refs="xsltJavaAddressRequest xmlDecoder"/>
<component class ="com.****.mule.address.AddressMySQLDAOService"/>
<jdbc:outbound-endpoint name="insertAddressMySQL"
queryKey="query0"
connector-ref="jdbcMySQLConnector"
exchange-pattern="one-way"/>
</flow>

Here is the stack trace:

org.mule.api.lifecycle.LifecycleException: Failed to start inbound endpoint "AgencyIn"
at org.mule.endpoint.DefaultInboundEndpoint.start(DefaultInboundEndpoint.java:116)
at org.mule.construct.AbstractFlowConstruct.startIfStartable(AbstractFlowConstruct.java:362)
at org.mule.construct.AbstractFlowConstruct$2.onTransition(AbstractFlowConstruct.java:144)
at org.mule.construct.AbstractFlowConstruct$2.onTransition(AbstractFlowConstruct.java:139)
at org.mule.lifecycle.AbstractLifecycleManager.invokePhase(AbstractLifecycleManager.java:141)
at org.mule.construct.FlowConstructLifecycleManager.fireStartPhase(FlowConstructLifecycleManager.java:95)
at org.mule.construct.AbstractFlowConstruct.start(AbstractFlowConstruct.java:138)

Caused by: org.mule.api.lifecycle.LifecycleException: MQJCA1018:Only one session per connection allowed. (javax.jms.JMSException)
at org.mule.transport.jms.MultiConsumerJmsMessageReceiver$SubReceiver.doConnect(MultiConsumerJmsMessageReceiver.java:182)
at org.mule.transport.jms.MultiConsumerJmsMessageReceiver.doConnect(MultiConsumerJmsMessageReceiver.java:131)
at org.mule.transport.AbstractTransportMessageHandler.connect(AbstractTransportMessageHandler.java:218)
at org.mule.transport.AbstractConnector.registerListener(AbstractConnector.java:1259)
at org.mule.endpoint.DefaultInboundEndpoint.start(DefaultInboundEndpoint.java:102)
... 102 more
Caused by: org.mule.transport.ConnectException: MQJCA1018:Only one session per connection allowed. (javax.jms.JMSException)
at org.mule.transport.jms.MultiConsumerJmsMessageReceiver$SubReceiver.createConsumer(MultiConsumerJmsMessageReceiver.java:314)
at org.mule.transport.jms.MultiConsumerJmsMessageReceiver$SubReceiver.doConnect(MultiConsumerJmsMessageReceiver.java:178)
... 106 more
Caused by: javax.jms.JMSException: MQJCA1018:Only one session per connection allowed.
at com.ibm.mq.connector.services.JCAExceptionBuilder.buildException(JCAExceptionBuilder.java:115)
at com.ibm.mq.connector.services.JCAExceptionBuilder.buildException(JCAExceptionBuilder.java:80)
at com.ibm.mq.connector.outbound.QueueConnectionWrapper.createQueueSession(QueueConnectionWrapper.java:76)
at org.mule.transport.jms.Jms102bSupport.createSession(Jms102bSupport.java:112)
at org.mule.transport.jms.JmsConnector.getSession(JmsConnector.java:563)
at org.mule.transport.jms.JmsConnector.getSession(JmsConnector.java:550)
at org.mule.transport.jms.MultiConsumerJmsMessageReceiver$SubReceiver.createConsumer(MultiConsumerJmsMessageReceiver.java:271)
... 107 more

Here is jboss ds.xml file for connection factory:

<connection-factories>
<tx-connection-factory>
<jndi-name>wmq/myFC</jndi-name>
<xa-transaction />
<rar-name>wmq.jmsra.rar</rar-name>
<connection-definition>javax.jms.QueueConnectionFactory</connection-definition>
<config-property name="channel" type="java.lang.String">MY.SVRCONN</config-property>
<config-property name="hostName" type="java.lang.String">host</config-property>
<config-property name="port" type="java.lang.String">1416</config-property>
<config-property name="queueManager" type="java.lang.String">HUBDEV</config-property>
<config-property name="transportType" type="java.lang.String">CLIENT</config-property>
<config-property name="username" type="java.lang.String"></config-property>
</tx-connection-factory>
<mbean code="org.jboss.resource.deployment.AdminObject" name="jca.wmq:name=gizmoIn">
<depends optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='wmq.jmsra.rar'</depends>
<attribute name="JNDIName">gizmoIn</attribute>
<attribute name="Type">javax.jms.Queue</attribute>
<attribute name="Properties">
baseQueueManagerName=HUBDEV
baseQueueName=UNIX.MY.RESPONSE.RECEIVE
</attribute>
</mbean>
<mbean code="org.jboss.resource.deployment.AdminObject" name="jca.wmq:name=gizmoOut">
<depends optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='wmq.jmsra.rar'</depends>
<attribute name="JNDIName">gizmoOut</attribute>
<attribute name="Type">javax.jms.Queue</attribute>
<attribute name="Properties">
baseQueueManagerName=HUBDEV
baseQueueName=UNIX.MY.REQUEST.SEND
</attribute>
</mbean>
</connection-factories>


I have tried to work this out for 6 hours. I will really appreciate some help.

Thanks,

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email


omsoni

unread,
Jun 9, 2011, 10:15:30 AM6/9/11
to us...@mule.codehaus.org

Mariano Capurro

unread,
Jun 9, 2011, 11:28:57 AM6/9/11
to us...@mule.codehaus.org
Hi

First time with JCA but based on what I read, you cannot have more than one session bound to one connection. Probably you can try defining two connections in Mule ESB with different names and then use one in each endpoint:

<jms:connector name="*readJmsConnector*" jndiInitialFactory="org.jnp.interfaces.NamingContextFactory"


jndiProviderUrl="jnp://127.0.0.1:1099"
connectionFactoryJndiName="java:wmq/myFC" jndiDestinations="true"
forceJndiDestinations="true" createMultipleTransactedReceivers="true"
numberOfConcurrentTransactedReceivers="10" disableTemporaryReplyToDestinations="true">
</jms:connector>

<jms:connector name="*writeJmsConnector*" jndiInitialFactory="org.jnp.interfaces.NamingContextFactory"


jndiProviderUrl="jnp://127.0.0.1:1099"
connectionFactoryJndiName="java:wmq/myFC" jndiDestinations="true"
forceJndiDestinations="true" createMultipleTransactedReceivers="true"
numberOfConcurrentTransactedReceivers="10" disableTemporaryReplyToDestinations="true">
</jms:connector>

And then use each connection in the connector-ref attribute of the endpoint.

<jms:endpoint name="AgencyOut" queue="out" connector-ref="*readJmsConnector*">

omsoni

unread,
Jun 9, 2011, 12:01:27 PM6/9/11
to us...@mule.codehaus.org
Thanks Mariano,

I believed I have tried that earlier and It had not worked. Anyway I just tried that again and it failed with same error:


<jms:connector name="jmsConnectorR" jndiInitialFactory="org.jnp.interfaces.NamingContextFactory" jndiProviderUrl="jnp://127.0.0.1:1099" connectionFactoryJndiName="java:wmq/myFC" jndiDestinations="true" forceJndiDestinations="true" createMultipleTransactedReceivers="true" numberOfConcurrentTransactedReceivers="10" disableTemporaryReplyToDestinations="true" />

<jms:connector name="jmsConnectorW" jndiInitialFactory="org.jnp.interfaces.NamingContextFactory" jndiProviderUrl="jnp://127.0.0.1:1099" connectionFactoryJndiName="java:wmq/myFC" jndiDestinations="true" forceJndiDestinations="true" createMultipleTransactedReceivers="true" numberOfConcurrentTransactedReceivers="10" disableTemporaryReplyToDestinations="true" />

<xml-entity-decoder-transformer name="xmlDecoder" />
<mulexml:xslt-transformer name="xsltFedexRequest" xsl-file="xsl/fedexaddress.xslt" />
<mulexml:xslt-transformer name="xsltJavaAddressRequest" xsl-file="xsl/soap-address-jdbc-in.xslt" />

<jms:endpoint name="AgencyIn" queue="gizmoIn" connector-ref="jmsConnectorR">


<jms:transaction action="NONE" />
</jms:endpoint>

<jms:endpoint name="AgencyOut" queue="gizmoOut" connector-ref="jmsConnectorW">


<jms:transaction action="NONE" />
</jms:endpoint>

<vm:connector name="inMemory" />
<flow name="GatewayFlow">
<vm:inbound-endpoint path="serviceCall" connector-ref="inMemory" transformer-refs="xsltFedexRequest xmlDecoder" />
<component class="com.****.service.mule.address.FedexService" />

<outbound-endpoint ref="AgencyIn" />
</flow>

<flow name="AddressMYSQL">


<inbound-endpoint ref="AgencyOut" transformer-refs="xsltJavaAddressRequest xmlDecoder" />

<component class="com.****.service.mule.address.AddressMySQLDAOService" />

<jdbc:outbound-endpoint name="insertAddressMySQL" queryKey="query0" connector-ref="jdbcMySQLConnector" exchange-pattern="one-way" />
</flow>


Same error (First endpoint is created successfully):

2011-06-09 11:50:44,362 INFO [STDOUT] (ResourceContainer.invoker.nonDaemon-1) 11:50:44,362 INFO [AbstractLifecycleManager] Initialising: 'null'. Object is: MultiConsumerJmsMessageReceiver
2011-06-09 11:50:44,676 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/GizmoSOAStackPOC]] (ResourceContainer.invoker.nonDaemon-1) Failed to start inbound endpoint "AgencyOut"
org.mule.api.lifecycle.LifecycleException: Failed to start inbound endpoint "AgencyOut"


at org.mule.endpoint.DefaultInboundEndpoint.start(DefaultInboundEndpoint.java:116)
at org.mule.construct.AbstractFlowConstruct.startIfStartable(AbstractFlowConstruct.java:362)

---------------------------------------------------------------------

Reply all
Reply to author
Forward
0 new messages