使用相同dll的两个web服务 - 已在另一个类加载器

时间:2018-06-11 00:02:26

标签: java eclipse web-services shared-libraries static-classes

我有两个java Web服务,每个都创建一个相同静态类的实例(使用下面显示的lazy实例化的单例),使用System.LoadLibrary()加载几个dll。在运行时,实例化该类的第一个Web服务能够成功加载库。第一个服务激活第二个服务。当第二个Web服务尝试实例化同一个类时,它会获得异常" java.lang.UnsatisfiedLinkError:Native Library xxx.dll已经加载到另一个类加载器中#34;。当我在Eclipse中调试第二个类实例化时,我检查应该保存第一个实例的私有类实例成员。调试器指示它不为null,因此它应该返回并跳过延迟实例化。但是,(_instance!= null)的测试失败,它再次实例化该类,从而导致错误。

private static volatile SimServiceBone _instance;

public static SimServiceBone getInstance(String[] args, boolean fileBasedTasks) {
    if (_instance != null) {
        return _instance;
    }
    synchronized (SimServiceBone.class) {
        if (_instance == null) {
            _instance = new SimServiceBone(args, fileBasedTasks);
        }
    }
    return _instance;
}

private SimServiceBone(String[] args, boolean fileBasedTasks) {
    super("SimfiniBone", fileBasedTasks, args);
    initService(R().getString("Monitor_bone"), args); // LOADS DLLS
}

我已经阅读了很多关于这种情况的文章,他们都谈到将共享类的jar文件的副本放入Tomcat安装的sharedlibs文件夹中。但是,我还没有将应用程序部署到Tomcat。我仍在使用Eclipse中的Tomcat集成进行开发和调试。

包含两个Web服务共享的类的项目在两个Web服务中都列为Web部署程序集。

Eclipse中是否有一些设置指示要在两个Web服务之间共享一个特定的类,以便只加载一次库,或者我应该做些什么来避免这种冲突?

0 个答案:

没有答案