2012-05-17 12 views
17

Windows統合認証を使用してSQL Serverデータベースに接続する必要のある2つのJava Webアプリケーションがあります。ネイティブライブラリsqljdbc_auth.dllが既に別のクラスローダにロードされています

ロードされた最初のものは正常に動作しますが、もう一つは例外がスローされます:

  • :私はフォルダのいずれかにsqljdbc_auth.dllを置いたときに

    Native Library sqljdbc_auth.dll already loaded in another classloader 
    

    上記のエラーが発生しますC:\ WINDOWS \ system32に

  • C \:\プログラムファイル\ Apache Software Foundationの\ Tomcatの7.0 \ binに\

私は、以下のいずれかのフォルダにsqljdbc_auth.dllを配置する場合:

    各Webアプリケーションの
  • /WEB-INF/libディレクトリ
  • C:\プログラムファイル\ Apache Software Foundationの\ Tomcatの7.0 \ libに\

    :私はドライバをロードするためにこのコードを使用しています

    Failed to load the sqljdbc_auth.dll cause :- no sqljdbc_auth in java.library.path 
    

両方のアプリケーションは例外をスロー

Class.forName("jdbc:sqlserver://<HOST>;databaseName=<DBNAME>;integratedSecurity=true;"); 

どうすれば解決できますか?

答えて

26

各Webアプリケーションには、独自のClassloader(分離する)があります。 Class.forName()メソッドを呼び出すと、共有ライブラリ(dllファイル)をロードしようとしている静的ブロックがあるため、両方のWebアプリケーションが共有ライブラリをロードしようとしています。ロードしようとします。

sqlserver用に持っているJDBC jarは、あなたの戦争にバンドルされているフォルダからtomcat 7.0/libフォルダに移動し、sqljdbc_auth.dllをtomcat/binフォルダにコピーします。これはtomcat親クラスローダーにあります。クラスは一度だけロードされます。

|----------------------------------| 
| sqljdbc*.jar  --> tomcat*/lib | 
|----------------------------------| 
| sqljdbc_auth.dll --> tomcat*/bin | 
|----------------------------------| 
+0

私は私の質問で言ったように、DLLをtomcat 7.0/libに入れようとしました。あなたの答えの後に、私はtomcat 7.0/lib * s *を作成し、そこにDLLを置いて、私は同じエラーが発生しました: sqljdbc_auth.dllのロードに失敗しました原因: - java.library.pathのno sqljdbc_auth – Gustavo

+0

私は、リンクの前にTomcat Classloaderについて読んでください: http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html しかし、Tomcatは.jarファイルだけをロードするようです.dllファイルではありません。 – Gustavo

+1

これを明確にするために、Tomcat/binフォルダにdllを、Tomcat/libフォルダにjdbc ** JAR **ファイルを置く必要があります(残念ながら私はlib上の余分なものを間違えています。 ) –

1

あなたは正しい方向にいると思います。コマンドライン起動のために

Tomcatをサービスとして実行している場合、あなたは簡単にオプションを変更、変数

CATALINA_OPTS=-Djava.library.path=/path/to/dll 

の環境を設定することにより、java.library.pathに問題でなしsqljdbc_authを解決することができます

HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat7\Parameters\Java

下のパラメータが含まれるように:

-Djava.library.path=/path/to/dll 
+1

答えはありがたいですが、前の方が問題を解決しました。 – Gustavo

0

Jasper Studioでも同じエラーが発生します。

おそらく最適な解決策ではありませんが、sqljdbc4.jarをC:¥Program Files(x86)¥TIBCO¥Jaspersoft Studio-6.1.0.final \ features \ jre.win32.win32.x86.feature_1.7.0に配置することをお勧めします。u80 \ jre \ lib \ extおよびC:¥Program Files(x86)¥TIBCO¥Jaspersoft Studio-6.1.0.final¥features¥jre.win32.win32.x86.feature_1.7.0.u80¥jreのsqljdbc_auth.dll \ bin

これが機能します。

関連する問題