2013-03-13 26 views
1

我试图连接到运行在Sun 1.7 JDK中的Linux 64位上的Websphere MQ 6。通过LDAP连接到Websphere MQ java.lang.UnsatisfiedLinkError:java.library.pat中没有mqjbnd

我试图通过JNDI连接到MQServer,在LDAP中查找对象,因为我的应用程序服务器与MQ服务器是分开的,因此我无法使用文件系统JNDI。

这一切工作正常,在我的开发框,但我有1)Windows和2)已安装MQ服务器。

我可以通过Websphere MQ Explorer连接到LDAP并在LDAP中创建绑定对象。

Java应用程序可以访问JNDI对象,并尝试建立一个连接,但我得到一个错误java.lang.UnsatisfiedLinkError中:在任何的java.library.path mqjbnd

我从here

安装7.5客户端

LD_LIBRARY_PATH运行命令后设置为默认值

. /opt/mqm/bin/setmqenv -s -l 

实际路径是

LD_LIBRARY_PATH = /usr/java/default/jre/lib/i386:/opt/mqm/lib64/compat:/opt/mqm/lib/compat 

我还在JVM上明确设置了-Djava.library.path = $ LD_LIBRARY_PATH。

但是,当我看看路径/ opt/mqm/lib64/compat:/ opt/mqm/lib/compat时,我看不到mqjbnd或类似的东西。

许多帖子和技术讨论说,客户端中没有mqjbnd只安装服务器。我感到困惑,因为我只想查找QueueManager并通过JNDI使用队列项 - 我应该只需要安装客户端而不是服务器?

LDAP方法是否适合我使用?我试图使用com.ibm.mq.jms.context.WMQInitialContextFactory,但永远无法为此获得安全权限。

对不起,但这是做我的头它 - 我不能帮助比较这与易于连接到ActiveMQ - 我必须在这里做错了什么。

例外是

[2013-03-13 14:32:41,389] ERROR - ServiceTaskManager Error acquiring a JMS connection to : cn=ConnectionFactoryLdap using JNDI properties : {java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url=ldap://LDAPSERVER:10389/dc=example,dc=com, transport.jms.ConnectionFactory=ibmMQQueueConnectionFactory, transport.jms.ConnectionFactoryType=queue, serviceType=proxy} 
com.ibm.msg.client.jms.DetailedJMSException: JMSFMQ6312: An exception occurred in the Java(tm) MQI. 
The Java(tm) MQI has thrown an exception describing the problem. 
See the linked exception for further information. 
     at sun.reflect.GeneratedConstructorAccessor30.newInstance(Unknown Source) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
     at com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:319) 
     at com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:233) 
     at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:6863) 
     at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:6254) 
     at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:285) 
     at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6189) 
     at com.ibm.mq.jms.MQConnectionFactory.createConnection(MQConnectionFactory.java:6218) 
     at org.apache.axis2.transport.jms.JMSUtils.createConnection(JMSUtils.java:555) 
     at org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.createConnection(ServiceTaskManager.java:824) 
     at org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.getConnection(ServiceTaskManager.java:706) 
     at org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.receiveMessage(ServiceTaskManager.java:496) 
     at org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.run(ServiceTaskManager.java:420) 
     at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:722) 
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2495;AMQ8568: The native JNI library 'mqjbnd' was not found. For a client installation this is expected. [3=mqjbnd] 
     at com.ibm.mq.jmqi.local.LocalMQ$1.run(LocalMQ.java:304) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at com.ibm.mq.jmqi.local.LocalMQ.initialise_inner(LocalMQ.java:268) 
     at com.ibm.mq.jmqi.local.LocalMQ.initialise(LocalMQ.java:231) 
     at com.ibm.mq.jmqi.local.LocalMQ.<init>(LocalMQ.java:1194) 
     at com.ibm.mq.jmqi.local.LocalServer.<init>(LocalServer.java:206) 
     at sun.reflect.GeneratedConstructorAccessor29.newInstance(Unknown Source) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
     at com.ibm.mq.jmqi.JmqiEnvironment.getInstance(JmqiEnvironment.java:732) 
     at com.ibm.mq.jmqi.JmqiEnvironment.getMQI(JmqiEnvironment.java:666) 
     at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:6855) 
     ... 13 more 
Caused by: java.lang.UnsatisfiedLinkError: no mqjbnd in java.library.path 
     at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860) 
     at java.lang.Runtime.loadLibrary0(Runtime.java:845) 
     at java.lang.System.loadLibrary(System.java:1084) 
     at com.ibm.mq.jmqi.local.LocalMQ.loadLib(LocalMQ.java:1138) 
     at com.ibm.mq.jmqi.local.LocalMQ$1.run(LocalMQ.java:279) 
     ... 24 more 
+0

此链接讨论与MQ v7类似的问题。可能对你有帮助。 http://www-01.ibm.com/support/docview.wss?uid=swg21413508 – Shashi 2013-03-13 05:42:03

+0

谢谢你,但我没有提到文件/opt/mqm/java/lib/libmqjbnd.so - 所以也许我需要服务器安装或我的应用程序服务器上的东西? – Steve666 2013-03-13 07:32:06

+0

这部分异常让我感到困惑_对于客户端安装,这是expected_ – Steve666 2013-03-13 07:33:09

回答

0
确定

所以LDAP ConnnectionFactory传输被设置为绑定模式。

我改变了这个客户端模式[这里] [1]

现在我有一个问题与认证,但比具有不正确或缺少本地库:)问题要好得多讨论 - 确保连接列表指向正确的服务器名称(端口)。

现在我需要理清认证...

+0

哪里? – Nerdfest 2014-04-23 14:34:34

+0

如果您使用的是MQ v7.1或更高版本,则默认情况下它是安全的。搜索CHLAUTH的[tag:websphere-mq]标签,我有几个答案可以解释做什么。作为一种快捷方式,您可以'ALTER QMGR CHLAUTH(DISABLED)'暂时忽略这些认证错误,但不要在生产中这样做!事实上,尽快加快速度,以便你可以重新开启CHLAUTH。如果您使用的是MQ Explorer,请下载并安装[MS0P](http://ibm.co/SupptPacMS0P)以帮助解决2035错误。如果您需要,请接受您自己的答案并将2035错误作为单独问题发布。欢迎来到SO。 – 2015-06-29 12:51:23

0

打开Tomcat服务器 - >打开劳克配置 - >参数选项卡下 - > - Djava.library。PATH = “C:\ IBM \ WebSphere MQ的\ java的\ lib64的”

它会解决你的例外,它的基本要求运行时库

+0

-Djava.library.path =“C:\ IBM \ WebSphere MQ \ java \ lib64”makre sure underScore should be available before D – 2014-07-22 18:57:07

0

的问题是对系统性能的Path变量。尝试通过在MQInstallation之前指定MQInstallation Dir:\ Lib64路径来运行代码Dir:\ Lib上的路径变量