我写了一个消息驱动BEAN,承继了MessageDrivenBean, MessageListener,在这个BEAN中,有调用本地DLL的行为。非常奇怪的是,最近经常会发生java.lang.UnsatisfiedLinkError: Native Library C:\WINDOWS\a.dll already loaded in another classloader.的事情发生,原来的版本就没事。我仔细想了想两个版本的区别,发现唯一改过的地方就是我根据Eclipse的警告,在这个消息驱动BEAN中加入了
private static final long serialVersionUID = -7525128318033925048L;请问这个作法是导致上面异常的主要原因吗?

解决方案 »

  1.   

     一、将含有JNI调用的jar包部署在Web服务器的公用lib库中。Web应用再发布时可以不用加载;
    (比如: 你新建一个应用时,首先将含有System.loadLibrary(*.dll)的java文件导出成jar文件,将其放入的tomcat/bin 或 jdk/bin目录下,然后将发布后生成的含有System.loadLibrary的.class文件删除掉就可以了)
     二、jar包部署不变,在该Web中实现一个listener,监听是否第一次启动,若不是第一次启动,屏蔽掉该 jar包所含dll的加载。
      

  2.   

    可是原来一切正常的,想来想去,现在就是在消息驱动BEAN里多加了一行 private static final long serialVersionUID = -7525128318033925048L; 现在只是想知道是不是因为这个引起的呢?
      

  3.   

    我在用swt时遇到过相同的异常,当时报错的原因是已经有一个程序再用这个library了,把运行的这个停止就可以运行新的程序了.你可以看一下进程中的应用程序,
      

  4.   

    serialVersionUID 只是用来表明类的不同版本间的兼容性
      

  5.   

    顶,应该不是这个原因。你去掉了这行再试。
    可能还是环境问题,比如jdk版本之类
      

  6.   

    呵呵,主要是哥们有晚上工作的习惯,正好那段时间可以自己掌握,绝对不是什么工作狂人,呵呵。
    如果不是这个原因,那可就奇了怪了,现在用的就是老版本,一切正常,由于数据量较大,瞬间可能会接受数10条的数据,一点问题也没有。新版本除了加了那句话,改了点业务上的问题之外,调用DLL这块从未有什么变化啊?太奇怪了只能再观察观察了。