2012-02-17 57 views
7

Tôi đã thử mọi thứ tôi có thể tìm thấy ở đó, nếu ai đó có thể giúp tôi, tôi sẽ mãi mãi biết ơn (và nhiều hơn nữa miễn phí trong thời gian của tôi).Không thể tạo trình điều khiển JDBC của lớp '' cho URL kết nối 'null': Trình điều khiển JDBC của Tomcat & SQL Server

Về cơ bản, tôi có một lỗi trong Tomcat 7.0 (cả khi chạy trong Eclipse và qua startup.bat) mà nói điều này một lần dữ liệu bắt đầu được truy cập bằng ứng dụng web động của tôi:

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) 

Tôi có tệp sqljdbc4.jar trong thư mục tomcat \ lib của tôi. Tôi cũng đã thử đặt này trong WEB-INF/lib của tôi, và thậm chí cả thư mục lib JDK của tôi. Tôi không nghĩ rằng sqljdbc.jar sẽ làm việc, vì nó dành cho các cài đặt JDK/JRE cũ hơn của tôi.

Tôi đã nghe các tệp context.xml và web.xml rất quan trọng trong việc làm việc này.

đoạn 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 tab

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

Bối cảnh không có một tab đóng cửa, cuối cùng.

Vui lòng trợ giúp! Nếu bạn cần thêm thông tin, vui lòng cho tôi biết. Ngoài ra, tôi không chắc chắn context.xml nào nên được sửa đổi, có 2 trong thư mục Tomcat, một trong thư mục/conf và một trong thư mục webapps/appname/META-INF. Xin lỗi nếu nó có vẻ như tôi là một chút của một tân binh, đó là bởi vì tôi!

Ngoài ra, tôi đã thấy nhiều ví dụ khác nhau về phần url = "..." của context.xml, một số bao gồm cả số cổng. Tôi đã thử nhiều thứ trên mạng, nhưng không có gì có hiệu quả (không giúp gì trực tuyến là môi trường dữ liệu chính xác của tôi, tôi cũng cho rằng ứng dụng này sẽ truy vấn hai DB khác nhau vào những thời điểm nhất định).

Suy nghĩ?

Trả lời

7
  1. Các context.xml trong thư mục ứng dụng web của bạn META-INF sẽ chiếm ưu thế so với một trong thư mục/conf, mà thực sự chỉ là một mặc định chung chung.

  2. Trình điều khiển mã nguồn mở JTDS SQL Server là cách tốt hơn Microsoft. Trừ khi có một lý do quan trọng, hãy sử dụng nó thay thế. Lý do duy nhất để đưa nó vào thư mục tomcat/lib của bạn là nếu bạn đang khai báo một GlobalNamingResource cho cơ sở dữ liệu trong tệp server.xml của bạn, nếu không bạn chỉ có thể đặt nó vào thư mục/lib của ứng dụng của bạn.

  3. URL JDBC cho jtds là: jdbc:jtds:sqlserver://hostname/databasename

  4. Lớp điều khiển kết nối cho jtds là: net.sourceforge.jtds.jdbc.Driver

+0

Cảm ơn rất nhiều về việc làm rõ này, tôi cũng đã nghe rất nhiều thứ trực tuyến với server.xml và sử dụng tài nguyên toàn cầu, các vấn đề context.xml, v.v. có thể gây nhầm lẫn cho người mới đến. Tôi đặt cược điều này sẽ giúp tôi giải quyết vấn đề của mình. – aohm1989

+0

FYI, chuyển sang trình điều khiển SQL Server JTDS và việc sử dụng lớp JDBC URL/trình điều khiển dường như đã hoạt động. Tôi không thể chắc chắn, nhưng có vẻ như các lỗi đã biến mất! Nó chỉ ra ứng dụng web này có một số vấn đề khác mà không liên quan đến điều này tôi nghĩ, nhưng điều này vẫn giúp một tấn cho mục đích của riêng tôi. Cảm ơn nhiều. – aohm1989

3

Trong tomcat 6.0.36 đó là chính xác theo cách ngược lại:

CATALINA_HOME/conf/Catalina/your_host/context.xml

sẽ mất presedence hơn một từ

YourApplication/WebContent/META-INF/

Sau khi đưa dữ liệu đoạn sau đây trong bối cảnh-Tag trong Catalina/your_host nó hoạt động trong trường hợp của tôi:

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

Xem tài liệu Tomcat trên http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

+0

Điều này làm việc cho tôi. Thiết lập của tôi là Eclipse với một plugin Tomcat, để gỡ lỗi. Đối với các thiết lập ban đầu, Eclipse đặt một tệp 'context.xml' cơ bản trong 'CATALINA_HOME/conf/Catalina/MY_MAGIC_APP/context.xml'. Có lẽ tôi đã làm điều gì đó sai, nhưng Eclipse-Tomcat-plugin đã không chọn hoặc khám phá các dự án thực sự của tôi 'META-INF/context.xml' tập tin, trong đó có các thông tin cấu hình cần thiết. Tôi đã thay thế tệp 'context.xml' cơ bản bằng tệp' context.xml' thực và tất cả đều tốt. – clafonta

Các vấn đề liên quan