web-dev-qa-db-fra.com

WebSphere: échec de la recherche de contexte JNDI

J'ai le suivant ...

Context aContext = = new InitialContext(settings);
aContext.lookup("Java:comp/env/DB2_DB");

Aussi essayé ...

aContext.lookup("DB2_DB");

web.xml

<resource-ref>
    <description>
    </description>
    <res-ref-name>DB2_DB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Application</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
    <mapped-name>DB2_DB</mapped-name>
</resource-ref>

puis dans mon ibm-web-bnd.xml ...

<resource-ref name="DB2_DB" binding-name="jdbc/DB2DB" />

Dans Websphere, le nom de la liaison apparaît dans les ressources> JDBC> Sources de données.

Mais quand je lance mon application, je vois ...

Causée par: javax.naming.NameNotFoundException: Contexte: Node04Cell/nodes/Node04/servers/server1, name: DB2_DB: Premier composant du nom DB2_DB introuvable. [L'exception racine est org.omg.CosNaming.NamingContextPackage.NotFound: IDL: omg.org/CosNaming/NamingContext/NotFound: 1.0] ^ M

Ceci est un projet portuaire de WAS6-8.5

13
Jackie

Eh bien, cette question est assez ancienne et je vois qu’il n’ya pas encore de réponse acceptée, donc.

Voici ce qui se passe réellement:

  1. Votre code exécute une recherche JNDI sur Java:comp/env/DB2_DB.
  2. WebSphere utilise le descripteur de déploiement WAS (ibm-web-bnd.xml) pour "traduire" la liaison d'application DB2_DB en un nom réel dans l'arborescence JNDI de WebSphere (jdbc/DB2DB).
  3. WebSphere recherche jdbc/DB2DB et le renvoie à l'appelant.

Vous obtenez une NameNotFoundException sur la première recherche - la recherche de Java:comp/env/DB2_DB. Le problème n'est pas de trouver jdbc/DB2DB; c'est en trouvant DB2_DB dans l'environnement de votre composant.

Votre descripteur de déploiement me semble correct, alors je suppose que la raison de votre problème est la suivante:

Context aContext = new InitialContext(settings);

Vous construisez une instance InitialContext en fournissant une Hashtable. La Hashtable est souvent utile lorsque vous devez fournir des paramètres spéciaux pour la construction, mais vous devez savoir quand l'utiliser et quand l'éviter . Le code qui s'exécute dans un conteneur JavaEE et nécessite un accès simple à l'arborescence JNDI du conteneur rarement , si jamais devrait fournir une variable Hashtable au constructeur InitialContext.

Je ne serais pas surpris si ces settings que vous passez dans InitialContext contiennent, par exemple, une clé PROVIDER_URL indiquant que la recherche doit avoir lieu dans une arborescence JNDI étrangère distante.

Donc, je commencerais par supprimer ce paramètre:

Context aContext = new InitialContext();

Et puis donnez-lui un autre coup.

Si le problème persiste, utilisez l'utilitaire dumpNamespace de WebSphere pour obtenir une image claire de l'arborescence JNDI de WebSphere.

14
Isaac

Videz l'espace de noms et recherchez le jndi sous la cible que vous souhaitez rechercher. S'il n'est pas trouvé, mettez à jour l'URL corbaloc à celle indiquée dans la cible. Parce que la recherche fonctionnait dans mon local mais pas dans un environnement en cluster. J'ai vidé l'espace de noms et identifié l'URL corbaloc. Puis utilisé cette URL corbaloc dans l'environnement SIT. 

Exemple: JMS_Host était corbaloc :: localhost: 2809/NameServiceServerRoot dans un environnement local mais dans un cluster, il était JMS_Host = corbaloc :: ABC-DEF-XYZ: 9810/NameServiceServerRoot

Cela a résolu mon problème.

0
Kuppusamy

Je ne suis pas sûr de ce que fait ibm-web-bnd.xml, mais vous pouvez essayer deux choses.

Tout d'abord, vous pouvez essayer de faire une recherche globale. Essayer:

aContext.lookup("jdbc/DB2DB");

Je suppose que la source de données s'appelle "jdbc/DB2DB" avec la configuration de la source de données.

Sinon, vous devriez vérifier si la source de données est mappée dans votre application. Je suppose que ibm-web-bnd.xml devrait, lorsqu’il est correctement configuré, effectuer ce mappage.

0
Udo Held