5 Stimmen

Hilfe bei der Konfiguration von JNDI mit eingebettetem JBoss in Tomcat 5.5.x

Wenn ich den folgenden Lookup in meinem Code versuche:

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

Ich erhalte die folgende Ausnahme:

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     
    ...

Ich habe das eingebettete JBoss gemäß der JBoss Wiki-Anweisungen . Und ich habe Tomcat so konfiguriert, dass er jede WAR standardmäßig scannt, wie in der Konfigurations-Wiki-Seite .

Ich zitiere die Konfigurationsseite:

JNDI

Eingebettete JBoss-Komponenten wie Verbindungspooling, EJB, JPA und Transaktionen machen machen ausgiebig Gebrauch von JNDI, um Dienste zu veröffentlichen. Embedded JBoss setzt die JNDI-Implementierung von Tomcat außer Kraft Implementierung von Tomcat, indem es sich auf die JNDI-Instanziierung von Tomcat aufbaut. Hierfür gibt es einige > Gründe:

  1. Um zu vermeiden, dass jeder einzelne dieser Dienste in server.xml deklariert werden muss
  2. Ermöglicht die nahtlose Integration des java:comp-Namensraums zwischen Webanwendungen und EJBs.
  3. Die JNDI-Implementierung von Tomcat weist einige kritische Fehler auf, die einige JBoss Komponenten in ihrer Funktionsfähigkeit
  4. Wir möchten Ihnen die Möglichkeit bieten, EJBs und andere Dienste, die > aus der Ferne abgerufen werden können, zu remoten.

Hat jemand eine Idee, wie ich den JBoss-Namensdienst konfigurieren kann, der laut dem obigen Zitat die JNDI-Implementierung von Tomcat außer Kraft setzt, so dass ich einen Lookup auf java:comp/env durchführen kann?

FYI - Meine Umgebung Tomcat 5.5.9, Seam 2.0.2sp, Embedded JBoss (Beta 3),

Hinweis: Ich habe eine -ds.xml-Datei für meine Datenbankverbindung ordnungsgemäß eingerichtet und kann auf den Klassenpfad gemäß den Anweisungen zugreifen.

Beachten Sie auch: Ich habe diese Frage im eingebetteten Jboss-Forum und im Seam-Benutzerforum gestellt.

2voto

Joe Dean Punkte 3326

Danke für die Antwort toolkit.... ja, ich kann auf meine Datenquelle zugreifen, indem ich direkt zu java:jdbc/mydb gehe, aber ich verwende eine vorhandene Codebasis, die über die ENC verbindet. Hier sind einige interessante Informationen, die ich herausgefunden habe ....

  1. Der obige Code funktioniert mit JBoss 4.2.2.GA und hier die verwendeten JNDI ctx-Parameter:
    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. Der obige Code funktioniert mit Tomcat 5.5.x und hier die verwendeten JNDI ctx-Parameter:
    java.naming.factory.initial=org.apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs=org.apache.naming

  3. Der obige Code schlägt fehl mit Eingebettetes JBoss (Beta 3) in Tomcat 5.5.x mit der oben genannten Fehlermeldung.
    java.naming.factory.initial=org.apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs=org.apache.namingDer obige Code schlägt mit dem obigen Fehler bei Verwendung von JBoss Embedded in Tomcat 5.5.x fehl

Hat jemand irgendwelche Gedanken ich, was ich mit der Konfiguration von eingebetteten JBoss JNDI-Konfiguration tun müssen?

0 Stimmen

Haben Sie eine Lösung gefunden? Ich habe dieses Problem auch. Anwendung funktioniert gut mit nativen Tomcat, Datenquellen arbeiten wie erwartet, aber wenn JBoss eingebettet ist, bekomme ich einen "Name java:comp ist nicht in diesem Kontext gebunden" Fehler.

1voto

toolkit Punkte 48653

Java:comp/env ist als Enterprise Naming Context (ENC) bekannt und ist nicht global sichtbar. Siehe aquí für weitere Informationen. Sie müssen den globalen JNDI-Namen ausfindig machen, unter dem Ihre Datenquelle registriert ist.

Am einfachsten ist es, die webbasierte JMX-Konsole von JBoss aufzurufen und nach einer "JNDIView"-Mbean (der Name ist mir nicht ganz klar - ich bin gerade zu Hause) zu suchen. Diese mbean sollte eine Listenmethode haben, die Sie aufrufen können und die den Kontextpfad für alle JNDI-gebundenen Objekte anzeigt.

1voto

Kirijav Punkte 21

Ich hatte ein ähnliches Problem mit Jboss Embedded und ich habe es endlich in der Datei behoben: test-datasource-ds.xml

Hinzufügen von

<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>

Das Problem war, dass Jboss das Präfix java:/ für alle deklarierten Datenquellen hinzufügte. Also hatte ich schließlich eine Datenquelle mit dem Namen testDatasource, die mit der Direktive jdbc/Example DataSource überschrieben wurde

Hoffentlich funktioniert es

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X