Oracle AQ JMS 実装を使用できる Web ロジック サーバーの設定をテストしていますが、何らかの理由で、WLS 接続プールが作成したキューを認識できません。 Web ロジック データソース接続プールは、キューを作成した DB ユーザーの資格情報を使用します。
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 DataSource を設定する データベースに接続する Web Logic で 2 つのデータソースを設定します。一方はcpoolユーザーを使用し、もう一方はadmin_userを使用することを除いて、どちらも同じです。
JMS モジュールの作成 次に、jms モジュールを JDBC データソースに登録し、ローカルおよび外部 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
データソースに admin_user アカウントを使用しない限り、WL がキューの JNDI 名を解決できない理由を知っている人はいますか?