Configuration de JMS Logic Module Web avec Oracle Files d'attente AQ
-
28-10-2019 - |
Question
Je tester la mise en place d'un serveur logique Web qui peut utiliser une implémentation JMS Oracle AQ, mais pour une raison quelconque mon pool de connexion WLS ne vois pas la file d'attente que j'ai créé, la seule façon que je peux voir la trouver la file d'attente dans la logique web est pour rendre la logique web piscine datasource utiliser les informations d'identification de l'utilisateur DB qui a créé la file d'attente.
J'ai fait ce qui suit comme admin_user:
Création d'une table de file d'attente
EXECUTE DBMS_AQADM.CREATE_QUEUE_TABLE(queue_table=>'testqueue_table',queue_payload_type=>'sys.aq$_jms_text_message');
Création d'une file d'attente
EXECUTE dbms_aqadm.create_queue(queue_name=>'testqueue', queue_table=>'testqueue_table');
Démarrage la file d'attente
EXECUTE dbms_aqadm.start_queue(queue_name=>'testqueue');
Accordé les autorisations utilisateur 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);
Configurer 2 sources de données JDBC dans Logic Web Configurer 2 sources de données dans la logique de bande qui se connectent à ma base de données, les deux sont identiques, sauf que l'on utilise le Cpool utilisateur et les autres utilisations admin_user
Créer JMS Modules Maintenant, j'enregistrer un jms module avec les sources de données JDBC et câbler les noms JDNI locaux et étrangers.
Si j'utilise DataSource qui utilise admin_user tout fonctionne bien et mon application déployée peut trouver dans la file d'attente JNDI.
Problème Si j'utilise la source de données qui utilise Cpool il ne trouve la piscine de connexion JNDI mais jamais la file d'attente (en dépit du fait qu'il a travaillé pour admin_user). Je reçois l'erreur suivante de 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
Quelqu'un sait-il pourquoi WL ne peut pas résoudre le nom JNDI pour la file d'attente à moins d'utiliser le compte admin_user pour ma source de données.
La solution
La réponse a été que mon baigneur de connexion il manquait certaines subventions, les éléments suivants si nécessaire:
GRANT EXECUTE on DBMS_AQ to <CPOOL>;
GRANT EXECUTE on DBMS_AQADM to <CPOOL>;
GRANT aq_user_role to <CPOOL>;
Assurez-vous que l'utilisateur qui crée le destinataire accorde l'accès à l'utilisateur de pool de connexion:
`EXECUTE DBMS_AQADM.grant_queue_privilege(privilege=>'ALL', queue_name=>'<SCHEMAOWNER>.docprod_queue', grantee=>'<CPOOL>',grant_option=>FALSE);`
Enfin dans Logic Web assurez-vous de faire référence à la destination par leur nom complet JNDI étranger:
Queues/<SCHEMA OWNER>.<DESTINATION_NAME>