之前文章中已经说过Jacob在windows2003环境下使用的时候会出现UnsatisfiedLinkError错误,解决的方法是需要下载Redistributable Package安装即可。
但如果在JavaEE项目中使用Jacob的时候还会出现另外一个UnsatisfiedLinkError错误:jacob.dll already loaded in another classloader,错误往往会出现在Web容器重启之后。后来查到下面的相关资料:
Java API表明:JVM只允许一个默认的ClassLoader来load native library,同时并不提供专门的API来unload一个loaded native library,因此无法在我们的重启Web应用的代码中来手工清除已经load的jacob。
原因找到了,这是因为在重启Web容器的时候并不会自动结束上一次对dll的加载,解决问题的关键在于重启Web程序之后要确保不要再次加载jacob.jar包,有一个方法就是不要将jacob.jar包放在web程序中,而是将jacob.jar包放在Web容积自身的lib目录下面就可以了。