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:
Si je place le sqljdbc_auth.dll dans l’un des dossiers ci-dessous:
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?
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 |
|----------------------------------|
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
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.