[英]No clue with an exception (NullPointerException) due to a properties retrieval thrown by the IBM MQ
我正在苦苦掙扎的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)用作多核環境所使用的庫的一部分時遇到了麻煩(使用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
這可能是什么?
先感謝您。
當您嘗試使用不帶鎖的多個線程訪問數據結構(內部不同步)時,很可能會發生這種情況。
您在堆棧跟蹤中訪問的對象之一不是多線程的,您需要一個鎖。
一個例子是HashMap [與hashtable相對]-嘗試將其與多個線程一起使用而沒有外部鎖。
“ 1.1.0 MS JVM”是什么意思? 從堆棧跟蹤中可以看到您正在使用v7 MQ客戶端-此處列出了JVM要求
http://www-01.ibm.com/support/docview.wss?rs=171&uid=swg27011920
假設您是32位用戶,則支持的選項是
Java 2 Platform, Standard Edition (J2SE) V1.4.2 from Sun Microsystems, Inc.
Java 2 Platform, Standard Edition V5.0 (SR1 or above) from Sun Microsystems, Inc.
Java 2 Platform, Standard Edition V6.0 from Sun Microsystems, Inc.
IBM 32-bit SDK for Windows, Java 2 Technology Edition, V1.4.2
IBM 32-bit SDK for Windows, Java 2 Technology Edition, V5.0 (SR1 or above)
IBM 32-bit SDK for Windows, Java Technology Edition, V6.0
因此,我懷疑代碼會引發NullPointerException,因為當WMQ Java客戶端查詢系統屬性時,不受支持的JVM意外返回null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.