Java MQ CCDT AMQ9516 FileNotFoundException

Java MQ CCDT AMQ9516 FileNotFoundException,java,websphere,ibm-mq,ibm-was,Java,Websphere,Ibm Mq,Ibm Was,我正在配置一个Web应用程序,以便通过WMQ连接到另一个Web应用程序 当两个应用程序都连接到同一个本地服务器时,MQ配置在本地服务器上工作正常 但是,当我将每个应用程序部署到它们自己的服务器上时,我得到了CCDT错误 服务器1-通过远程JNDI连接到服务器2 服务器2-保存WMQ连接工厂、队列和激活规范 测试时,在Server1日志上显示以下异常消息。这让我很困惑,为什么当服务器2被配置为通过CCDT连接到MQ时,服务器1却在寻找选项卡文件。此外,服务器2不包含任何异常 知道我做错了什么吗 C

我正在配置一个Web应用程序,以便通过WMQ连接到另一个Web应用程序

当两个应用程序都连接到同一个本地服务器时,MQ配置在本地服务器上工作正常

但是,当我将每个应用程序部署到它们自己的服务器上时,我得到了CCDT错误

服务器1-通过远程JNDI连接到服务器2

服务器2-保存WMQ连接工厂、队列和激活规范

测试时,在Server1日志上显示以下异常消息。这让我很困惑,为什么当服务器2被配置为通过CCDT连接到MQ时,服务器1却在寻找选项卡文件。此外,服务器2不包含任何异常

知道我做错了什么吗

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)

我认为这里有些混乱

远程JNDI调用创建指向服务器2的初始上下文只意味着您正在服务器2上查找连接工厂

因此,如果服务器2上的连接工厂配置了CCDT,那么当服务器1使用服务器2上的连接工厂进行连接尝试时,它也将使用CCDT,因为JNDI中的定义就是这样

这有意义吗

我建议你:

在远程JNDI中创建第二个连接工厂,使用不同的名称,而不配置CCDT。例如,您可以使用“ccdtCF”和“cf”。然后在应用程序服务器上配置应用程序以使用适当的cf

b在您希望配置的每个服务器上使用本地JNDI


c确保所有客户端在所有服务器上以相同的方式连接。所有CCDT和CCDT需要位于同一文件系统位置,或者没有CCDT连接。

您有以下解决方案:

您可以使用远程JNDI,但您需要本地节点上的所有必需资源也在相同的位置,因此在您的情况下\ccdt\ccdt.tab文件必须在相同的路径上可用 重新配置连接工厂以包含所有详细信息,而不是ccdt。 使用本地资源定义—在两侧(而不仅仅是远程)创建资源,并从本地服务器/集群获取资源。所以,如果您的server1正在发送消息,您应该创建连接工厂并在那里排队。如果集群服务器2上有MDB,则应该在那里创建队列和激活规范。
在本地为使用它的应用程序创建资源通常比较容易。

远程JNDI是什么意思?您是通过EJB访问server2,还是只是创建指向其他服务器的InitialContext?创建指向其他服务器的InitialContext。i、 e.CLUSTER/jms/qCFI执行了建议,并将服务器1配置为仅对MQPUT,服务器2配置为接收消息。因此,我还在服务器2中进行了队列配置,在那里我创建了ActivationSpec来接收来自该队列的消息。我可以发送消息并在队列中看到它,但服务器2没有接收消息。我记得,这就是为什么我在一台服务器上配置了所有东西,因为我以前遇到过这个问题。您知道使用激活规范的MQ消息侦听器的常见配置错误是什么吗?它以前工作过吗?您在服务器2中是否有任何错误,如果我没记错的话,它应该在应用程序启动期间尝试绑定MDB。一般来说,您应该配置队列、activationSpec,然后将其绑定到mdb,仅此而已……谢谢Tim。我只是根据谁先回答来选择答案。我先回答。谁知道stackoverflow为什么这样命令他们!: