Wednesday, January 13, 2010

"main" java.lang.UnsatisfiedLinkError: no mqjbnd05 in java.l ibrary.path

Exception in thread "main" java.lang.UnsatisfiedLinkError: no mqjbnd05 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1491)
at java.lang.Runtime.loadLibrary0(Runtime.java:788)
at java.lang.System.loadLibrary(System.java:834)
at com.ibm.mq.MQSESSION.loadLib(MQSESSION.java:872)
at com.ibm.mq.server.MQSESSION$1.run(MQSESSION.java:228)
at java.security.AccessController.doPrivileged(Native Method)
at com.ibm.mq.server.MQSESSION.(MQSESSION.java:222)
at com.ibm.mq.MQSESSIONServer.getMQSESSION(MQSESSIONServer.java:70)
at com.ibm.mq.MQSESSION.getSession(MQSESSION.java:492)

สำหรับใครที่ทำงานกับ MQ แล้วเจอ error แบบนี้ ผมพอจะอธิบายให้ฟังได้ครับคราวๆครับว่าเกิดจากอะไรสิ่งที่เกิดขึ้นก็คือ java หาตำแหน่งของ library mqjbnd05.dll (สำหรับ windows) หรือ mqjbnd05.so (สำหรับ linux) เบื้องต้นอาจเกิดจากมีการแก้ไข environment path ต่างๆของตัว Websphere MQ ครับ ไม่ว่าจะจากมนุษย์ หรือซอฟต์แวร์ที่มีการติดตั้งลงไปใหม่ครับ วิธีที่แก้ไขก็ต้องตรวจสอบ path กันใหม่ครับว่า path ต่อไปนี้ได้กำหนดค่าไว้ถูกต้อง หรือไม่ (อ้างตาม Websphere MQ using Java)






MQ_JAVA_DATA_PATH: C:\Program Files\IBM\WebSphere MQ
MQ_JAVA_INSTALL_PATH: C:\Program Files\IBM\WebSphere MQ\Java
MQ_JAVA_LIB_PATH: C:\Program Files\IBM\WebSphere MQ\Java\lib

หากแก้ไขให้ตรงกับค่าเหล่านี้แล้วยังไม่สามารถแก้ปัญหาได้ แสดงว่า java ไม่สามารถเข้าถึง MQ java library path ได้ ดังนั้นให้กำหนด path ดังนี้

set path=%path%;C:\Program Files\IBM\WebSphere MQ\Java\lib

แล้วเมื่อรันแล้วอาจจะเกิด Exception ตัวใหม่ดังนี้

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Program Files (x86)\IBM\WebSphere MQ\Java\lib\mqjbnd05.dll:
Can't find dependent libraries

เนื่องจาก mqbnd05.dll มีการเรียกใช้งาน mqm.dll และอื่นๆ (สามารถดูได้โดยใช้ Dependencies tool ของ Visual Stuio .Net) ดังนั้นให้เพิ่ม

set path=%path%;C:\Program Files\IBM\WebSphere MQ\bin

ก็จะสามารถทำงานได้ โดยเพื่อให้สามารถทำงานได้ใน scope กว้างจึงควรกำหนดที่ Tab Advances ใน My Computer หรือ profiles ของ Linux ครับ

No comments: