Bibliothèque natif sqljdbc auth.dll déjà chargé dans un autre classloader

j'ai 2 applications Web java qui ont besoin de se connecter à la base de données SQL Server en utilisant L'authentification intégrée de Windows.

Le premier qui est chargé fonctionne très bien mais le deuxième on jette l'exception:

Native Library sqljdbc_auth.dll already loaded in another classloader

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

  • C:WINDOWSsystem32
  • C:Program fichiersApache Software FoundationTomcat 7.0bin

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

  • /WEB-INF/lib répertoire de chaque application web
  • C:Program fichiersApache Software FoundationTomcat 7.0lib

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?

19
demandé sur rekire 2012-05-17 18:24:00

3 réponses

chaque application web a son propre Classloader (les isolant). Quand tu appelleras la classe.forname () méthode, il y a un bloc statique qui essaye de charger la bibliothèque partagée (fichier dll) - donc vos deux applications web essaient de charger la lib partagée, d'où le message d'erreur lorsque la seconde tente de charger.

le jar JDBC que vous avez pour sqlserver doit être déplacé de l'étape d'être livré avec vos wars, à la tomcat 7.0/lib classez et copiez le sqljdbc_auth.dll vers le dossier tomcat / bin - ceci comme dans le Tomcat parent classloader, et la classe ne sera chargée qu'une seule fois.

|----------------------------------|
| sqljdbc*.jar     --> tomcat*/lib |
|----------------------------------|
| sqljdbc_auth.dll --> tomcat*/bin |
|----------------------------------|
28
répondu Chris White 2015-12-04 22:37:29

je pense que vous êtes sur la bonne voie.

pour le démarrage en ligne de commande, vous pouvez facilement résoudre le pas de sqljdbc_auth en java.bibliothèque.chemin d'accès problème en définissant la variable d'environnement

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

si vous utilisez tomcat comme service, changez le Options paramètre

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

pour inclure:

-Djava.library.path=/path/to/dll
1
répondu pd40 2012-05-18 10:30:30

la même erreur se produit dans Jasper Studio.

probablement pas la meilleure solution mais placez le sqljdbc4.jar in C:\Program fichiers (x86)\TIBCO\Jaspersoft Studio-6.1.0.final\features\jre.win32.win32.x86.feature_1.7.0.u80\jre\lib\ext et les sqljdbc_auth.dll dans C:\Program fichiers (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
répondu shailendra sharma 2016-08-24 06:16:23