我测试设置一个可以使用 Oracle AQ JMS 实现的 Web 逻辑服务器,但由于某种原因,我的 WLS 连接池看不到我创建的队列,我可以看到在 Web 逻辑中查找队列的唯一方法是使Web 逻辑数据源连接池使用创建队列的数据库用户的凭据。
我以 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);
在 Web Logic 中设置 2 个 JDBC 数据源 我在 Web 逻辑中设置了 2 个连接到我的数据库的数据源,除了一个使用cpool用户而另一个使用admin_user之外,两者都是相同的
创建 JMS 模块 现在我使用 JDBC 数据源注册一个 jms 模块,并连接本地和外部 JDNI 名称。
如果我使用使用admin_user的 DataSource,一切正常,我部署的应用程序可以在 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 帐户用于我的数据源。