Вопрос по java, sql-server – Собственная библиотека sqljdbc_auth.dll уже загружена в другой загрузчик классов
У меня есть 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;");
Как я могу решить это?
Вероятно, не лучшее решение, но поместите 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
И это будет работать.
их). Когда вы вызываете метод 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 |
|----------------------------------|
Для запуска командной строки вы можете легко решить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