wie man richtig konfigurieren Sie die jndi-Datenquelle in tomcat 8
Ich versuche zu konfigurieren jsbc Datenquelle für meine app innerhalb
-tomcat_home-\conf\Catalina\localhost
Meine app "reportExport".Krieg so habe ich eine erstellt reportExport.xml mit diesem Inhalt:
<Context>
<Resource name="jdbc/mssql" auth="Container" type="javax.sql.DataSource"
username="user"
password="pass"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:52015;databaseName=rewe;integratedSecurity=false;"
maxActive="20"
maxIdle="10"
validationQuery="select 1" />
</Context>
Ich Hinzugefügt web.xml diese:
<resource-ref>
<description>
This app requires a ms sql connection.
</description>
<res-ref-name>
jdbc/mssql
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
Ich wahrscheinlich weglassen können, die Felder, auf die ich schon gab reportExport.xml?!
in Java versuche ich eine Verbindung wie diese:
((DataSource) (new InitialContext()).lookup("java:comp/env/jdbc/mssql")).getConnection()
Die Verbindung funktioniert fin in java, aber es gibt 2 Probleme.
Das erste problem ist: Wenn ich reportExport.xml in die richtige Pfad, bevor Sie die app tomcat wirft Ausnahme:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].Sta
ndardContext[/reportExport]]
...
Caused by: java.lang.IllegalArgumentException: The main resource set specified [C:\Users\moritz\entwicklung\apache-tomca
t-8.0.18\webapps\reportExport] is not valid
...
11-Feb-2015 14:15:38.303 SEVERE [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDescriptor Error de
ploying configuration descriptor C:\Users\moritz\entwicklung\apache-tomcat-8.0.18\conf\Catalina\localhost\reportExport.x
ml
...
Nach der Bereitstellung der webapp der start ist in Ordnung.
Das zweite problem ist die reportExport.xml gelöscht wird auf der deinstallation von der web-app.
So etwas falsch ist mit meinem setup: ich möchte den system-administrator setup der Datenquelle spezifisch für meine Anwendung. Ich mag die Idee mit einer separaten Datei per web app aber die Ausnahme bei der ersten Einrichtung und die Löschung der deinstallation von schlecht sind.
Auf der anderen Seite ist es wahrscheinlich gut, um das setup-Datenquelle in server.xml aber so konfigurieren Sie die "Kontext" - element gibt es die datasource nur für bestimmte Anwendung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK,
der einfachste Weg:
- in der server.xml deklarieren von globalen Ressourcen (fast auf der Spitze) mit der gleichen syntaxt als in Ihren reportExport.xml Datei.
Wenn Sie die Namen der einzelnen DataSource differenlty, beispielsweise jdbc/reportExport
als jeder deiner webapps können verschiedene Verbindung, die Sie gerade haben, aktualisieren Sie den code, um die "customized name'.
Also in dir .Krieg in MET-INF/context.xml Datei (vor dem erstellen der Krieg in der web/META_INF/context.xml), müssen Sie refrence die globalen Ressourcen:
und greifen Sie dann es normalerweise aus Sie code.
Wenn Sie möchten, können Sie sogar benennen Sie Sie in die context.xml zu jdbc/mssql, so dass Ihre java-code sehen es nach wie vor, aber es wird Punkt für die richtige Datenquelle. Aber ich würde empfehlen, halten verschiedene Namen in jeder app, so dass Sie direkt sehen, was Sie Zugriff haben (persönlicher Geschmack).
Das Hauptproblem bei dieser Lösung ist, dass eine weitere web-app kann auf eine der globalen Ressourcen in Ihre context.xml und bekommt Zugang zu Ihnen. Allerdings, wenn Sie sind zuständig für die code - /server-es sollte nicht eine große Sache sein.
Wenn es ist, Sie müssen nicht manuell setzen .xml-Datei in den webapps-Ordner, aber Sie fügen Sie deren Inhalt auf den Kontext Beschreibung unter Standard-host-element (einige am Ende der server.xml).
Aber tomcat, das sich für Anwendungen refrenced es (so erhalten Sie Fehlermeldungen, wenn Sie die Implementierung der Anwendung), auch wenn Sie neue Ressource in Ihrem element (a variable nicht global data source) Ihrer server-side-Kontext Beschreibung müsste mal wieder aktualisiert.
Also, wenn es nicht wichtig ist aus der Sicht der Sicherheit, dann GlobalResources plus re-referenzieren in der context.xml der web-app ist der einfachste Weg.