Die native Bibliothek sqljdbc_auth.dll wurde bereits in einem anderen Klassenladeprogramm geladen

Ich habe 2 Java-Webanwendungen, die mithilfe der integrierten Windows-Authentifizierung eine Verbindung zur SQL Server-Datenbank herstellen müssen.

Das erste, das geladen wird, funktioniert einwandfrei, aber das zweite löst die Ausnahme aus:

Native Library sqljdbc_auth.dll already loaded in another classloader

Der obige Fehler tritt auf, wenn ich die Datei sqljdbc_auth.dll in einen der folgenden Ordner lege:

C: \ WINDOWS \ system32 \ C: \ Programme \ Apache Software Foundation \ Tomcat 7.0 \ bin \ Wenn ich die sqljdbc_auth.dll in einen der folgenden Ordner lege:/ WEB-INF / lib Verzeichnis jeder Webanwendung

C: \ Programme \ Apache Software Foundation \ Tomcat 7.0 \ lib \ Beide Apps werfen die Ausnahme:

Ich benutze diesen Code, um den Treiber zu laden:Wie kann ich das lösen?

Jede Webanwendung verfügt über einen eigenen Classloader (der sie isoliert). Wenn Sie die Class.forName () -Methode aufrufen, gibt es einen statischen Block, der versucht, die gemeinsam genutzte Bibliothek (DLL-Datei) zu laden. Ihre beiden Web-Apps versuchen also, die gemeinsam genutzte Bibliothek zu laden, daher die Fehlermeldung beim zweiten versucht zu laden.

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

Die JDBC-JAR, die Sie für sqlserver haben, sollte nicht mehr mit Ihren Kriegen gebündelt werden, sondern auf die

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

 Ordner und kopieren Sie die Datei sqljdbc_auth.dll in den Ordner tomcat / bin. Auf diese Weise befindet sie sich im übergeordneten Klassenladeprogramm von tomcat, und die Klasse wird nur einmal geladen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage