Biblioteca nativa sqljdbc_auth.dll ya cargada en otro cargador de clases

Tengo 2 aplicaciones web java que necesitan conectarse a la base de datos de SQL Server con la Autenticación integrada de Windows.

El primero que se carga funciona bien, pero el segundo arroja la excepción:

Native Library sqljdbc_auth.dll already loaded in another classloader 

El error anterior se produce cuando coloco el sqljdbc_auth.dll en una de las carpetas:

  • C: \ WINDOWS \ system32 \
  • C: \ Archivos de progtwig \ Apache Software Foundation \ Tomcat 7.0 \ bin \

Si coloco el sqljdbc_auth.dll en una de las siguientes carpetas:

  • / WEB-INF / lib directorio de cada aplicación web
  • C: \ Archivos de progtwig \ Apache Software Foundation \ Tomcat 7.0 \ lib \

Ambas aplicaciones lanzan la excepción:

 Failed to load the sqljdbc_auth.dll cause :- no sqljdbc_auth in java.library.path 

Estoy usando este código para cargar el controlador:

 Class.forName("jdbc:sqlserver://;databaseName=;integratedSecurity=true;"); 

¿Cómo puedo resolverlo?

Cada aplicación web tiene su propio Classloader (aislarlos). Cuando llamas al método Class.forName (), hay un bloque estático que intenta cargar la biblioteca compartida (archivo dll), por lo tanto, ambas aplicaciones web intentan cargar la biblioteca compartida, de ahí el mensaje de error cuando aparece la segunda. intenta cargar

El jar JDBC que tiene para sqlserver debe moverse de ser incluido con sus guerras, a la carpeta tomcat 7.0/lib y copiar el sqljdbc_auth.dll a la carpeta tomcat / bin – de esta manera estará en el cargador de clases padre tomcat, y la clase solo se cargará una vez

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

Creo que estás en el camino correcto.

Para el inicio de línea de comando, puede resolver fácilmente el problema sin sqljdbc_auth en java.library.path estableciendo la variable de entorno

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

Si está ejecutando tomcat como un servicio, cambie el parámetro Opciones bajo

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

para incluir:

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

El mismo error ocurre en Jasper Studio.

Probablemente no sea la mejor solución, pero coloque el archivo sqljdbc4.jar en C: \ Archivos de progtwig (x86) \ TIBCO \ Jaspersoft Studio-6.1.0.final \ features \ jre.win32.win32.x86.feature_1.7.0.u80 \ jre \ lib \ ext y sqljdbc_auth.dll en C: \ Archivos de progtwig (x86) \ TIBCO \ Jaspersoft Studio-6.1.0.final \ features \ jre.win32.win32.x86.feature_1.7.0.u80 \ jre \ bin

Y funcionará.