Настройка модуля JMS Web Logic с очередями Oracle AQ - PullRequest
1 голос
/ 20 февраля 2012

Я тестирую настройку сервера веб-логики, который может использовать реализацию Oracle AQ JMS, но по какой-то причине мой пул соединений WLS не может видеть созданную мною очередь, единственный способ увидеть, как найти очередь в веб-логике, - это для создания пула соединений с источником данных веб-логики используйте учетные данные пользователя БД, создавшего очередь.

В качестве admin_user я сделал следующее:

Создана таблица очередей

EXECUTE DBMS_AQADM.CREATE_QUEUE_TABLE(queue_table=>'testqueue_table',queue_payload_type=>'sys.aq$_jms_text_message');

Создана очередь

EXECUTE dbms_aqadm.create_queue(queue_name=>'testqueue', queue_table=>'testqueue_table');

Запущена очередь

EXECUTE dbms_aqadm.start_queue(queue_name=>'testqueue');

Предоставлены разрешения пользователя CPOOL

GRANT aq_user_role TO cpool;
EXECUTE DBMS_AQADM.grant_queue_privilege(privilege=>'ALL', queue_name=>'adming_user.testqueue', grantee=>'cpool',grant_option=>FALSE);

Настройка 2 источников данных JDBC в веб-логике Я настроил 2 источника данных в веб-логике, которые подключаются к моей базе данных, оба идентичны, за исключением того, что один использует пользователя cpool , а другой использует admin_user

Создание модулей JMS Теперь я регистрирую модуль jms в источниках данных JDBC и подключаю локальные и внешние имена JDNI.

Если я использую источник данных, который использует admin_user , все работает нормально, и мое развернутое приложение может найти очередь в JNDI.

Задача Если я использую источник данных, который использует cpool , он не сможет найти пул соединений в JNDI, но никогда не будет Очередь (несмотря на то, что он работал для admin_user). Я получаю следующую ошибку от WL:

Related cause:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testqueue': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Cannot resolve name:Queues/TESTQUEUE

Кто-нибудь знает, почему WL не может разрешить имя JNDI для очереди, если я не использую учетную запись admin_user для своего источника данных.

1 Ответ

1 голос
/ 28 февраля 2012

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

GRANT EXECUTE on DBMS_AQ to <CPOOL>;
GRANT EXECUTE on DBMS_AQADM to <CPOOL>;
GRANT aq_user_role to <CPOOL>;

Убедитесь, что пользователь, который создает назначение, предоставляет доступ пользователю пула соединений:

`EXECUTE DBMS_AQADM.grant_queue_privilege(privilege=>'ALL', queue_name=>'<SCHEMAOWNER>.docprod_queue', grantee=>'<CPOOL>',grant_option=>FALSE);`

Наконец, в Web Logic не забудьте указать место назначения по его полному внешнему имени JNDI:

Queues/<SCHEMA OWNER>.<DESTINATION_NAME>
...