我在tomcat 7的单个实例中运行两个grails Web应用程序,它们都试图连接到Websphere MQ发布并接收消息。第一个加载成功,但第二个加载错误。如果我将它们都部署在同一台机器上不同的tomcat实例中,则效果很好,但是当我在同一实例中运行两个应用程序时,会出现以下错误。

2011-08-30 14:09:24,661 [Thread-5] [uk.co.pershing.jbf.messaging.ReaderListener] [ERROR]-发生了异常... com.ibm.msg.client.jms.DetailedJMSException:JMSFMQ6312 :Java(tm)MQI中发生异常。 Java(tm)MQI引发了描述该问题的异常。有关更多信息,请参见链接的异常。
链接异常为
com.ibm.mq.jmqi.JmqiException:CC = 2; RC = 2495; AMQ8568:找不到本地JNI库'mqjbnd'。 [3 = mqjbnd]
2011-08-30 14:09:24,661 [Thread-5] [uk.co.pershing.jbf.servlet.BusStartupServlet] [错误]-uk.co.pershing.jbf.messaging.config.ConfigurationException:com.ibm。 msg.client.jms.DetailedJMSException:JMSFMQ6312:Java(tm)MQI中发生异常。 Java(tm)MQI引发了描述该问题的异常。有关更多信息,请参见链接的异常。

最佳答案

Java虚拟机仅允许一次加载JNI库。如果您尝试从应用程序加载Websphere-MQ JNI库,那么首先加载的应用程序将通过其特定于应用程序的ClassLoader独占访问JNI库。

对于单独的Tomcat实例,每个Tomcat JVM只有一个应用程序试图加载JNI库,因此这不是问题。

解决方案是通过将Websphere-MQ JNI jar放置在Tomcat的lib /目录而不是应用程序的lib /目录中,从Tomcat ClassLoader加载JNI库。然后,Tomcat ClassLoader将加载JNI库,并且两个应用程序都可以访问它们。

关于tomcat - tomcat中的多个Web应用程序连接Websphere MQ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7243755/

10-10 19:21