|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
![Reply to topic](templates/DAJ_Glass/images/lang_english/reply.gif) |
|
Invoking CICS Web Services over MQ |
« View previous topic :: View next topic » |
Author |
Message
|
nabeenj |
Posted: Wed May 25, 2016 8:47 am Post subject: Invoking CICS Web Services over MQ |
|
|
Newbie
Joined: 09 Dec 2015 Posts: 3
|
Hello experts,
I have a CICS Web Services service and a Java client created in Eclipse using the Web Services > Generate Client tool.
I have WebSphere MQ Server 8.0 installed on my Windows machine.
The client can invoke the web service through HTTP, and I have also been successful in running the client locally to invoke the web service with a uri "jms:/queue?destination=myQ@QMGR&initialContextFactory=com.ibm.mq.jms.Nojndi&connectionFactory=(connectQueueManager(QMGR)binding(auto))&replyDestination=myReplyQ&targetService=/myService" to go through MQ.
However, when trying to run the client on another machine with MQ Client 8.0 installed, I get this error message:
Exception: Cannot get connection using Client/Server bindings. MQCC_FAILED(2) MQRC_CONNECTION_ERROR(2273)
I have created the SVRCONN and CLNTCONN channels and the listener on the MQ Server machine, copied across the AMQCLCHL.TAB to the client machine and set the MQCHLLIB and MQCHTAB environment variables.
I noted that I also get this error on my own MQ Server machine if I change the binding value in the jms:/ uri to "binding(client)".
Can you tell me where I am going wrong please?
Much appreciated. |
|
Back to top |
|
![](templates/DAJ_Glass/images/spacer.gif) |
vennela |
Posted: Thu May 26, 2016 9:31 am Post subject: |
|
|
![](images/avatars/3920056954bc56b21d42af.jpg) Jedi Knight
Joined: 11 Aug 2002 Posts: 4055 Location: Hyderabad, India
|
|
Back to top |
|
![](templates/DAJ_Glass/images/spacer.gif) |
nabeenj |
Posted: Thu Jun 09, 2016 7:23 am Post subject: |
|
|
Newbie
Joined: 09 Dec 2015 Posts: 3
|
Thank you for pointing me to that post, vennela. Indeed, good questions and excellent answers and explanations - very helpful for someone like me with little experience of JMS. It prompted me to read further the IBM WebSphere MQ docs on "Developing JMS and Java Platform, Enterprise Edition applications". Following the steps there I was able to run the point-to-point installation verification test on the MQ Client machine successfully. I also created my own test Java program using the IBM MQ JMS extensions. It does not use JNDI, but explicity sets the properties of my object instance of the MQConnectionFactory class, as such:
Code: |
try {
factory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
factory.setQueueManager(qManager);
factory.setHostName(hostname);
factory.setPort(1416);
factory.setChannel("SYSTEM.DEF.SVRCONN");
..
|
I create objects of MQQueue, Connection, Session, MessageProducer, MessageConsumer and TextMessage. I am able to run this test program on the MQ Client machine to connect to a Queue Manager on the MQ Server machine, put a message and get that message from a queue. It runs through fine...
Now, back to the Java Web Service client that uses a "jms:/queue?destination=.." uri to invoke a web service through MQ Transport, I changed the uri to specify "binding(client)" and to include the connectionFactory parameters clientChannel and clientConnection -
Code: |
endpoint = "jms:/queue?destination=myRequestQ@QMGR"
+ "&initialContextFactory=com.ibm.mq.jms.Nojndi&connectionFactory=(connectQueueManager(QMGR"
+ ")binding(client)clientChannel(SYSTEM.DEF.SVRCONN)clientConnection(nwb-nabeenj8(1416)))&replyDestination=myReplyQ&targetService=/demows";
|
I am not using JNDI to retrieve the connection and queue information. This is all explicitly specified in the jms uri.
I continued to get the MQRC_CONNECTION_ERROR(2273) exception, this time with a little more information -
Exception: Cannot get connection using Client bindings. MQCC_FAILED(2) MQRC_CONN
ECTION_ERROR(2273).; nested exception is:
com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2538'.
After much thought and deliberation I enabled log4j logging for axis, and discovered that the clientConnection value gets messed up. The default port number 1414 gets appended to the parameter value -
(2) (2211); nested exception is:
Cannot get connection using Client bindings. MQCC_FAILED(2) MQRC_CONNECTION_ERROR(2273).; nested exception is:
com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2538'.
at com.ibm.mq.soap.transport.jms.WMQSOAPException.getSOAPException(Unknown Source)
at com.ibm.mq.soap.transport.jms.WMQSender.invoke(Unknown Source)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.demows.www.Demows_BindingStub.demoWS(Demows_BindingStub.java:178)
at com.demows.www.DemowsProxy.demoWS(DemowsProxy.java:50)
at soap.client.DemoWSStaticClient.main(DemoWSStaticClient.java:41)
Caused by: Cannot get connection using Client bindings. MQCC_FAILED(2) MQRC_CONNECTION_ERROR(2273).; nested exception is:
com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2538'.
at com.ibm.mq.soap.transport.jms.WMQSOAPException.getSOAPException(Unknown Source)
at com.ibm.mq.soap.transport.jms.WMQAddress.connectToQmgr(Unknown Source)
... 13 more
Caused by: com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2538'.
at com.ibm.mq.MQManagedConnectionJ11.<init>(MQManagedConnectionJ11.java:251)
at com.ibm.mq.MQClientManagedConnectionFactoryJ11._createManagedConnection(MQClientManagedConnectionFactoryJ11.java:450)
at com.ibm.mq.MQClientManagedConnectionFactoryJ11.createManagedConnection(MQClientManagedConnectionFactoryJ11.java:487)
at com.ibm.mq.StoredManagedConnection.<init>(StoredManagedConnection.java:96)
at com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:194)
at com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:767)
at com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:715)
at com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:678)
at com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:148)
at com.ibm.mq.MQQueueManager.<init>(MQQueueManager.java:752)
... 14 more
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2538;AMQ9204: Connection to host 'nwb-nabeenj8(1416(1414)' rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2538;AMQ9205: The host name supplied is not valid. [3=nwb-nabeenj8(1416,4=TCP]],3=nwb-nabeenj8(1416(1414),5=RemoteTCPConnection.parseConnectionName]
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:2299)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1287)
at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnect(InterceptedJmqiImpl.java:376)
at com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnect(ESEJMQI.java:560)
at com.ibm.mq.MQSESSION.MQCONNX_j(MQSESSION.java:916)
at com.ibm.mq.MQManagedConnectionJ11.<init>(MQManagedConnectionJ11.java:237)
... 23 more
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2538;AMQ9205: The host name supplied is not valid. [3=nwb-nabeenj8(1416,4=TCP]
at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.parseConnectionName(RemoteTCPConnection.java:324)
at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:1207)
at com.ibm.mq.jmqi.remote.impl.RemoteConnection.connect(RemoteConnection.java:847)
at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSessionFromNewConnection(RemoteConnectionSpecification.java:409)
at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSession(RemoteConnectionSpecification.java:305)
at com.ibm.mq.jmqi.remote.impl.RemoteConnectionPool.getSession(RemoteConnectionPool.java:146)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1734)
... 28 more
------------------------------------------------
I started the SYSTEM.DEFAULT.LISTENER.TCP Listener for the Queue Manager on the MQ Server machine (after making sure no other TCP Listeners of other QMs had been started on the same port), and changed the clientConnection parameter to just the host name - "clientConnection(nwb-nabeenj8)".
After this, SUCCESS!
I was able to invoke the web service through MQ and got back the desired response.
So, I guess the one question remains - how would I specify the port in the clientConnection parameter (or another parameter in the uri?) so that I can use other than the default 1414? |
|
Back to top |
|
![](templates/DAJ_Glass/images/spacer.gif) |
fjb_saper |
Posted: Thu Jun 09, 2016 4:54 pm Post subject: |
|
|
![](images/avatars/gallery/misc/2.gif) Grand High Poobah
Joined: 18 Nov 2003 Posts: 20697 Location: LI,NY
|
Have you tried the variant
Code: |
&hostname=blabla&port=1639 |
in your connection setup? Otherwise go for the file based JNDI. Looks like you could use it ![](images/smiles/innocent.gif) _________________ MQ & Broker admin |
|
Back to top |
|
![](templates/DAJ_Glass/images/spacer.gif) |
nabeenj |
Posted: Fri Jun 10, 2016 9:17 am Post subject: |
|
|
Newbie
Joined: 09 Dec 2015 Posts: 3
|
Thank you for this suggestion fjb_saper. I tried adding in the hostname and port parameters into the uri, but it didn't work. With any sort of variant - I get exceptions "Invalid value jms:/queue?destination=.." or "Could not parse URL jms:/queue?destination=.."
Looks like I will have to stick with going to the default 1414 port.
I don't think file based JNDI is an option for web service requests through MQ. Just going according to the IBM MQ docs to create my Java JAX-RPC web service clients. Under Reference > Developing applications reference > SOAP reference > URI parameters, it says this about the initialContextFactory URI parameter -
Quote: |
&initialContextFactory = contextFactory
contextFactory is required and must be set to com.ibm.mq.jms.Nojndi. Make sure Nojndi.jar is in the class path for a WebSphere Application Server Web services client. Nojndi.jar returns Java objects based on the contents of the connectionFactory and destination parameters, rather than by reference to a directory.
|
Thank you for your suggestion though, and the explanations in the other post pointed out by vennela. |
|
Back to top |
|
![](templates/DAJ_Glass/images/spacer.gif) |
|
|
![Reply to topic](templates/DAJ_Glass/images/lang_english/reply.gif) |
|
Page 1 of 1 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|