Biblioteca nativa sqljdbc_auth.dll já carregada em outro carregador de classe
Eu tenho 2 aplicativos da web java que precisam se conectar ao banco de dados do SQL Server usando a autenticação integrada do Windows.
O primeiro que é carregado funciona bem, mas o segundo lança a exceção:
Native Library sqljdbc_auth.dll already loaded in another classloader
O erro acima ocorre quando eu coloco o sqljdbc_auth.dll em uma das pastas:
C: \ WINDOWS \ system32 \ C: \ Arquivos de Programas \ Apache Software Foundation \ Tomcat 7.0 \ bin \ Se eu colocar o sqljdbc_auth.dll em uma das pastas abaixo:/ WEB-INF / lib diretório de cada aplicativo da webC: \ Arquivos de Programas \ Apache Software Foundation \ Tomcat 7.0 \ lib \ Ambos os apps lançam a exceção:
Eu estou usando este código para carregar o driver:Como posso resolver isso?Cada aplicativo da web tem seu próprio Classloader (isolando-os). Quando você chama o método Class.forName (), há um bloco estático que está tentando carregar a biblioteca compartilhada (arquivo dll) - assim, ambos os aplicativos da web estão tentando carregar a biblioteca compartilhada, daí a mensagem de erro quando o segundo tenta carregar.
Failed to load the sqljdbc_auth.dll cause :- no sqljdbc_auth in java.library.path
O jar JDBC que você tem para sqlserver deve ser movido de ser empacotado com suas guerras, para o
Class.forName("jdbc:sqlserver://<HOST>;databaseName=<DBNAME>;integratedSecurity=true;");
pasta e copie o sqljdbc_auth.dll para a pasta tomcat / bin - dessa forma, ele estará no carregador de classes pai do tomcat e a classe será carregada apenas uma vez.