我的使用替代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中的实现。
任何想法如何解决此问题?
最后,我找到了一种解决方法,该解决方法不适用于当前使用的OpenORB,但不适用于JacORB(3.4)。
Oracle显然更新了发行说明,建议仅配置该org.omg.CORBA.ORBClass
属性,而忽略org.omg.CORBA.ORBSingletonClass
该特性,这意味着将使用Java附带的默认单例实现,该实现对于SystemClassLoader是可见的。
这可能不适用于所有ORB,实际上它不适用于OpenORB,因为它会进行检查,org.omg.CORBA.ORBSingletonClass
但是我的应用程序现在可以正常运行上述提到的JacORB版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句