Window 2008 Tomcat 7 MS SQL Server 2008 R2 – 无法识别JNDI JDBC驱动程序

首先我必须说,我已经find了这个问题,我find了几个答案,没有为我工作。

Tomcat 7在JDK 1.7.0.10的Windows 2008 x64上作为服务运行。

我正在尝试使用JDBC连接池,我已经在Windows 7 x86上成功运行Tomcat 6.0.36(不作为服务安装)。 configuration很简单:

1。 将sqljdbc4.jar复制到%CATALINA_HOME%\ lib目录中。

2 – 。 编辑%CATALINA_HOME%\ webapps \ APP_NAME \ META-INF \ context.xml:

<?xml version="1.0" encoding="UTF-8"?> <Context antiJARLocking="true" path="/APP_NAME"> <Resource name="jdbc/poolConexiones" auth="Container" driverclassname="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxactive="100" maxidle="30" maxwait="10000" username="user" password="pass" type="javax.sql.DataSource" url="jdbc:sqlserver://localhost:1433;databaseName=Name"> </Resource> </Context> 

3-。 编辑web.xml:

 <resource-ref> <res-ref-name>jdbc/poolConexiones</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> 

它工作正常!

但是,当我试图运行相同的应用程序

  • a)作为服务安装的w2008 x64和tomcat(v 6和7)
  • b)作为服务安装的wXP x86和tomcat(v 6和7)

按照相同的步骤 ,我得到了:

 org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 

然后我尝试了不同的东西:

  • 在服务器上修改jvm的类path:

    Java类path:C:\ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ lib \ sqljdbc4.jar; C:\ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ bin \ bootstrap.jar; C:\ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ bin \ tomcat-juli.jar

适用于WinXP,但在w2008上无效。

  • 使用常规的Tomcat版本(不是服务),修改Catalina.bat为了在类path中包含sqljdbc4.jar:

    如果“%CLASSPATH%”==“”goto emptyClasspath set“CLASSPATH =%CATALINA_HOME%\ lib \ sqljdbc4.jar;%CLASSPATH%;” :emptyClasspath set“CLASSPATH =%CATALINA_HOME%\ lib \ sqljdbc4.jar;%CLASSPATH %% CATALINA_HOME%\ bin \ bootstrap.jar”

    如果不是“%CATALINA_TMPDIR%”==“”goto gotTmpdir set“CATALINA_TMPDIR =%CATALINA_BASE%\ temp”:gotTmpdir

适用于WinXP,但在w2008上无效

所以,按照不同的顺序重复几次相同的步骤,并尝试不同版本的Tomcat和Java, 我不知道还有什么办法

请记住,这个应用程序在w7 x86和tomcat 6中通过Netbeans 6.91运行,没有任何修改,它运行在Win XP x86编辑类path。

那么问题是什么?

对不起,我的英语不好。 谢谢。

另外需要注意的是,如果在数据库服务中运行了多个SQLserver实例,则需要通过在context.xml中提供instanceName属性来限定要连接的实例 。 在Tomcat 6中,context.xml位于CATALINA_HOME / conf文件夹中。

 <?xml version="1.0" encoding="UTF-8"?> <Context antiJARLocking="true" path="/APP_NAME"> <Resource name="jdbc/poolConexiones" auth="Container" driverclassname="com.microsoft.sqlserver.jdbc.SQLserverDriver" maxactive="100" maxidle="30" maxwait="10000" username="user" password="pass" type="javax.sql.DataSource" url="jdbc:sqlserver://localhost:1433;instanceName=myInstance;databaseName=Name"> </Resource> </Context>