Oracle AQキューでWeb Logic JMSモジュールの構成
-
28-10-2019 - |
質問
Oracle AQ JMS実装を使用できるWebロジックサーバーの設定をテストしますが、何らかの理由でWLS接続プールが作成したキューを表示できません。 Web Logic DataSource接続プールキューを作成した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ロジックで2つのJDBCデータソースを設定しますデータベースに接続するWebロジックで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
dataSourceにadmin_userアカウントを使用しない限り、WLがキューのJNDI名を解決できない理由を誰もが知っていますか?
解決
答えは、私の接続プールのユーザーがいくつかの助成金を欠いていたということでした。
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ロジックでは、外国のJNDIの完全な名前で目的地を必ず参照してください。
Queues/<SCHEMA OWNER>.<DESTINATION_NAME>