Warum muss der JDBC-Treiber in den Ordner TOMCAT_HOME / lib gestellt werden?
Ich habe ein seltsames problem, wo zwei web-Anwendungen mit Oracle-JDBC-Treiber in Konflikt mit einander. Ich muss den JDBC-Treiber-JAR in den Ordner "common" TOMCAT_HOME/lib. Was ist der Grund dafür?
Kommentar zu dem Problem - Öffnen
Was meinst du, werden die miteinander in Konflikt geraten? Was genau ist der Konflikt? Und sind Sie mit JNDI oder direkten JDBC-Zugriff?
InformationsquelleAutor der Frage zjffdu | 2011-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
JDBC-Treiber registrieren sich selbst in der JVM-Breite singleton
DriverManager
, die gemeinsam von alle web-apps. Wenn man das gleiche (wie in Klasse name) JDBC-Treiber registrieren Sie zweimal von zwei verschiedenen web-apps, dies kann ein Grund für dein problem. Dies ist noch problematischer, wenn Ihre web-apps verwenden unterschiedliche Versionen des gleichen JDBC-Treiber.Auch setzen JDBC-Treiber in Tomcat lib Ordner wird helfen, zu verhindern Speicherlecks, wenn Sie die Bereitstellung erneut Ihre web-app ohne Neustart von Tomcat, z.B. wenn Sie gerade eine neue war-Datei in das Tomcat - webapps-Ordner:
Klasse
DriverManager
geladen wird, die durch den bootstrap-classloader und damit "Leben" weltweit in der JVM, während Tomcat lädt alle web-apps im eigenen classloadern. Also, wenn ein JDBC-Treiber von ein web-app WEB-INF/lib-Ordner registriert sich selbst inDriverManager
, Stifte, web-app-classloader in den Speicher (und damit alle Klassen, die web-app), die verhindern, dass der garbage-collection.Wenn beide
DriverManager
- und JDBC-Treiber kommen aus nicht-web-app classloadern, können Sie frei Umschichtung Ihrer web-Anwendungen, ohne die web-app-Klassen-pinning, sich in den Klassen geladen, die aus anderen classloadern.Aktuellen Versionen von Tomcat (wahrscheinlich 6.x und auf jeden Fall 7.x) log Warnhinweise, die auf das aufheben der Bereitstellung von web-app, ob ein Speicher-Leck erkannt wird, unter anderem durch die JDBC-Treiber.
InformationsquelleAutor der Antwort Philipp Reichart