Настройка модуля Web Logic JMS с очередями Oracle AQ

Я тестирую настройку сервера веб-логики, который может использовать реализацию JMS Oracle AQ, но по какой-то причине мой пул соединений 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.

Если я использую DataSource, который использует 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 для своего источника данных.


person Craig Warren    schedule 20.02.2012    source источник


Ответы (1)


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

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>
person Craig Warren    schedule 28.02.2012