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
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:
Java:comp/env/DB2_DB
.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
).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.
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.
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.