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