Mam dziwny problem, gdy dwie aplikacje internetowe ze sterownikiem JDBC Oracle będą ze sobą kolidować. Muszę umieścić plik JAR sterownika JDBC we wspólnym folderze TOMCAT_HOME/lib. Jaki jest tego powód?Dlaczego sterownik JDBC należy umieścić w folderze TOMCAT_HOME/lib?
Odpowiedz
Sterowniki JDBC rejestrują się w całym JVM singleton DriverManager
, który jest udostępniany przez aplikacje internetowe wszystkie. Jeśli masz takie same (jak w nazwie klasy) sterownik JDBC rejestruje się dwa razy z dwóch różnych aplikacji internetowych, może to spowodować problem. Jest to jeszcze bardziej problematyczne, jeśli twoje aplikacje internetowe używają różnych wersji tego samego sterownika JDBC.
Ponadto umieszczenie sterowników JDBC w folderze lib Tomcat pomoże zapobiec wyciekom pamięci po ponownym wdrożeniu aplikacji internetowej bez restartowania Tomcat, np. jeśli właśnie umieścisz nowy plik WAR w folderze webmasterów Tomcat:
Klasa DriverManager
zostaje załadowana przez moduł ładujący ładowania początkowego i tym samym "żyje" globalnie w JVM, podczas gdy Tomcat ładuje wszystkie aplikacje internetowe w swoich modułach ładowania klas. Jeśli więc sterownik JDBC z folderu WEB-INF/lib aplikacji internetowej zarejestruje się w numerze DriverManager
, przypina ten moduł ładujący klasy aplikacji do pamięci (a tym samym do wszystkich klas tej aplikacji internetowej), uniemożliwiając jego odśmiecanie.
Jeśli zamiast tego zarówno sterowniki DriverManager
, jak i JDBC pochodzą z aplikacji innych niż aplikacje internetowe, można swobodnie przenosić aplikacje internetowe bez przypisywania sobie klas aplikacji WWW do klas ładowanych z innych programów ładujących klasy.
Aktualne wersje Tomcata (prawdopodobnie 6.x i zdecydowanie 7.x) będą rejestrować ostrzeżenia o nieumiejętności aplikacji internetowej, jeśli wykryty zostanie wyciek pamięci, między innymi przez sterowniki JDBC.
umieszczenie sql jar wewnątrz folderu lib tomcat "apache-tomcat-7.0.37 \ lib" rozwiąże problem? – greenhorn
Tak, jeśli umieścisz pojedynczy plik JAR sterownika JDBC w bibliotece lib/(zamiast biblioteki lib /) serwera Tomcat, uniknie to konfliktów opisanych w oryginalnym plakacie. Oczywiście wszystkie aplikacje muszą mieć możliwość pracy z tą samą wersją sterownika JDBC. –
Czy to tylko ja, czy też "Jogner DriverManager" w języku JVM wydaje się poważnym błędem w projektowaniu JDBC? –
- 1. W jakim folderze należy umieścić "globalne" współdzielone szablony częściowe?
- 2. sterownik JDBC połączenia MS Access
- 3. sterownik jdbc dla google bigquery
- 4. Jak zainicjować sterownik JDBC SQLite3 w JRuby?
- 5. Nie znaleziono odpowiedni sterownik JDBC w Spark
- 6. Redshift i Postgres Sterownik JDBC przechwytują ciąg połączenia Jdbc: // Postgresql
- 7. W którym folderze umieścić zdjęcia 9png?
- 8. W jakim folderze należy umieścić moje metody rozszerzeń w ASP.Net MVC?
- 9. Jak dodać sterownik mysql JDBC do projektu Eclipse?
- 10. ClassNotFoundException: com.mysql.jdbc.Driver. Sterownik JDBC MySQL dla aplikacji internetowych
- 11. Gdzie należy umieścić gradle.properties w Jenkins
- 12. Gdzie należy umieścić kwerend w ASP.NET MVC
- 13. Gdzie należy umieścić niestandardowe pliki .d.ts?
- 14. Gdzie należy umieścić biblioteki javascript w aplikacji Grails?
- 15. Nie można utworzyć sterownika JDBC klasy '' dla adresu URL połączenia 'null': Tomcat i sterownik JDBC serwera SQL
- 16. Gdzie należy umieścić pustą klasę podstawową?
- 17. Gdzie należy umieścić obiekty Command Grails w strukturze projektu?
- 18. Jak umieścić plik zatwierdzenia do zatwierdzenia w folderze?
- 19. Jak umieścić wszystkie zależności w oddzielnym folderze dla działającego słoika?
- 20. Należy umieścić średnik (;) przy użyć onclick = ""
- 21. Silniki w Railsach: kiedy umieścić kod w aplikacji, w bibliotece iw folderze dostawcy?
- 22. Co należy umieścić w komentarzach nagłówka u góry plików źródłowych?
- 23. Gdzie dokładnie należy umieścić w pliku .gitignore Android Studio Projektu
- 24. Gdzie w pliku HTML należy umieścić Jquery i Bootstrap?
- 25. Gdzie jest plik JDBC JDBC MySQL w Ubuntu?
- 26. PostgreSQL - Instalowanie sterownika JDBC
- 27. Czy sterownik JDBC może być skonfigurowany do używania protokołu z pamięcią współużytkowaną
- 28. Dlaczego muszę umieścić operator koalescencyjny w nawiasach?
- 29. dlaczego umieścić "const" na końcu?
- 30. Zmiana identyfikatora cienkiego klienta Oracle JDBC
Co masz na myśli, że będzie ze sobą w konflikcie? Czym dokładnie jest konflikt? Czy używasz JNDI lub bezpośredniego dostępu JDBC? – ziggy