Dlaczego sterownik JDBC musi być umieszczony w folderze TOMCAT HOME/lib?

Mam dziwny problem, w którym dwie aplikacje webowe ze sterownikiem Oracle JDBC będą ze sobą kolidować. Muszę umieścić JDBC driver JAR we wspólnym folderze TOMCAT_HOME / lib. Jaki jest tego powód?

 37
Author: Mark, 2011-08-08

1 answers

Sterowniki JDBC rejestrują się w singletonie JVMDriverManager który jest współdzielony przez wszystkie aplikacje internetowe. Jeśli masz ten sam (jak w nazwie klasy) sterownik JDBC zarejestruj dwa razy z dwóch różnych aplikacji internetowych, może to spowodować problem. Jest to jeszcze bardziej problematyczne, jeśli aplikacje internetowe używają różnych wersji tego samego sterownika JDBC.

Ponadto umieszczenie sterowników JDBC w folderze Tomcat lib pomoże zapobiec wyciekom pamięci podczas ponownego uruchamiania aplikacji internetowej bez ponownego uruchamiania Tomcat, na przykład, jeśli po prostu umieścisz nowy plik wojny w folderze Tomcat ' s webapps:

Klasa DriverManager jest ładowana przez Bootstrap classloader i tym samym "żyje" globalnie w JVM, podczas gdy Tomcat ładuje wszystkie aplikacje internetowe w swoich własnych classloaderach. Tak więc, jeśli sterownik JDBC z folderu WEB-INF / lib aplikacji webowej zarejestruje się w DriverManager, przypisze classloader tej aplikacji webowej w pamięci (a tym samym wszystkie klasy tej aplikacji webowej), zapobiegając jej usuwaniu śmieci.

If instead both DriverManager and JDBC drivers come korzystając z classloaderów innych niż web app, możesz swobodnie przenosić swoje aplikacje webowe bez przypinania się klas aplikacji webowych do klas załadowanych z innych classloaderów.

Obecne wersje Tomcat (prawdopodobnie 6.x i zdecydowanie 7.x) rejestruje Ostrzeżenia dotyczące niewypełnienia aplikacji internetowej w przypadku wykrycia wycieku pamięci, między innymi przez sterowniki JDBC.

 74
Author: Philipp Reichart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-25 22:41:31