2013-04-11 5 views
12

Ho il seguente ...WebSphere: JNDI Context Lookup Failure

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

provato anche ...

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> 

poi nella mia ibm- web-bnd.xml ...

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

in WebSphere vedo il nome di legame di risorse> JDBC> Origini dati

Ma quando faccio funzionare la mia domanda Capisco ...

Causato da: javax.naming.NameNotFoundException: Contesto: Node04Cell/nodi/Nodo04/server/server1, nome: DB2_DB: primo componente nel nome DB2_DB non trovato. [Eccezione Root è org.omg.CosNaming.NamingContextPackage.NotFound: IDL: omg.org/CosNaming/NamingContext/NotFound: 1.0]^M

Si tratta di un progetto di porto da WAS6-8.5

+0

Immagino che questa sia l'eccezione per la ricerca di "DB2_DB". Qual è l'eccezione per la ricerca di "java: comp/env/DB2_DB"? –

+1

Sei venuto intorno a questo? Ho appena avuto un problema simile e per me è stato un semplice refuso. –

+0

Ho dimenticato cosa ho fatto (se l'ho fatto) per risolvere questo – Jackie

risposta

13

Bene, questa domanda è piuttosto vecchia, e vedo che non c'è ancora una risposta accettata, quindi.

Ecco ciò che realmente accade:

  1. Il codice esegue una ricerca JNDI per java:comp/env/DB2_DB.
  2. WebSphere utilizza il descrittore di distribuzione proprietario WAS (ibm-web-bnd.xml) per "tradurre" l'associazione dell'applicazione DB2_DB in un nome reale nell'albero JNDI di WebSphere (jdbc/DB2DB).
  3. WebSphere cerca jdbc/DB2DB e lo restituisce al chiamante.

Hai trovato un NameNotFoundException al primo ricerca - la ricerca di java:comp/env/DB2_DB. Il problema non è trovare jdbc/DB2DB; è nel trovare DB2_DB all'interno dell'ambiente del tuo componente.

tuo descrittore di deployment sembra OK per me, quindi sto cercando di indovinare che il motivo per il vostro problema è questo:

Context aContext = new InitialContext(settings); 

si sta costruendo un caso InitialContext fornendo un Hashtable. Il Hashtable è spesso utile quando è necessario fornire parametri speciali per la costruzione, ma è necessario sapere quando utilizzarlo e quando evitarlo. Codice che viene eseguito all'interno di un contenitore JavaEE e richiede un accesso semplice all'albero JNDI del contenitore raramente, se necessario, deve fornire qualsiasi Hashtable al costruttore InitialContext.

io non sarei sorpreso se quelli settings che si sta passando in InitialContext contengono, ad esempio, una chiave PROVIDER_URL istruire la ricerca avvenga su qualche albero JNDI straniera lontana.

Quindi, vorrei iniziare la demolizione quel parametro:

Context aContext = new InitialContext(); 

E poi dare un altro colpo.

Se il problema persiste, utilizzare l'utilità dumpNamespace di WebSphere per ottenere un'immagine chiara dell'albero JNDI di WebSphere.

0

I Non sono sicuro di cosa stia facendo ibm-web-bnd.xml, tuttavia potresti provare due cose.

Per prima cosa puoi provare a fare una ricerca globale. Prova:

aContext.lookup("jdbc/DB2DB"); 

presumo l'origine dati è denominato "jdbc/DB2DB" withing la configurazione origine dati.

Altrimenti si dovrebbe verificare se il datasource is mapped nell'applicazione. Suppongo che ibm-web-bnd.xml debba essere configurato correttamente durante la mappatura.

+0

ibm-web-bnd.xml è un mapping da un nome di risorsa locale a un riferimento JNDI all'interno del contenitore. – Jackie