简体   繁体   English

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

[英]Window 2008 Tomcat 7 MS SQL Server 2008R2 - JNDI JDBC Driver not recognized

First of all I must say that I've already looked for this problem and I've found several answers, none worked for me.首先,我必须说我已经找到了这个问题,并且找到了几个答案,但没有一个对我有用。

I've Tomcat 7 running as a service on Windows 2008 x64 with JDK 1.7.0.10.我已经使用 JDK 1.7.0.10 在 Windows 2008 x64 上作为服务运行 Tomcat 7。

I'm trying to use a JDBC Connection Pool, that I've successfully run in Tomcat 6.0.36 (Not installed as a service) on Windows 7 x86.我正在尝试使用 JDBC 连接池,该池已在 Windows 7 x86 上的 Tomcat 6.0.36(未安装为服务)中成功运行。 The configuration was simple:配置很简单:

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

2-. 2-。 Edit %CATALINA_HOME%\\webapps\\APP_NAME\\META-INF\\context.xml:编辑 %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-. 3-。 Edit web.xml:编辑 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>

And it works fine!它工作正常!

BUT, when I tried to run the same application in但是,当我尝试在

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

following the same steps , I got:按照相同的步骤,我得到:

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)

Then I tried different things:然后我尝试了不同的事情:

  • Modify jvm's classpath on service laucher:在service laucher上修改jvm的classpath:

    Java Classpath: 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 Java 类路径: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

Works on WinXP, but it didn't work on w2008.适用于 WinXP,但不适用于 w2008。

  • Use regular Tomcat version (not service), modify Catalina.bat in order to include sqljdbc4.jar in classpath:使用常规 Tomcat 版本(不是服务),修改 Catalina.bat 以便在类路径中包含 sqljdbc4.jar:

    if "%CLASSPATH%" == "" goto emptyClasspath set "CLASSPATH=%CATALINA_HOME%\\lib\\sqljdbc4.jar;%CLASSPATH%;" if "%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" :emptyClasspath set "CLASSPATH=%CATALINA_HOME%\\lib\\sqljdbc4.jar;%CLASSPATH%%CATALINA_HOME%\\bin\\bootstrap.jar"

    if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir set "CATALINA_TMPDIR=%CATALINA_BASE%\\temp" :gotTmpdir如果不是 "%CATALINA_TMPDIR%" == "" 转到 gotTmpdir 设置 "CATALINA_TMPDIR=%CATALINA_BASE%\\temp" :gotTmpdir

Works on WinXP, but it didn't work on w2008适用于 WinXP,但不适用于 w2008

So, after repeating several times the same steps in different order and trying different versions of tomcat an Java, I don't know what else to do .所以,在以不同的顺序重复多次相同的步骤并尝试不同版本的 tomcat 和 Java 之后,我不知道还能做什么

Please, remember that this application is running with this configuration in w7 x86 and tomcat 6 through Netbeans 6.91 without ANY modification, and it runs on Win XP x86 editing the classpath.请记住,此应用程序在 w7 x86 和 tomcat 6 中通过 Netbeans 6.91 使用此配置运行,没有任何修改,并且它在 Win XP x86 上运行编辑类路径。

What's the problem then?那有什么问题呢?

Sorry for my bad English.对不起,我的英语不好。 Thank you.谢谢你。

On an additional note, if you have several instances of SQLServer running in your database service, you need to qualify the instance you are connecting to by providing the instanceName attribute in context.xml.另外要注意的是,如果在数据库服务中运行多个 SQLServer 实例,则需要通过在 context.xml 中提供instanceName属性来限定要连接的实例 In Tomcat 6, context.xml is at CATALINA_HOME/conf folder.在 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> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM