WAS连接MQ以及JNI查找的问题

WAS是通过JNI的方式连接MQ,对于JNI连接的问题我们都可以按以下方式检查。

  1. 首先要求须虚拟机和MQ都是64bit或32bit,不可混用。

    1) java -version 如果显示的版本中包含了64bit的字样,则是64位的java,否则是32位的。

    2) dump -X32_64 -ov /usr/mqm/java/lib64/libmqjbnd05.so|grep Magicfile libmqjbnd05.so查看对应的lib是64bit还是32bit

  2. 检查CLASSPATH是否有对应的jar包。

可以通过打印System.getProperties("java.class.path")或通过kill -3查看javacore文件中的对应参数确认。

  1. 检查LIBPATH是否有对应的so文件
    env|grep LIBPATH(AIX) 
    env|grep LD_LIBRARY_PATH(linux) 
    

可通过打印System.getProperties("java.library.path")或通过kill -3查看javacore文件中的对应参数确认。

具体到WAS连接MQ如果报错无法找到MQ的CLASS,则按如下的顺序检查:

  1. 检查WAS版本是64位还是32位: /usr/IBM/WebSphere/AppServer/java/bin/java -version 如果显示的版本中包含了64bit的字样,则是64位的WAS,否则是32位的。

  2. 检查/usr/IBM/WebSphere/AppServer/lib 目录下是否已包含了MQ的类com.ibm.mq.jar ,以及 libmqjbnd05.so 如果没有,则请从MQ安装目录下拷贝:

    cp /usr/mqm/java/lib/com.ibm.mq.jar /usr/IBM/WebSphere/AppServer/lib 
    cp /usr/mqm/java/lib64/libmqjbnd05.so /usr/IBM/WebSphere/AppServer/lib 
    
  3. 修改/usr/IBM/WebSphere/AppServer/profile/bin/setupCmdLine.sh 中的AIX启动环境变量部分,增加 LIBPATH=$LIBPATH:/usr/mqm/lib64

  4. 检查java.library.path中是否包含系统libpath(例如/usr/lib/)以及是否有MQ的so文件,如果有则使用dltmqlnk /usr/lib/命令删除。参考:http://www.mqseries.net/phpBB2/viewtopic.php?t=54232&sid=2eff95d42dc0158e0e1d1a71a0e3bdf1