Хранимая процедура Java с использованием MQ

Мне нужно создать хранимую процедуру Java в Oracle. Я использовал образец класса IBM для создания сообщения MQ из простого класса вне среды Java EE. Я протестировал класс сам по себе, и он работает.

Моя версия Oracle 11i.

Когда я пытаюсь добавить jar-файлы, используемые в простом приложении, для загрузки в Oralce вместе с моим простым классом, я получаю сообщение об ошибке, что класс не найден, даже если те же самые jar-файлы работают с тестовым примером. Я застрял с этим больше недели и отчаянно надеюсь, что кто-то сможет мне помочь с этим.

Типы ошибок, которые я получаю, похожи на этот от флага -v с утилитой loadjava на клиенте

в строке 326/327 вы видите это:

создание: класс com/ibm/mq/jms/admin/AP загрузка: класс com/ibm/mq/jms/admin/AP

а затем в конце, начиная со строки 6224 и до конца, это указывает на то, что указанный выше класс не может быть разрешен:

com/ibm/mq/jms/admin/APRCXI: ORA-29534: указанный объект xxxx.com/ibm/mq/jms/admin/AP не может быть разрешен com/ibm/mq/jms/admin/APSDX: ORA-29534 : ссылочный объект xxxx.com/ibm/mq/jms/admin/AP не может быть разрешен при выходе : ошибки при разрешении класса com/ibm/mq/jms/admin/AP

команда, которую я использовал:

c:\Oracle\product\11.2.0\client_1\bin\loadjava.bat -f -jarsasdbobjects -prependjarnames -stoponerror -u xxxx/yyyy@SID -v -resolve lib\jms.jar lib\com.ibm.mqjms. jar lib\com.ibm.mq.jmqi.jar lib\dhbcore.jar lib\fscontext.jar src\com\test\javasp\mq\JmsProducer.java

Я также пробовал с опцией -genmissing с некоторыми дополнительными банками (список, который я нашел здесь ), но по-прежнему получают аналогичную ошибку для другого класса.

Другая проблема, с которой я сталкиваюсь, заключается в том, что если я получаю сообщение об ошибке и пытаюсь использовать команду dropjava из Oracle, она тоже не работает.

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

Если я могу предоставить любую другую информацию, пожалуйста, дайте мне знать.

Если у кого-нибудь есть идеи о том, как заставить хранимую процедуру Java использовать IBM MQ, работающую с Oracle 11i, я был бы очень признателен за помощь.


person adbdkb    schedule 03.07.2012    source источник
comment
Классы IBM WMQ несколько раз переупаковывались. Какую версию клиента WMQ вы используете?   -  person T.Rob    schedule 04.07.2012
comment
Если вы устанавливаете полный клиент WMQ, у вас есть dspmqver, трассировка и JMSAdmin (для создания и редактирования администрируемых объектов), а также возможность применять техническое обслуживание и исправления. См. stackoverflow.com/questions/10957612/ для мест загрузки. Классы WMQ, связанные с другими приложениями, не обязательно имеют полную функциональность или что-то, к чему вы можете применить обслуживание. Если вы не хотите устанавливать полный клиент, я не могу помочь, но, возможно, кто-то еще может.   -  person T.Rob    schedule 04.07.2012
comment
Я не много занимался разработкой MQ (это первая разработка, в которой также используется образец), поэтому, если мой вопрос звучит немного странно, пожалуйста, простите меня. Мне дали обмен проектами для этого проекта, который включал банки, но я думаю (мне сказали), что они для MQ 7. Итак, я предполагаю, что это сделает его клиентской версией 7.0. Есть ли способ подтвердить это?   -  person adbdkb    schedule 04.07.2012
comment
Извините, я редактировал комментарий, когда вы ответили на мой предыдущий комментарий. Пара вопросов для вашего второго комментария. Нужно ли мне получать все jar-файлы от этого клиента или только те, которые заставляют мою текущую программу работать как java-приложение. Кроме того, имеет ли значение, какую минорную версию из банок WMQ 7 я загружаю. Если да, то как мне узнать из моего приложения, какой из них мне нужно использовать для нашей установки MQ? Большое вам спасибо за вашу помощь   -  person adbdkb    schedule 04.07.2012
comment
Поддерживаемый IBM метод состоит в том, чтобы запустить программу установки, а затем указать ПУТЬ К КЛАССУ в каталоге, в котором были установлены клиентские JAR-файлы. Если вы получаете v7.1 или v7.5, у вас есть возможность установить в любом месте на хосте (хотя для выполнения установки вам все равно нужно быть пользователем root или администратором). Я бы пошел с v7.5. Он может подключаться к любой версии WMQ и содержит исправления известных ошибок, а также обеспечивает наилучшую производительность. См. ссылку Infocenter в предыдущем комментарии для получения инструкций по установке и проверке. Простой способ получить правильный CLASSPATH — запустить команду setjmsenv, а затем echo CLASSPATH.   -  person T.Rob    schedule 04.07.2012
comment
Проблема в том, что при загрузке классов в Oracle в виде jar-файлов или иным образом вы не можете указать путь к классам. Вам нужно перечислить все банки, которые необходимо загрузить. Я могу успешно запустить код как отдельный класс. Но теперь мне нужно превратить это в хранимую процедуру Java в Oracle, и именно здесь я сталкиваюсь с проблемами, которые я упоминал в своем первоначальном посте.   -  person adbdkb    schedule 04.07.2012
comment
В этом случае вам по-прежнему лучше использовать более поздние версии, потому что количество загружаемых банок значительно уменьшается. К сожалению, я не могу помочь со стороны Oracle, и не похоже, что кто-то еще вмешивается.   -  person T.Rob    schedule 04.07.2012
comment
Спасибо вам за помощь. Я скачал последние банки. Я надеюсь, что кто-то откликнется на загрузку в Oracle.   -  person adbdkb    schedule 04.07.2012


Ответы (2)


Подробный ответ найден в этом блоге. Вход. Я попробовал это, и это сработало для меня.

person adbdkb    schedule 15.06.2013
comment
Я следовал инструкциям в блоге, к сожалению, я все еще нахожусь в том месте, где получаю исключение либо с ошибкой java.lang.ExceptionInInitializerError, либо с ошибкой classnotfound. Вы делали что-то помимо того, что описано в блоге? Спасибо! - person Paul Fennema; 08.11.2017

В Oracle нет концепции CLASSPATH, поэтому стандартная установка клиента MQ бесполезна. Вы можете загрузить ссылку на jar только вашим приложением в схеме базы данных. Классы разрешаются при загрузке с опцией -r. В дальнейшем вы можете указать свое разрешение с помощью -r -Resolver (схем). (проверьте документы Oracle для точного формата). Таким образом, схемы базы данных становятся путем к классам.

Использование классов Websphere MQ для Java создает ряд проблем. Вы должны убедиться, что версия Oracle JDK имеет соответствующий уровень поддержки для подключения к выбранной версии сервера MQ. Проверьте системные требования для websphere MQ Vx.x. Вы должны найти веб-ссылки IBM. проверьте поддержку MQ, классифицированного для java.

У меня есть такая проблема в данный момент, когда я пытаюсь подключиться к Mq, используя Oracle 10 и JDK 1.4.2. Мне пришлось перекомпилировать мой Java-код, используя JDK 1.4.x. Это не работает, и я предполагаю, что это связано с тем, что я подключаюсь к MQ 7.0.1.7, для которого как минимум требуется JRE 1.7.

person JakesIV    schedule 24.02.2014