24

Windows統合認証を使用してSQLServerデータベースに接続する必要がある2つのJavaWebアプリがあります。

ロードされた最初のものは正常に動作しますが、2番目のものは例外をスローします:

Native Library sqljdbc_auth.dll already loaded in another classloader

上記のエラーは、sqljdbc_auth.dllをフォルダの1つに配置すると発生します。

  • C:\ WINDOWS \ system32 \
  • C:\ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ bin \

sqljdbc_auth.dllを以下のフォルダーの1つに配置した場合:

  • 各Webアプリケーションの/WEB-INF/libディレクトリ
  • C:\ Program Files \ 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;");

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

4

3 に答える 3

34

各 Web アプリケーションには独自の Classloader があります (それらを分離します)。Class.forName() メソッドを呼び出すと、共有ライブラリ (dll ファイル) をロードしようとしている静的ブロックが存在するため、両方の Web アプリが共有ライブラリをロードしようとしているため、2 番目のライブラリのエラー メッセージが表示されます。ロードを試みます。

sqlserver 用に持っている JDBC jar は、wars にバンドルされているフォルダーからフォルダーに移動しtomcat 7.0/lib、sqljdbc_auth.dll を tomcat/bin フォルダーにコピーする必要があります。一度。

|----------------------------------|
| sqljdbc*.jar     --> tomcat*/lib |
|----------------------------------|
| sqljdbc_auth.dll --> tomcat*/bin |
|----------------------------------|
于 2012-05-17T23:54:06.073 に答える
1

あなたは正しい軌道に乗っていると思います。

コマンド ラインで起動する場合は、環境変数を設定することで、 no sqljdbc_auth in java.library.path の問題を簡単に解決できます。

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

tomcat をサービスとして実行している場合は、[オプション]パラメーターを変更します。

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

含める:

-Djava.library.path=/path/to/dll
于 2012-05-18T10:30:30.393 に答える
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\bin の sqljdbc_auth.dll

そして、それはうまくいきます。

于 2016-08-24T06:16:23.523 に答える