Подтвердить что ты не робот

Собственная библиотека sqljdbc_auth.dll уже загружена в другой загрузчик классов

У меня есть два 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 каталог каждого веб-приложения
  • 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;");

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Я думаю, что ты на правильном пути.

Для запуска командной строки вы можете легко решить проблему no sqljdbc_auth в 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

Ответ 3

Такая же ошибка возникает в 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 и 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\бен

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