2017-06-02 3 views
0

En ce moment, je travaille sur une application qui doit utiliser une fabrique de connexions. Lorsque je recherche la fabrique de connexions directement au niveau global par le nom défini dans WAS, tout fonctionne correctement, mais pour les moyens de découplage, je souhaite définir une référence de ressource dans mon application et rechercher ce nom. Donc, j'ai créé l'entrée suivante dans mon application.xml:Impossible de rechercher la ressource au niveau du composant dans Websphere

<resource-ref> 
    <res-ref-name>jms/connectionFactory</res-ref-name> 
    <res-type>javax.jms.ConnectionFactory</res-type> 
    <res-auth>Container</res-auth> 
    <res-sharing-scope>Shareable</res-sharing-scope> 
</resource-ref> 

Ce que je fais alors dans mon EJB est de faire recherche suivante:

ConnectionFactory connectionFactory = 
(ConnectionFactory) ic.lookup("java:comp/env/jms/connectionFactory"); 

Cela conduit à cette exception:

javax.naming.NameNotFoundException: Name comp/env/jms not found in context "java:". 

Je l'ai également essayé avec:

ConnectionFactory connectionFactory = 
(ConnectionFactory) ic.lookup("java:app/jms/connectionFactory"); 

menant à:

javax.naming.NameNotFoundException: Context: BPMDev/applications/com.ibm.ws.AppNameSpaces/MAN_POT/root, 
name: jms/connectionFactory: First component in name jms/connectionFactory not found. 

Est-ce que quelqu'un sait ce que je fais mal ici? Merci d'avance!

Répondre

0

D'autres investigations m'a amené à: Lookup jndi resources WebSphere 8.5, Spring 3.1.3, Hibernate 4.1.10 EJB 3

Il la réponse est contenue:

Les deux l'entrée dans le application.xml et la recherche doivent être avec java précédée: app/env. Pour mon cas, c'est:

<resource-ref> 
    <res-ref-name>java:app/env/jms/connectionFactory</res-ref-name> 
    <res-type>javax.jms.ConnectionFactory</res-type> 
    <res-auth>Container</res-auth> 
    <res-sharing-scope>Shareable</res-sharing-scope> 
</resource-ref> 

et:

ConnectionFactory connectionFactory = 
(ConnectionFactory) ic.lookup("java:app/env/jms/connectionFactory"); 
0

java: références de ressources comp sont scope au composant, de sorte que la référence des ressources doit être définie pour le même composant à partir duquel vous essayez pour le chercher. Notez que java: app est étendu à l'ensemble de l'application, donc si vous passez à java: app et que cela fonctionne, il est probable que java: comp ne fonctionne pas car la référence de ressource a été définie pour le mauvais composant.