web-dev-qa-db-fra.com

Bibliothèque native sqljdbc_auth.dll déjà chargée dans un autre chargeur de classe

J'ai 2 applications Web Java qui doivent se connecter à la base de données SQL Server à l'aide de l'authentification intégrée de Windows.

Le premier qui est chargé fonctionne bien, mais le second lève l'exception:

Native Library sqljdbc_auth.dll already loaded in another classloader

L'erreur ci-dessus se produit lorsque je place le fichier sqljdbc_auth.dll dans l'un des dossiers:

  • C:\WINDOWS\system32 \
  • C:\Programmes\Apache Software Foundation\Tomcat 7.0\bin \

Si je place le sqljdbc_auth.dll dans l’un des dossiers ci-dessous:

  • Répertoire/WEB-INF/lib de chaque application Web
  • C:\Programmes\Apache Software Foundation\Tomcat 7.0\lib \

Les deux applications jettent l'exception:

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

J'utilise ce code pour charger le pilote:

Class.forName("jdbc:sqlserver://<Host>;databaseName=<DBNAME>;integratedSecurity=true;");

Comment puis-je le résoudre?

20
Gustavo

Chaque application Web a son propre chargeur de classe (en l'isolant). Lorsque vous appelez la méthode Class.forName (), un bloc statique tente de charger la bibliothèque partagée (fichier dll). Par conséquent, vos applications Web tentent de charger la bibliothèque partagée. Par conséquent, le message d'erreur suivant s'affiche. tente de charger.

Le fichier JDBC que vous avez pour sqlserver doit être transféré de votre fichier wars vers le dossier Tomcat 7.0/lib et copier le fichier sqljdbc_auth.dll dans le dossier Tomcat/bin - de cette façon, il sera dans le chargeur de classes parent Tomcat et la classe ne sera que chargé une fois.

|----------------------------------|
| sqljdbc*.jar     --> Tomcat*/lib |
|----------------------------------|
| sqljdbc_auth.dll --> Tomcat*/bin |
|----------------------------------|
29
Chris White

Je crois que tu es sur le bon chemin. 

Pour le démarrage en ligne de commande, vous pouvez facilement résoudre le problème no sqljdbc_auth dans Java.library.path issue en définissant la variable d'environnement.

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

Si vous exécutez Tomcat en tant que service, modifiez le paramètre Options sous 

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

inclure: 

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

La même erreur se produit dans Jasper Studio.

Probablement pas la meilleure solution mais placez sqljdbc4.jar dans C:\Program Files (x86)\TIBCO\Jaspersoft Studio-6.1.0.final\features\jre.win32.win32.feature_1.7.0.u80\jre\lib\ext et sqljdbc_auth.dll dans C:\Program Files (x86)\TIBCO\Jaspersoft Studio-6.1.0.final\features\jre.win32.win32.x86.feature_1.7.0.u80\jre\bin

Et ça va marcher.

0
shailendra sharma