1

I am configuring a Web Application to connect to another Web Application via WMQ.

The MQ configuration is working fine on local, when both application are connected to the same local server.

But, when I deployed each application on their own servers I'm getting CCDT error.

Server 1 - connects to Server 2 via remote JNDI

Server 2 - holds the WMQ connection factory, Queues and Activation Specs.

When testing, on the Server 1 logs, it show the exception message below. Which confused me, how come Server 1 is looking for the TAB file when Server 2 is the one being configured to connect to MQ via CCDT. Also, server 2 does not contain any exceptions.

Any ideas what configuration I've done wrong?

Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2278;AMQ9516: File error occurred. [1=java.io.FileNotFoundException[\ccdt\CCDT.tab (The system cannot find the path specified.)],3=file:/ccdt/CCDT.tab]
    at com.ibm.mq.jmqi.system.internal.CCDT.parse(CCDT.java:333)
    at com.ibm.mq.jmqi.system.internal.CCDT.<init>(CCDT.java:191)
    at com.ibm.mq.jmqi.remote.internal.system.RemoteCCDT.<init>(RemoteCCDT.java:68)
    at com.ibm.mq.jmqi.remote.internal.RemoteFAP.getCcdt(RemoteFAP.java:413)
    at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1580)
    at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1286)
    at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:367)
djikay
  • 10,450
  • 8
  • 41
  • 52
javapadawan
  • 897
  • 6
  • 12
  • 29
  • What do you mean by remote JNDI? Are you accessing server2 via EJB or you just creating InitialContext pointing to other server? – Gas Jul 03 '14 at 07:30
  • Creating InitialContext pointing to the other server. i.e. CLUSTER/jms/qCF – javapadawan Jul 03 '14 at 08:28

2 Answers2

0

I think there has been some confusion here.

Your remote JNDI calls creating an initial context pointing to Server 2 just means that you're looking up the Connection Factory on Server 2.

So if the Connection Factory on server 2 has been configured with a CCDT, then when Server 1 makes its connection attempt using the connection factory from server 2, then it will also use a CCDT, as that's what the definition in JNDI contains.

Does that make sense?

I'd recommend you either:

a) Create a second connection factory in the remote JNDI with a different name without CCDT configured. So you could have 'ccdtCF' and 'cf' for example. You then configure the apps on the application servers to use the appropriate cf.

b) Use local JNDI on each server configured as you wish.

c) Ensure all clients connect in the same way on all servers. Either all CCDT (and the CCDT needs to be in the same file system location) or no CCDT connections.

Tim McCormick
  • 956
  • 4
  • 7
0

You have following solutions:

  • You could use remote JNDI, but you need all required resources on local node also in the same places, so in you case \ccdt\CCDT.tab file must be available on the same path
  • Reconfigure your connection factory to contain all the details instead of ccdt.
  • Use local resource definitions - create resources on both sides, not only on remote and get them from local server/cluster. So if your server1 is sending messages you should create connection factory and queue there. And if you have MDB on cluster (server2) you should create queue and activation specification there.

It is usually easier to create resources locally to application that is using it.

Gas
  • 17,601
  • 4
  • 46
  • 93
  • I did the suggestion and configured Server 1 to only to MQPUT, and Server 2 is configured to receive the message. So I also have Queue configuration in Server 2 where I created the ActivationSpec to receive messages from that Queue. I am able to send the message and see it in the Queue, but Server 2 is not picking up the messages. I remember, that's why I configured everything in one server since I encountered this problem before. Do you have any idea what common configuration mistake for MQ Message Listener using Activation Spec? – javapadawan Jul 04 '14 at 00:11
  • Was it working previously? Do you have any errors in server 2, if I remember correctly it should try to bind MDB during app startup. In general you should configure queue, activationSpec, and then bind it to the mdb, nothing really more... – Gas Jul 04 '14 at 07:59