Pregunta

Pruebo la configuración de un servidor de lógica web que puede usar una implementación de Oracle AQ JMS, pero por alguna razón mi grupo de conexión WLS no puede ver la cola que he creado, la única forma en que puedo ver el Find the Queue en Web Logic es hacer que el Grupo de conexión de datos de datos de lógica web Utilice las credenciales del usuario de DB que creó la cola.

He hecho lo siguiente como Admin_user:

Creó una tabla de cola

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

Creó una cola

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

Comenzó la cola

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

Concedido los permisos de los usuarios de 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);

Configurar 2 platos de datos JDBC en Web LogicConfiguré 2 fuente de datos en Web Logic que se conectan a mi base de datos, ambos son idénticos, excepto que uno usa el copa usuarios y otros usos administrador

Crear módulos JMSAhora registro un módulo JMS con los datos de datos JDBC y reduzco los nombres JDNI locales y extranjeros.

Si uso la fuente de datos que usa administrador Todo funciona bien y mi aplicación implementada puede encontrar la cola en JNDI.

ProblemaSi uso la fuente de datos que usa copa Luego falla, encuentra el grupo de conexión en JNDI pero nunca en la cola (a pesar del hecho de que funcionó para Admin_user). Recibo el siguiente error 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

¿Alguien sabe por qué WL no puede resolver el nombre JNDI para la cola a menos que use la cuenta admin_user para mi fuente de datos?

¿Fue útil?

Solución

La respuesta fue que me faltaban algunas subvenciones a mi grupo de conexión, lo siguiente donde se requirió:

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

Asegúrese de que el usuario que crea el destino otorga acceso al usuario del grupo de conexión:

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

Finalmente, en la lógica web, asegúrese de hacer referencia al destino por su nombre JNDI extranjero completo:

Queues/<SCHEMA OWNER>.<DESTINATION_NAME>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top