CORBA / Web Start应用程序不再适用于Java 7u55

时间:2014-04-25 14:50:27

标签: java-7 java-web-start corba

使用替代ORB实现(OpenORB)的我的CORBA / Webstart应用程序不再适用于Java7u55。

发生以下异常:

Error org.omg.CORBA.INITIALIZE: can't instantiate default ORB implementation org.openorb.CORBA.ORBSingleton  vmcid: 0x0  minor code: 0  completed: No
org.omg.CORBA.INITIALIZE: can't instantiate default ORB implementation org.openorb.CORBA.ORBSingleton  vmcid: 0x0  minor code: 0  completed: No
    at org.omg.CORBA.ORB.create_impl_with_systemclassloader(Unknown Source)
    at org.omg.CORBA.ORB.init(Unknown Source)
    at org.openorb.CORBA.kernel.OpenORBLoader.init(Unknown Source)
    at org.openorb.CORBA.ORB.set_parameters(Unknown Source)
    at org.omg.CORBA.ORB.init(Unknown Source)
        ...
Caused by: java.lang.ClassNotFoundException: org.openorb.CORBA.ORBSingleton
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    ... 17 more

我认为orb.omg.CORBA.ORB.init()中的更改是ORB实现的类不再被发现的原因,因为此处使用SystemClassLoader来创建ORB实例而不是当前的Thread&像以前一样使用ContextClassLoader。

作为一种解决方法,我已经复制了包含ORB实现的org.omg.CORBA API的Jar,我使用<jre-home>/lib/endorsed/期望它将被替代使用,但仍然在rt中实现使用.jar。

有任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

最后,我发现了一种解决方法,它不适用于当前使用的OpenORB,但适用于JacORB(3.4)。

Oracle明显更新了发行说明,建议仅配置org.omg.CORBA.ORBClass属性,但要忽略org.omg.CORBA.ORBSingletonClass,这意味着将使用Java附带的默认单例实现,这对SystemClassLoader是可见的。

这可能不适用于所有ORB,事实上它不能用于检查org.omg.CORBA.ORBSingletonClass的OpenORB,但我的应用程序现在可以正常使用上述版本的JacORB。

答案 1 :(得分:0)

应该有几种解决方法:

  1. 在启动应用时指定以下VM args:-Djava.endorsed.dirs = / path / to / your / corba_library_jars_folder

  2. 在启动应用时指定以下VM args: -Xbootclasspath / P:/path/to/your/corba_lib.jar:/path/to/your/corba_lib2.jar:...

  3. 将您的罐子复制到$ JAVA_HOME / jre / lib / endorsed目录中(如果它不存在则创建它)