2015-03-09 2 views
0

У меня есть задание MQFTE, которое перемещает файл от одного агента к другому агенту. После того, как файл был перемещен, файл делится на отдельные сообщения агентом MQFTE.Получение дескриптора формы QueueManager MQFTE

После того, как раскол выполнен, сообщения должны быть перемещены из одной очереди в другую очередь путем выхода пользователя. Выход пользователя реализуется путем реализации интерфейса DestinationTransferEndExit.

Проблема в том, что я не могу получить дескриптор QueueManager в режиме привязки. Если я выполняю код за пределами JVM агента, он работает без каких-либо проблем.

я получаю следующее сообщение об ошибке:

[01/03/2015 13:46:31:107 SAST] 0000001d StdErr  E com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2495'. 

. 

. 

. 

[01/03/2015 13:46:31:115 SAST] 0000001d StdErr  E Caused by: com.ibm.mq.jmqi.local.LocalMQ$3: CC=2;RC=2495;AMQ8598: Failed to load the WebSphere MQ native JNI library: 'mqjbnd'. 

. 

. 

. 

[01/03/2015 13:46:31:117 SAST] 0000001d StdErr  E Caused by: java.lang.UnsatisfiedLinkError: mqjbnd (Library is already loaded in another ClassLoader) 

Код, который я исполняю выглядит следующим образом:

MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, 
      MQC.TRANSPORT_MQSERIES_BINDINGS); 
    MQQueueManager sourceMgr = new MQQueueManager(aQManagerName); 
    int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT ; 
    MQQueue source_queue = sourceMgr.accessQueue(aSourceQName, openOptions); 

ответ

0

Проблема здесь в том, что «mqjbnd» родная библиотека из вашей установки WebSphere MQ имеет уже загружен Java ClassLoader, связанный с агентом WebSphere MQ MFT. Библиотека mqjbnd содержит собственный код JNI, который позволяет агенту подключаться к диспетчеру очереди с использованием транспортного режима BINDINGS (разделяемая память).

Ваш код DestinationTransferEndExit загружается на отдельный Java ClassLoader. Виртуальная машина Java (JVM) позволяет только одному ClassLoader загружать определенную собственную библиотеку. Поэтому, когда ваши коды выхода пытаются загрузить библиотеку mqjbnd (которая уже была загружена), JVM создает java.lang.UnsatisfiedLinkError.

Вы можете избежать этой проблемы, не пытаясь загрузить собственную библиотеку mqjbnd в код выхода и использовать режим транспорта CLIENT, чтобы вместо этого подключиться к менеджеру очереди.

 Смежные вопросы

  • Нет связанных вопросов^_^