2011-08-30 80 views
1

我在tomcat 7的單個實例中運行兩個grails web應用程序,它們都嘗試連接到websphere MQ發佈和接收消息。第一個加載得很好,但第二個我們有下面的錯誤。如果我在同一臺機器上將它們兩個部署在不同的tomcat實例中,它可以很好地工作,但是當我在同一個實例中運行這兩個應用程序時會引發以下錯tomcat中的多個Web應用程序連接Websphere MQ

2011-08-30 14:09:24,661 [Thread-5] [uk.co.pershing.jbf.messaging.ReaderListener] [錯誤] - 發生異常... 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已經拋出了一個異常來描述問題。查看鏈接的例外以獲取更多信息。

回答

2

Java虛擬機只允許加載一次JNI庫。如果您嘗試從應用程序加載Websphere-MQ JNI庫,那麼首先加載的應用程序將通過其特定於應用程序的ClassLoader獨佔訪問JNI庫。

對於單獨的Tomcat實例,每個Tomcat JVM只有一個應用程序試圖加載JNI庫,所以這不是問題。

解決方法是從Tomcat ClassLoader加載JNI庫,方法是將Websphere-MQ JNI jar放入Tomcat lib /目錄而不是應用程序的lib /目錄。然後,Tomcat ClassLoader將加載JNI庫,這兩個應用程序都可以訪問它們。

+0

謝謝,它爲我工作。 –