2012-02-17 25 views
7

Próbowałem prawie wszystkiego, co mogę znaleźć, jeśli ktoś jest w stanie mi pomóc, będę wiecznie wdzięczny (i dużo bardziej wolny w moim czasie).Nie można utworzyć sterownika JDBC klasy '' dla adresu URL połączenia 'null': Tomcat i sterownik JDBC serwera SQL

Zasadniczo mam błąd w Tomcat 7.0 (zarówno podczas pracy w ciągu Eclipse i za pośrednictwem startup.bat), który mówi, że to po danych zaczyna być dostępne przez mojego dynamicznej aplikacji internetowej:

Cannot create JDBC driver of class '' for connect URL 'null' 
java.lang.NullPointerException 
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507) 
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:476) 
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307) 

mam plik sqljdbc4.jar w katalogu tomcat \ lib. Próbowałem również umieścić to w moich WEB-INF/lib, a nawet moich katalogów lib JDK. Nie sądzę, aby program sqljdbc.jar zadziałał, ponieważ jest przeznaczony dla starszych instalacji JDK/JRE niż moje.

Słyszałem, że pliki context.xml i web.xml mają kluczowe znaczenie, aby to zadziałało.

web.xml urywek:

<resource-ref> 
<description>LBI DB Connection</description> 
<res-ref-name>jdbc/LBIDB</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
<res-sharing-scope>Shareable</res-sharing-scope> 
</resource-ref> 
<resource-ref> 
<description>OR DB Connection</description> 
<res-ref-name>jdbc/ORDB</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
<res-sharing-scope>Shareable</res-sharing-scope> 
</resource-ref> 

context.xml zakładka

<Context> 
<!-- Default set of monitored resources --> 
<WatchedResource>WEB-INF/web.xml</WatchedResource> 
<Resource name="jdbc/LBIDB" auth="Container" 
type="javax.sql.DataSource" username="***" password="***" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
url="jdbc:sqlserver:localhost;DatabaseName=YYBackOffice;SelectMethod=cursor;" 
maxActive="8" maxIdle="4"/> 

<Resource name="jdbc/ORDB" auth="Container" 
type="javax.sql.DataSource" username="***" password="***" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
url="jdbc:sqlserver:localhost;DatabaseName=XXBackOffice;SelectMethod=cursor;" 
maxActive="8" maxIdle="4"/> 

Kontekst ma klapkę zamykającą, w końcu.

Proszę pomóc! Jeśli potrzebujesz więcej informacji, daj mi znać. Ponadto nie jestem pewien, który context.xml powinien zostać zmodyfikowany, są 2 w katalogach Tomcat, jeden w folderze/conf i jeden w folderze webapps/appname/META-INF. Przepraszam, jeśli wydaje mi się, że jestem trochę nowicjuszem, to dlatego, że jestem!

Ponadto widziałem wiele różnych przykładów adresu url = "..." w pliku context.xml, niektóre zawierają również numery portów. Wypróbowałem kilka rzeczy w Internecie, ale nic nie działa (nic nie pomaga w Internecie jest moim dokładnym środowiskiem danych, także przypuszczam, że to trudne, aby ta aplikacja wypytywała dwie różne bazy danych w danym czasie).

Myśli?

Odpowiedz

7
  1. context.xml w META-INF folderu aplikacji internetowej będą mieć pierwszeństwo nad jednym w katalogu/conf, który jest naprawdę tylko generic domyślna.

  2. Sterownik open source JTDS SQL Server jest znacznie lepszy niż Microsoft. Jeśli nie ma nadrzędnego powodu, użyj go zamiast tego. Jedynym powodem umieszczenia go w folderze tomcat/lib jest zapisanie w pliku server.xml pliku GlobalNamingResource dla bazy danych, w przeciwnym razie wystarczy umieścić go w folderze aplikacji/lib.

  3. JDBC URL JTDS jest: jdbc:jtds:sqlserver://hostname/databasename

  4. klasy sterownika przyłącze JTDS jest: net.sourceforge.jtds.jdbc.Driver

+0

Wielkie dzięki za wyjaśnienie, słyszałem tak wiele rzeczy w Internecie z server.xml oraz używanie globalnych zasobów, problemów context.xml, itp., Które mogą być mylące dla nowicjuszy. Założę się, że to pomoże mi w rozwiązaniu mojego problemu. – aohm1989

+0

FYI, zmiana na sterownik JTDS SQL Server i użycie adresu URL/sterownika JDBC sprawdziły się. Nie mogę powiedzieć na pewno, ale wygląda na to, że błędy zniknęły! Okazuje się, że ta aplikacja internetowa ma inne problemy, które nie są związane z tym, myślę, ale to nadal pomaga ton na własne potrzeby. Wielkie dzięki. – aohm1989

3

w Tomcat 6.0.36 to jest dokładnie przeciwny sposób:

CATALINA_HOME/conf/Catalina/your_host/context.xml

odbędzie presedence nad jednym z

YourApplication/WebContent/META-INF/

Po wprowadzeniu danych poniższy fragment wewnątrz Context-Tag w Catalina/your_host to zadziałało w moim przypadku:

<WatchedResource>WEB-INF/web.xml</WatchedResource> 
    <Resource name="jdbc/your_db" auth="Container" type="javax.sql.DataSource" 
     maxActive="50" maxIdle="30" maxWait="10000" 
     username="your_usr" password="your_pwd" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://your_host:3306/your_db"/> 

Zobacz dokumentację Tomcat pod numerem http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

+0

To zadziałało dla mnie. Moja konfiguracja to Eclipse z wtyczką Tomcat do debugowania. W początkowej konfiguracji Eclipse umieszcza podstawowy plik "context.xml" w katalogu 'CATALINA_HOME/conf/Catalina/MY_MAGIC_APP/context.xml'. Może zrobiłem coś nie tak, ale wtyczka Eclipse-Tomcat nie odbierała ani nie odkrywała moich projektów prawdziwym plikiem 'META-INF/context.xml', który zawiera niezbędne informacje konfiguracyjne. Wymieniłem podstawowy plik 'context.xml' na prawdziwy plik' context.xml' i wszystko było w porządku. – clafonta

Powiązane problemy