Нет подсказки с исключением (NullPointerException) из-за извлечения свойств, выданного IBM MQ - PullRequest
0 голосов
/ 03 августа 2011

Я получаю это исключение от 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) как часть библиотеки, используемой многоядерной средой (использующей JVM 1.4.2).

Воспроизведенный код

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 - это Солнце 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

Что бы это могло быть?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 04 августа 2011

Что вы подразумеваете под "1.1.0 MS JVM"?Из трассировки стека видно, что вы используете MQ-клиент v7 - требования к 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, поскольку неподдерживаемая JVM неожиданно возвращаетnull, когда Java-клиент WMQ запрашивает системное свойство.

0 голосов
/ 03 августа 2011

Скорее всего, это происходит, когда вы пытаетесь получить доступ к структуре данных [которая не синхронизирована внутри] с несколькими потоками без блокировки.

Один из объектов, к которым вы обращаетесь в трассировке стека, не является многопоточным, и вам нужна блокировка.

Одним из примеров является HashMap [в отличие от hashtable] - попробуйте использовать его с несколькими потокамибез замка снаружи.

...