Вопрос по java, sql-server – Собственная библиотека sqljdbc_auth.dll уже загружена в другой загрузчик классов

20

У меня есть 2 веб-приложения Java, которые должны подключиться к базе данных SQL Server с помощью встроенной проверки подлинности Windows.

Первый загруженный работает нормально, но второй выдает исключение:

Native Library sqljdbc_auth.dll already loaded in another classloader

Вышеуказанная ошибка возникает, когда я помещаю sqljdbc_auth.dll в одну из папок:

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

Если я помещу sqljdbc_auth.dll в одну из папок ниже:

/WEB-INF/lib directory of each web application 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;");

Как я могу решить это?

Ваш Ответ

3   ответа
0

Вероятно, не лучшее решение, но поместите 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 и sqljdbc_auth.dll в C: \ Program Files (x86) \ TIBCO \ Jaspersoft Studio-6.1.0.final \ features \ jre.win32.win32.x86.feature_1.7.0.u80 \ jre \ bin

И это будет работать.

29

их). Когда вы вызываете метод Class.forName (), возникает статический блок, который пытается загрузить общую библиотеку (файл dll) - поэтому оба ваших веб-приложения пытаются загрузить общую библиотеку, поэтому появляется сообщение об ошибке при втором пытается загрузить.

Jar-файл JDBC, который у вас есть для sqlserver, должен быть перенесен из комплекта ваших войн вtomcat 7.0/lib и скопируйте файл sqljdbc_auth.dll в папку tomcat / bin - таким образом, он будет находиться в родительском загрузчике классов tomcat, и класс будет загружен только один раз.

|----------------------------------|
| sqljdbc*.jar     --> tomcat*/lib |
|----------------------------------|
| sqljdbc_auth.dll --> tomcat*/bin |
|----------------------------------|
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededtomcat.apache.org/tomcat-7.0-doc/class-loader-howto.htmlError: User Rate Limit Exceeded Gustavo
Error: User Rate Limit ExceededJARError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Gustavo
Error: User Rate Limit ExceededsError: User Rate Limit Exceeded Gustavo
1

Для запуска командной строки вы можете легко решитьno sqljdbc_auth in java.library.path проблема, устанавливая переменную среды

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

Если вы используете Tomcat как сервис, изменитеOptions параметр под

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

включать:

-Djava.library.path=/path/to/dll
Error: User Rate Limit Exceeded Gustavo

Похожие вопросы