2009-05-08 3 views
0

Ich habe ein Problem mit Proxool und Oracle-Treiber in Tomcat.Hot-Deploy-Problem in Tomcat mit Proxool und Oracle

Die von mir verwendete Webanwendung enthält eine Webservice-JAR-Datei mit Metro und einem Servlet zum Initialisieren/Starten des Proxool-Pools. Der proxool-Pool ist mit einer Oracle-Verbindung konfiguriert. Wenn der Service aufgerufen wird, ruft er eine Verbindung aus dem Pool ab, führt eine Anweisung aus und gibt zurück. Ich schließe das Resultset, die Anweisung und die Verbindung in der Service-Methode danach.

Wenn ich jetzt versuche, die Webanwendung schnell zu deimplementieren, stoppt das Servlet ProxoolFacade.shutdown(); in seiner Methode zu zerstören.

Das Problem ist, dass die heiße Deimplementierung nicht abgeschlossen werden kann, da der Oracle-Treiber ojdbc5.jar nicht aus dem Ordner der extrahierten Webanwendung gelöscht werden kann.

Probieren Sie das gleiche mit einer SQL-Server-Datenbank und dem jtds-Treiber funktioniert es ohne dieses Problem.

Gebrauchte Versionen: Apache Tomcat 6.0.18 Oracle 11g JDBC-Treiber 11.1.0.6.0 Proxool 0.9.1

Wer hat eine Idee?

Grüße Timo

Antwort

0

Sie müssen die Oracle-Treiber auf die Tomcat-Instanz hinzufügen und Tomcat JNDI with an Oracle datasoure konfigurieren.

Auf diese Weise bleibt der Treiber aktiv, wenn die App beendet wird und Tomcat das Pooling der DB-Verbindungen steuert. Der Grund für Ihr Problem ist, dass einige DB-Treiber in die VM "einhaken". Das bedeutet, dass Tomcat die Klassen während der erneuten Bereitstellung nicht entladen kann - es gibt immer noch Referenzen in der Umgebung.

Ich würde sogar vorschlagen zu versuchen, proxool in den Tomcat-Server zu verschieben und Tomcat die Pools für Sie verwalten zu lassen. Das würde die Bereitstellung im laufenden Betrieb viel schneller und zuverlässiger machen, selbst wenn Sie Verbindungen verlieren.