错误:
在Tomcat 项目和supermap iserver war包中使用了相同的supermap java iobject 【四个jar 包】,实际的访问过程如下:
这时候在访问Tomcat的时候,就会出现一个错误:
an exception caught at Environment.loadLibrary(), program will continue running. java.lang.UnsatisfiedLinkError: Native Library D:\supermap-iobjectsjava-10.2.0\objectsjava\bin\WrapjCore.dll already loaded in another classloader
原因:
JVM只允许一个默认的ClassLoader来load native library,并不提供专门的API来unload一个loaded native library,因此无法在我们的重启Web应用的代码中来手工清除已经load的dll,也没有相应的unload native 方法.
解决方法:
将Tomcat引用超图java object的几个jar放到jre安装目录下 /lib/ext或tomcat/lib下, 注意和iserver相同版本号,含小版本号
解决这个问题其实很简单,放到java的systemLoader可以加载的地方,如lib/ext目录下。然后,项目中 仍然去调用此代码。由于访问dll的代码由systemLoader加载,因此,多个项目同时访问同一个dll时,即可避免再次加载了。因为,第二个项目 在访问时,寻找到的类,已经被systemLoader加载过了,因此项目本身的classLoader就不会再去加载这个类了。
标签:lang,supermap,java,dll,报错,loaded,iserver,加载 From: https://www.cnblogs.com/Fooo/p/17574177.html