[jboss-user] [JBoss Messaging] - Not a JBossDestination when writing to a websphere MQ using Websphere resource adapter

Erik Hodne do-not-reply at jboss.com
Tue Sep 21 08:51:02 EDT 2010


hodneeri [http://community.jboss.org/people/hodneeri] created the discussion

"Not a JBossDestination when writing to a websphere MQ using Websphere resource adapter"

To view the discussion, visit: http://community.jboss.org/message/562883#562883

--------------------------------------------------------------
Hi all,

I have a problem when connecting between JBoss 4.3.0 and a Websphere MQ.

I have followed the procedure described here:
 http://www.ibm.com/developerworks/websphere/library/techarticles/0710_ritchie/0710_ritchie.html?ca=drs http://www.ibm.com/developerworks/websphere/library/techarticles/0710_ritchie/0710_ritchie.html?ca=drs

Earlier I have made a connection to a Websphere MQ using an MDB like described in the document, and it works fine. It picks up incomming messages as expected.

Now I want to write a message from my application to a Websphere MQ, but then I get trouble. Here is my setup:

I have deployed wmq.jmsra.rar in the deploy-directory on my jboss, and I have put +com.ibm.mqetclient.jar+ in the lib-directory. These seem to work fine, and are also used by my MDB which is already working.

In +wmq.jmsra-ds.xml+, my mbean look like this (I have swapped the names of queues and hosts with examples):

<!-- mbeans defining JCA administered objects -->
  <mbean code="org.jboss.resource.deployment.AdminObject"
      name="jca.wmq:name=ivtqueue">

    <!-- Bind this AdminObject  with the JNDI name IVTQueue -->
    <attribute name="JNDIName">
      IVTQueue
    </attribute>

    <!-- this MBean depends on the WebSphere MQ resource adapter -->
    <depends optional-attribute-name="RARName">
      jboss.jca:service=RARDeployment,name='wmq.jmsra.rar'
    </depends>

    <!-- this admin object is a javax.jms.Queue -->
    <attribute name="Type">javax.jms.Queue</attribute>

    <!--
       Configuration for Queue TEST.QUEUE on queue manager ExampleQM. All messages sent 
       to this queue will have their expiry time overridden so that messages never expire
    -->
    <attribute name="Properties">
      baseQueueManagerName=ExampleQueueManager
      baseQueueName=ExampleQueueName
      <!--expiry=EXP_UNLIMITED-->
    </attribute>
  </mbean>


My tx connectionfactory:

<tx-connection-factory>

    <!-- Bind this ConnectionFactory with the JNDI name IVTCF -->
    <jndi-name>IVTCF</jndi-name>

    <!-- Indicate that the connection factory supports XA transactions -->
    <xa-transaction />

    <!-- rar-name is the actual RAR file name, in this case wmq.jmsra.rar -->
    <rar-name>wmq.jmsra.rar</rar-name>

    <!-- connection-definition is the ConnectionFactory interface 
      defined in the ra.xml -->
    <connection-definition>
      javax.jms.ConnectionFactory
    </connection-definition>

    <!--
        Configuration for the ConnectionFactory. This defines the channel, hostname, port,
        queueManager, and transportType properties for a client (TCP/IP) connection to WMQ
    -->
    <config-property name="channel" type="java.lang.String">
      Channel
    </config-property>
    <config-property name="hostName" type="java.lang.String">
      hostName
    </config-property>
    <config-property name="port" type="java.lang.String">
      40203
    </config-property>
    <config-property name="queueManager" type="java.lang.String">
      QUEUEMANAGER
    </config-property>
    <config-property name="transportType" type="java.lang.String">
      CLIENT
    </config-property>

    <!-- define security domain -->
    <security-domain-and-application>JmsXARealm</security-domain-and-application>
  </tx-connection-factory>


Now I deploy the testapplication +wmq.jmsra.ivt.ear+, and the testapplication runs fine, saying it creates a connection to the destination and sends a test message.

I now try to run my own code, I have refactored it to one short method here to illustrate how I do it:

private void connectAndSendMessage(String message) throws LoginException, JMSException, NamingException, CreateException, ConfigurationException, IOException{
        InitialContext ctx = new InitialContext();
        Queue queue = (Queue) ctx.lookup("IVTQueue");
        QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("IVTCF");
        QueueConnection queueConnection = qcf.createQueueConnection();
        queueConnection.start();
        QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
        
        QueueSender send = null;
        try{
            send = queueSession.createSender(queue);
            TextMessage tm = queueSession.createTextMessage(new Base64().encode(message));
            send.send(tm);
        }finally{
            if(send!=null){
                send.close();
            }
        }
}


When I try to run it, it manages to get a QueueSession, but when it tries to create a QueueSender, I get the following exception:

javax.jms.InvalidDestinationException: Not a JBossDestination:queue://ExampleQueueManager/ExampleQueueName
    at org.jboss.jms.client.JBossSession.createProducer(JBossSession.java:206)
    at org.jboss.jms.client.JBossSession.createSender(JBossSession.java:406)
    at com.ec.company.util.outbound.OutboundMQBuisnessAction.sendMessageJMS(OutboundMQBuisnessAction.java:81)
    at com.ec.company.util.outbound.OutboundMQBuisnessAction.transferSPSales(OutboundMQBuisnessAction.java:131)
    at com.ec.company.util.outbound.OutboundMQBuisnessAction.execute(OutboundMQBuisnessAction.java:57)
    at com.ec.eccore.controller.ejb.BusinessControllerBean.executeAction(BusinessControllerBean.java:422)
    at com.ec.eccore.controller.ejb.BusinessControllerBean.handleEvent(BusinessControllerBean.java:345)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.jboss.invocation.Invocation.performCall(Invocation.java:359)
    at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:237)
    at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:158)
    at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:169)
    at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:63)
    at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:121)
    at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:404)
    at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181)
    at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:168)
    at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205)
    at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:138)
    at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:648)
    at org.jboss.ejb.Container.invoke(Container.java:960)
    at sun.reflect.GeneratedMethodAccessor172.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
    at org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:169)
    at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:118)
    at org.jboss.invocation.InvokerInterceptor.invokeLocal(InvokerInterceptor.java:209)
    at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:195)
    at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
    at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:70)
    at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:112)
    at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
    at $Proxy174.handleEvent(Unknown Source)
    at com.ec.frmw.scheduler.job.BusinessControllerInvokerJob.executeBusinessController(BusinessControllerInvokerJob.java:111)
    at com.ec.frmw.scheduler.job.BusinessControllerInvokerJob.execute(BusinessControllerInvokerJob.java:81)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)


Have anybody seen this before, and can point me in the correct direction?

Regards,
Erik
--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/562883#562883]

Start a new discussion in JBoss Messaging at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2042]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20100921/ea404907/attachment-0001.html 


More information about the jboss-user mailing list