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

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

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

Native Library sqljdbc_auth.dll already loaded in another classloader

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

  • C:WINDOWSsystem32
  • C:Program файлыApache Software FoundationTomcat 7.0bin

Если я ставлю sqljdbc_auth.dll в одной из папок ниже:

  • /WEB-INF/lib каталог каждого веб-приложения
  • C:Program файлыApache Software FoundationTomcat 7.0lib

оба приложения выбрасывают исключение:

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 ответов


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

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

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

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

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

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

Если вы используете tomcat в качестве службы, измените опции


та же ошибка возникает в Jasper Studio.

вероятно, не лучшее решение, но поместите sqljdbc4.jar in C:\Program файлы (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 файлы (x86)\TIBCO\Jaspersoft Studio-6.1.0.final\features\jre.с Win32.с Win32.архитектуры x86.feature_1.7.0.\u80 среда JRE\ОГРН

и это сработает.