3

まず第一に、私はすでにこの問題を探していて、いくつかの答えを見つけたと言わなければなりません。

JDK 1.7.0.10 を使用して Windows 2008 x64 で Tomcat 7 をサービスとして実行しています。

Windows 7 x86 の Tomcat 6.0.36 (サービスとしてインストールされていない) で正常に実行された JDBC 接続プールを使用しようとしています。構成は簡単でした:

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)

次に、さまざまなことを試しました。

  • サービス laucher で jvm のクラスパスを変更します。

    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

WinXP では動作しますが、w2008 では動作しませんでした。

  • 通常の Tomcat バージョン (サービスではない) を使用し、Catalina.bat を変更してクラスパスに sqljdbc4.jar を含めます。

    if "%CLASSPATH%" == "" 空クラスパス セット "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 でクラスパスを編集して実行されることを覚えておいてください。

じゃあ何が問題なの?

私の悪い英語でごめんなさい。ありがとうございました。

4

1 に答える 1

0

さらに、データベース サービスで 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> 
于 2013-05-02T03:21:05.420 に答える