2008-09-23 14 views
5

Quando provo il seguente ricerca nel mio codice:Aiuto configurazione JNDI con JBoss Embedded in Tomcat 5.5.x

Context initCtx = new InitialContext(); 
Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
return (DataSource) envCtx.lookup("jdbc/mydb"); 

ottengo la seguente eccezione:

java.sql.SQLException: QueryResults: Unable to initialize naming context: 
    Name java:comp is not bound in this Context at 
    com.onsitemanager.database.ThreadLocalConnection.getConnection 
    (ThreadLocalConnection.java:130) at  
    ... 

ho installato JBoss Embedded in seguito alla JBoss wiki instructions. E ho configurato Tomcat utilizzando la "Scansione di ogni guerra di default" distribuzione come specificato nel configuration wiki page.

Citando la pagina di configurazione:

JNDI

componenti JBoss Embedded come il pool di connessioni, EJB, JPA, e le transazioni fare ampio uso di JNDI per pubblicare servizi. JBoss Embedded ha la precedenza implementazione JNDI di Tomcat da sola stratificazione in cima alla esemplificazione JNDI di Tomcat. Ci sono un paio di> ragioni per questo:

  1. per evitare di dover dichiarare tutti e ciascuno di questi servizi all'interno server.xml
  2. Per consentire l'integrazione seemeless del java: comp namespace tra le applicazioni web e EJB .
  3. implementazione JNDI Tomcat ha qualche bug critici in esso che ostacolano alcuni JBoss componenti capacità di lavorare
  4. Vogliamo fornire la possibilità per voi di servizi remoti EJB e di altri servizi che possono> essere guardato a distanza fino

Chiunque ha qualche idea su come posso configurare il servizio di denominazione JBoss che, in base alla citazione precedente, sta ignorando l'implementazione JNDI di Tomcat in modo che possa eseguire una ricerca su java: comp/env?

CRONACA - Il mio ambiente Tomcat 5.5.9, 2.0.2sp Seam, embedded JBoss (Beta 3),

Nota: ho un file di -ds.xml per la mia connessione al database corretto setup e accessibile sul percorso di classe per le istruzioni.

Si noti inoltre: Ho postato questa domanda nel JBoss Embedded forum e forum per gli utenti cucitura.

risposta

2

Grazie per il toolkit di risposta .... sì, posso accedere all'origine dati passando direttamente a java: jdbc/mydb, ma sto utilizzando un codice esistente che si connette tramite ENC. Ecco alcune informazioni interessanti che ho trovato fuori ....

  1. Il codice precedente funziona con JBoss 4.2.2.GA ed ecco i parametri ctx JNDI utilizzati:
    java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs = org.jboss.naming: org.jnp.interfaces : org.jboss.naming: org.jnp.interfaces

  2. Il codice precedente funziona con Tomcat 5.5.x ed ecco i parametri JNDI CTX utilizzati:
    java.naming.factory.initial = org. apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs = org.apache.naming

  3. Il codice sopra riportato non riesce con JBoss incorporato (Beta 3) in Tomcat 5.5.x con il messaggio di errore sopra riportato.
    java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs = org.apache.namingIl codice precedente non riesce con l'errore sopra riportato utilizzando JBoss Embedded in tomcat 5.5.x

Chiunque ha qualche idea che cosa devo fare con la configurazione della configurazione JBDI JBoss integrata?

+0

Hai trovato una soluzione? Ho anche questo problema. L'applicazione funziona bene con il tomcat nativo, le origini dati funzionano come previsto, ma quando JBoss è incorporato ottengo un errore "Nome java: comp non è legato in questo contesto". –

1

java: comp/env è noto come Enterprise contesto dei nomi (ENC) e non è globalmente visibile. Vedere here per ulteriori informazioni. Sarà necessario individuare il nome JNDI globale a cui è indirizzata l'origine dati.

Il modo più semplice per farlo è passare alla console JMX basata su Web di JBoss e cercare un 'JNDIView' (non esattamente sicuro del nome - attualmente a casa) mbean. Questo mbean dovrebbe avere un metodo di lista che è possibile richiamare, che consente di visualizzare il percorso di contesto per tutti gli oggetti JNDI-bound.

1

ho avuto qualche problema simile con JBoss Embedded e alla fine ho fix giocare nel file: test-Datasource-ds.xml

aggiungendo

<mbean code="org.jboss.naming.NamingAlias" name="jboss.jmx:alias=testDatasource"> 
    <attribute name="FromName">jdbc/Example DataSource</attribute> 
    <attribute name="ToName">java:/testDatasource</attribute> 
</mbean> 

Il problema è stato JBoss aggiungere il java prefisso:/per tutte le origini dati dichiarate. Così alla fine ho avuto un origine dati di nome testDatasource, overrided con tale direttiva per JDBC/Esempio DataSource

spero che funziona