Ich habe einen Postgres 9.0.1 SQL Server und einen Tomcat 5.5.28 auf meinem lokalen PC eingerichtet. Beides läuft gut. Aber ich war nicht in der Lage, Tomcat zu konfigurieren, um die DataSource über JNDI verfügbar zu machen. Ich glaube, ich habe das JNDI HOW-TO von den Tomcat-Seiten bis zum Buchstaben verfolgt (und auch andere Anleitungen von anderen Seiten ausprobiert). Aber jedes Mal, Tomcat startet er zeigt die Fehlermeldung:Tomcat 5.5 erkennt DataSource beim Start nicht (Nullkomponente Catalina: type = DataSource)
SEVERE: Null component Catalina:type=DataSource,path=/MyApp,host=localhost,class=javax.sql.DataSource,name="jdbc/postgres"
Tomcat dennoch nicht starten, aber meine Datenbank-Code wird nicht funktionieren, weil mein InitialContext.lookup mit nichts landet.
I: \ Apache Software Foundation \ Tomcat 5.5 \ common \ lib
I: \ Apache
Der Postgres-Treiber "postgresql-8.4-701.jdbc4.jar" ist in den folgenden Ordner kopiert Software Foundation \ Tomcat 5.5 \ webapps \ MyApp \ WEB-INF \ lib
Hier ist meine MeineAnw/META-INF/context.xml:
<Context path="/MyApp" docBase="MyApp" crossContext="true" reloadable="true" debug="1">
<Resource name="jdbc/postgres"
auth="Container"
type="javax.sql.DataSource"
username="postgres"
password="xxx"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost/MyDatabase"
maxWait="1000"
maxActive="20"
maxIdle="10">
</Resource>
</Context>
Hier ist ein Auszug aus der Liste meiner MeineAnw/WEB-INF /web.xml:
Mein Projekt wird als WAR von Eclipse bereitgestellt und Tomcat löst den WAR beim Start als Ordner aus. Nun das Seltsame: Wenn ich Tomcat nicht von Hand, sondern mit Eclipse starte, funktioniert alles !!! Tomcat kommt nicht mit der obigen Fehlermeldung auf. Ich habe entdeckt, dass Eclipse seine eigene server.xml, context.xml usw. verwendet, wenn es Tomcat selbst startet, aber selbst nachdem ich diese Dateien mit den regulären Konfigurationsdateien von Tomcat verglichen habe, ist der einzige Unterschied, den ich bisher entdeckt habe, die folgende zusätzliche Zeile im Eclipse Server .xml vor dem Schließen „host“ tag:
<Context docBase="MyApp" path="/MyApp" reloadable="true" source="org.eclipse.jst.j2ee.server:MyApp"/>
Aber selbst wenn ich kopieren sie diese Zeile in Tomcat eigenen server.xml (ohne die „Quelle“ -Attribut), ist es nicht ohne Eclipse-arbeiten. Eclipse muss also etwas "extra" machen, was das Finden der DataSource ermöglicht, während die "normale" Tomcat-Konfiguration fehlschlägt. Da ich die WAR auf einem anderen Server (ohne Eclipse) bereitstellen muss, brauche ich Hilfe, um dies ohne Eclipse zu machen. Ich denke, mein Code ist in Ordnung, da er mit Tomcat von Eclipse funktioniert, aber meine Konfiguration von Tomcat 5.5 muss fehlerhaft sein. Irgendwelche Ideen?
Nur eine zusätzliche Anmerkung: Der Fehler "kann JDBC-Treiber nicht erstellen" passiert nicht mit Tomcat 7. Heute habe ich die gleiche WAR-Datei, die Tomcat 5.5. erzeugen Sie diesen Fehler bei einer Tomcat 7-Installation. Mit Tomcat 7 ist meine Problemumgehung, eine globale Ressource zu definieren, nicht notwendig - Tomcat 5.5 scheint nur Probleme mit der Art zu haben, wie ich die anwendungsspezifische Datenquelle definiert habe. – Ray
In Ihrer 'MyApp/META-INF/context.xml' sollte das' Context'-Element nicht 'path' oder 'docBase' gesetzt haben, da sie bei der Definition auf Web-Anwendungsebene abgeleitet werden. siehe [Kontext bei Tomcat 5.5] (http://tomcat.apache.org/tomcat-5.5-doc/config/context.html) –