Невозможно создать драйвер JDBC класса '' для URL-адреса подключения 'null': драйвер JDBC Tomcat и SQL Server - PullRequest
7 голосов
/ 17 февраля 2012

Я перепробовал почти все, что смог там найти, если кто-то сможет мне помочь, я буду вечно благодарен (и намного больше свободен в свое время).

По сути, у меня есть ошибка в Tomcat 7.0 (как при работе в Eclipse, так и через startup.bat), которая говорит об этом, как только мои динамические веб-приложения начинают получать доступ к данным:

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)

У меня есть файл sqljdbc4.jar в моем каталоге tomcat \ lib. Я также попытался поместить это в мой WEB-INF / lib и даже в мои каталоги lib JDK. Я не думаю, что sqljdbc.jar будет работать, так как он предназначен для более старых установок JDK / JRE, чем у меня.

Я слышал, что файлы context.xml и web.xml крайне важны для того, чтобы заставить это работать.

фрагмент web.xml:

<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

<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"/>

В конце концов, вкладка «Контекст» имеет закрывающую вкладку.

Пожалуйста, помогите! Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Кроме того, я не уверен, какой context.xml следует изменить, их 2 в каталогах Tomcat, один в папке / conf и один в папке webapps / appname / META-INF. Извините, если это звучит так, будто я немного новичок, это потому что я!

Кроме того, я видел много разных примеров части url = "..." в context.xml, некоторые из которых включают номера портов. Я попробовал несколько вещей онлайн, но, похоже, ничего не работает (ничто не помогает онлайн, это моя точная среда данных, и я полагаю, сложно, чтобы это приложение запрашивало две разные БД в заданное время).

Мысли

Ответы [ 2 ]

7 голосов
/ 17 февраля 2012
  1. context.xml в папке META-INF вашего веб-приложения будет иметь приоритет над папкой в ​​каталоге / conf, которая на самом деле является просто общим значением по умолчанию.

  2. Драйвер с открытым исходным кодом JTDS SQL Server намного лучше, чем драйвер Microsoft. Если нет основной причины, используйте ее вместо этого. Единственная причина поместить его в папку tomcat / lib, если вы объявляете GlobalNamingResource для базы данных в вашем server.xml, в противном случае вы можете просто поместить его в папку / lib вашего приложения.

  3. URL JDBC для JTDS: jdbc:jtds:sqlserver://hostname/databasename

  4. Класс драйвера соединения для JTDS: net.sourceforge.jtds.jdbc.Driver

3 голосов
/ 06 сентября 2013

В Tomcat 6.0.36 все происходит наоборот:

CATALINA_HOME/conf/Catalina/your_host/context.xml

будет иметь преимущество перед одним из

YourApplication/WebContent/META-INF/

После помещения данных после фрагмента в Context-Tag в Catalina/your_host в моем случае это сработало:

<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"/>

См. Документацию Tomcat по http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

...