Domanda

Ho provato a impostare un server Web logic che può utilizzare un'implementazione Oracle AQ JMS, ma per qualche motivo il mio pool di connessioni WLS non può vedere la coda che ho creato, l'unico modo in cui posso vedere la coda nella logica web è quello di creare il pool di connessioni dati di dati logici Web Utilizzare le credenziali dell'utente DB che ha creato la coda.

Ho fatto quanto segue come admin_user:

Creato una tabella coda

EXECUTE DBMS_AQADM.CREATE_QUEUE_TABLE(queue_table=>'testqueue_table',queue_payload_type=>'sys.aq$_jms_text_message');

Ha creato una coda

EXECUTE dbms_aqadm.create_queue(queue_name=>'testqueue', queue_table=>'testqueue_table');

Ha iniziato la coda

EXECUTE dbms_aqadm.start_queue(queue_name=>'testqueue');

Concesse le autorizzazioni utente 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);

Imposta 2 dati JDBC nella logica webHo impostato 2 dati di dati nella logica Web che si connettono al mio database, entrambi sono identici tranne per il fatto che si utilizza il cpool l'utente e gli altri usi admin_user

Crea moduli JMSOra registro un modulo JMS con i dati di dati JDBC e collego i nomi JDNI locali e stranieri.

Se utilizzo la dataSource che utilizza admin_user Tutto funziona bene e la mia applicazione distribuita può trovare la coda in JNDI.

ProblemaSe utilizzo l'origine dati che utilizza cpool Quindi fallisce trova il pool di connessioni in JNDI ma mai la coda (nonostante il fatto che abbia funzionato per admin_user). Ricevo il seguente errore da 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

Qualcuno sa perché WL non può risolvere il nome JNDI per la coda a meno che non utilizzo l'account admin_user per il mio dati dati.

È stato utile?

Soluzione

La risposta è stata che al mio utente del pool di connessioni mancava alcune sovvenzioni, quanto segue:

GRANT EXECUTE on DBMS_AQ to <CPOOL>;
GRANT EXECUTE on DBMS_AQADM to <CPOOL>;
GRANT aq_user_role to <CPOOL>;

Assicurati che l'utente che crea l'accesso alle sovvenzioni di destinazione all'utente del pool di connessioni:

`EXECUTE DBMS_AQADM.grant_queue_privilege(privilege=>'ALL', queue_name=>'<SCHEMAOWNER>.docprod_queue', grantee=>'<CPOOL>',grant_option=>FALSE);`

Infine, in Web Logic assicurarsi di fare riferimento alla destinazione con il loro nome JNDI straniero completo:

Queues/<SCHEMA OWNER>.<DESTINATION_NAME>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top