Собственная библиотека 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\ОГРН
и это сработает.