1

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 名を解決できない理由を知っている人はいますか?

4

1 に答える 1

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>
于 2012-02-28T14:48:12.773 に答える