2017-01-07 1 views
0

Neuer Benutzer von Tomcat (8.5.9) auf Linux CentOS 7 mit Java SE 8. Ich muss einen einfachen Fehler machen. Dies sollte ein Lehrbuchbeispiel zur Konfiguration eines JDBC-Verbindungspools für Tomcat sein.portieren Web-App auf Tomcat: javax.naming.NameNotFoundException:

Ich habe diesen Fehler:

javax.naming.NameNotFoundException: Name [jdbc/pool1] is not bound in this Context. Unable to find [jdbc]

Jede Idee, was ich falsch machen könnte? Tomcat statesIt is NOT recommended to place <Context> elements directly in the server.xml file. So mein Setup:

$ CATALINA_HOME/webapps/myapp/META-INF/context.xml ist wie folgt:

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <Resource name="jdbc/pool1" 
      auth="Container" 
      type="javax.sql.DataSource" 
      username="xx" 
      password="xx" 
      driverClassName="oracle.jdbc.OracleDriver" 
      url="xx" 
      maxTotal="256" 
      maxIdle="8" 
      initialSize="4" 
      removeAbandonedTimeout="7200" 
      removeAbandonedOnBorrow="true"/> 

    <Resource name="jdbc/pool2" 
      auth="Container" 
      type="javax.sql.DataSource" 
      username="xx" 
      password="xx" 
      driverClassName="oracle.jdbc.OracleDriver" 
      url="xx" 
      maxTotal="256" 
      maxIdle="8" 
      initialSize="4" 
      removeAbandonedTimeout="7200" 
      removeAbandonedOnBorrow="true"/> 

    <ResourceLink name="jdbc/pool1" 
       global="jdbc/pool1" 
       type="javax.sql.DataSource"/> 

    <ResourceLink name="jdbc/pool2" 
       global="jdbc/pool2" 
       type="javax.sql.DataSource"/> 
</Context> 

$ CATALINA_HOME/webapps/myapp/WEB-INF/web. XML ist wie folgt:

... 
<resource-ref> 
     <description>xxx</description> 
     <res-ref-name>jdbc/pool1</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 
    <resource-ref> 
     <description>xxx</description> 
     <res-ref-name>jdbc/pool1</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
</resource-ref> 
... 

Der Code bewirkt die Ausnahme:

Context context = new InitialContext(); 
DataSource ds = (DataSource)context.lookup("jdbc/pool1"); 
conn = ds.getConnection(); 

Ich habe $ CATALINA_HOME/conf/server.xml überhaupt nicht verändert. Habe ich etwas falsch konfiguriert oder fehlt mir irgendwo eine andere Datei?

UPDATE 1

ich zum GlobalNamingResources-Tag in dem $ CATALINA_HOME/conf/server.xml den oben ResourceLinks versucht, das Hinzufügen, dann Tomcat stoppen/starten, aber ich habe den gleichen Fehler.

UPDATE 2

ich die Ressource-Tags aus context.xml oben auch auf die Datei server.xml (GlobalNamingResources-Tag), Stoppen/Starten tomcat dann hinzugefügt, und die gleiche Fehlermeldung anzeigt.

UPDATE 3

Ich habe alles mit Andreas' Hilfe von Experten arbeiten (Danke!) Durch die Art und Weise java Ändern ruft den Pool:

Context initCtx = new InitialContext(); 
Context context = (Context) initCtx.lookup("java:comp/env"); 
DataSource ds = (DataSource) context.lookup("jdbc/pool1"); 
conn = ds.getConnection(); 

Auch die ResourceLinks nicht in server.xml sein sollte (Sie erzeugen einfach eine Warnung in tomcat log).

+0

Welcher Code wirft die Ausnahme? – EJP

+0

@EJP Sicher, ich habe den Code hinzugefügt, der die Ausnahme gerade über Update 1 wirft. – user46688

Antwort

1

IhreDatei sollte das vollständige <Resource> Element enthalten. Denken Sie daran, auch die JDBC-Treiber-JAR-Datei in den Ordner $CATALINA_BASE/lib von Tomcat hinzuzufügen, da Tomcat, nicht Ihre Webanwendung, diese benötigt, wenn <Resource> in server.xml definiert ist.

Als nächstes ist die META-INF/context.xml eine Vorlage, die die erste Zeit verwendet wird, die Ihre Webanwendung bereitgestellt wird. Es wird in $CATALINA_BASE/conf/Catalina/localhost/myapp.xml kopiert und wird wahrscheinlich nicht aktualisiert/aktualisiert, wenn Sie META-INF/context.xml ändern.

Die Datei .../Catalina/localhost/myapp.xml sollte das Element <ResourceLink> enthalten, das den von der Webanwendung verwendeten Namen dem in server.xml verwendeten Namen zuordnet. Diese beiden Namen gleich zu halten ist am einfachsten, aber nicht erforderlich.

Tomcat funktioniert gut ohne die <resource-ref> Elemente in WEB-INF/web.xml, aber es ist besser, wenn sie da sind, für die Kompatibilität mit anderen Servlet-Containern.

Hinweis:$CATALINA_BASE ist in der Regel die gleiche wie $CATALINA_HOME, das heißt der Ordner, in dem Tomcat installiert ist, wenn Sie es ausdrücklich anders konfigurieren.

So $CATALINA_BASE/conf/server.xml:

<?xml version='1.0' encoding='utf-8'?> 
<Server ...> 
    ... 
    <GlobalNamingResources> 
     ... 
     <Resource name="jdbc/pool1" auth="Container" type="javax.sql.DataSource" ... /> 
     <Resource name="jdbc/pool2" auth="Container" type="javax.sql.DataSource" ... /> 
     ... 
    </GlobalNamingResources> 
    ... 
</Server> 

und $CATALINA_BASE/conf/Catalina/localhost/myapp.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <ResourceLink name="jdbc/pool1" global="jdbc/pool1" type="javax.sql.DataSource"/> 
    <ResourceLink name="jdbc/pool2" global="jdbc/pool2" type="javax.sql.DataSource"/> 
</Context> 

und legen ojdbcXXX.jar in $CATALINA_BASE/lib.

+0

Dank @Anderas, (1) 'server.xml' Datei enthält volle' 'Elemente, wie' context.xml' (2) Oracle's ' Die Datei "ojdbc.jar" befindet sich im Ordner "$ CATALINA_HOME/lib". (3) Ich habe "$ CATALINA_BASE" nicht definiert, so dass sie standardmäßig auf "$ CATALINA_HOME" gesetzt ist. (4) Es befinden sich keine Dateien im Ordner "$ CATALINA_HOME"/conf/catalina/localhost', soll Tomcat etwas dorthin bringen? – user46688

+1

Vielleicht hat sich das geändert. Er hat dort die 'META-INF/context.xml' Datei kopiert, benannt nach der Webapp,' myapp.xml' in Ihrem Fall. Versuchen Sie es selbst. Ich benutze nie 'META-INF/context.xml', immer eine manuell konfigurierte Datei' conf/catalina/localhost/myapp.xml', da dies davon abhängt, wie die Datei 'server.xml' konfiguriert wurde. – Andreas

+1

Und denken Sie daran, Tomcat neu zu starten, wenn Sie Änderungen an 'conf' Dateien vornehmen (inkl. Unterordner). – Andreas

Verwandte Themen