【发布时间】:2011-08-05 21:25:23
【问题描述】:
我遇到了我正在努力解决的 IBM MQ 引发的这个异常,我不知道为什么会发生这种情况。来了:
java.lang.NullPointerException
at com.ibm.mq.jmqi.JmqiEnvironment.getVersionProperty(JmqiEnvironment.java:2204)
at com.ibm.mq.jmqi.JmqiEnvironment.getProductIdentifier(JmqiEnvironment.java:2224)
at com.ibm.mq.jmqi.remote.internal.system.RemoteConnection.initSess(RemoteConnection.java:1388)
at com.ibm.mq.jmqi.remote.internal.system.RemoteConnection.connect(RemoteConnection.java:1078)
at com.ibm.mq.jmqi.remote.internal.system.RemoteConnectionPool.getConnection(RemoteConnectionPool.java:338)
at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1488)
at com.ibm.mq.MQSESSION.MQCONNX_j(MQSESSION.java:915)
at com.ibm.mq.MQManagedConnectionJ11.<init>(MQManagedConnectionJ11.java:224)
at com.ibm.mq.MQClientManagedConnectionFactoryJ11._createManagedConnection(MQClientManagedConnectionFactoryJ11.java:505)
at com.ibm.mq.MQClientManagedConnectionFactoryJ11.createManagedConnection(MQClientManagedConnectionFactoryJ11.java:547)
at com.ibm.mq.StoredManagedConnection.<init>(StoredManagedConnection.java:95)
at com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:182)
at com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:869)
at com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:761)
at com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:712)
at com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:171)
at com.ibm.mq.MQQueueManager.(init)(MQQueueManager.java:597)
at mytestpackage.MyTestClass.(init)(MyTestClass.java:143)
. . .
我有两种情况,(1) 一个运行正常的独立单线程应用程序 (jre6),但是当我将它 (2) 用作 multi 使用的库的一部分时遇到了麻烦-core 环境(使用 1.4.2 JVM)。
复制代码
MQEnvironment.hostname = Host;
MQEnvironment.channel = Channel;
MQEnvironment.port = Port;
MQEnvironment.userID = QMUser;
MQEnvironment.password = QMPass;
MQQueueManager qmanager = new MQQueueManager(QueueManager);
MQMessage mqmessage = new MQMessage();
MQPutMessageOptions mqputmessageoptions = new MQPutMessageOptions();
MQQueue mqqueue = qmanager.accessQueue(QueueReq, 8208, null, null, null);
mqmessage.format = MQC.MQFMT_STRING;
mqmessage.persistence = 1;
mqmessage.replyToQueueName = QueueResp;
mqmessage.expiry = -1;
mqmessage.priority = -1;
mqmessage.writeString(MWAS);
mqmessage.messageId = "".getBytes();
mqmessage.correlationId = "".getBytes();
mqqueue.put(mqmessage, mqputmessageoptions);
mqqueue.close();
执行甚至没有到达MQQueueManager的实例化,分配MQEnvironment的静态属性时抛出异常。
额外信息
运行的操作系统是 Windows 2003 Server R2 Enterprise SP2 (x64)。 JVM 是 Sun 的 1.4.2_10 (x86)。 WMQ 版本是 7.0.1.5。 一些系统属性是: java.runtime.version=1.4.2_10-b03、java.vm.vendor=Sun Microsystems Inc.、os.arch=x86。
最深的异常
java.lang.ExceptionInInitializerError
at com.ibm.msg.client.commonservices.cssystem.WASSupport.<clinit>(WASSupport.java:39)
at com.ibm.mq.internal.MQCommonServices$6.run(MQCommonServices.java:1263)
at com.ibm.mq.internal.MQCommonServices$Helper.runIgnoresNoClass(MQCommonServices.java:1322)
at com.ibm.mq.internal.MQCommonServices.isJmsCommonServicesRequired(MQCommonServices.java:1277)
at com.ibm.mq.internal.MQCommonServices.<clinit>(MQCommonServices.java:265)
at com.ibm.mq.MQSESSION.getJmqiEnv(MQSESSION.java:134)
at com.ibm.mq.MQSimpleConnectionManager.<init>(MQSimpleConnectionManager.java:93)
at com.ibm.mq.MQEnvironment.<clinit>(MQEnvironment.java:574)
at mytestpackage.MyTestClass.(init)(MyTestClass.java:143)
Caused by: java.security.AccessControlException: access denied (java.util.logging.LoggingPermission control)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.util.logging.LogManager.checkAccess(LogManager.java:930)
at java.util.logging.Logger.checkAccess(Logger.java:255)
at java.util.logging.Logger.setLevel(Logger.java:1131)
at com.ibm.msg.client.commonservices.j2se.trace.DefaultTracer$8.run(DefaultTracer.java:1581)
at java.security.AccessController.doPrivileged(Native Method)
at com.ibm.msg.client.commonservices.j2se.trace.DefaultTracer.setTraceLevel(DefaultTracer.java:1578)
at com.ibm.msg.client.commonservices.trace.Trace.setTraceLevel(Trace.java:408)
at com.ibm.msg.client.commonservices.trace.Trace.initialize(Trace.java:2027)
at com.ibm.msg.client.commonservices.trace.Trace.<clinit>(Trace.java:323)
... 17 more
这可能是什么?
提前谢谢你。
【问题讨论】:
-
我们能看到一些代码吗? (就像你班的第 143 行)
-
不能,这是机密,我什至没有。对不起。
-
您是安装了完整的 MQ 客户端还是只是获取了 jar 文件?如果你调用 MQ 的代码是机密的,你能用一些示例代码重现问题并分享吗?
-
我确实安装了完整的 WMQ,并安装了最后一个修订包 (7.0.1.5),我附加了复制的代码作为主要问题的编辑。
-
我认为值得补充的是,由于类路径问题,我将所有 .jar 从安装良好的 WMQ 的 /lib 文件夹复制到 jre 的 /lib 文件夹。
标签: java multithreading thread-safety nullpointerexception ibm-mq