我们试图从SUSE 11 (java-1_7_0-ibm)运行一个进程(broker),它连接到部署在另一台Linux机器上的Javaspace黑板(JINI)。(CentOs与开放JDK“1.7.0_05-冰茶”版本)
Stack Trace :
INFO: Starting broker
Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.J9VMInternals.initialize(J9VMInternals.java:259)
at net.jini.jeri.BasicInvocationHandler.invokeRemoteMethod(BasicInvocationHandler.java:653)
at net.jini.jeri.BasicInvocationHandler.invoke(BasicInvocationHandler.java:528)
at com.sun.jini.reggie.$Proxy0.lookup(Unknown Source)
at com.sun.jini.reggie.RegistrarProxy.lookup(RegistrarProxy.java:128)
at edu.vt.ndssl.blackboard.JiniSpaceService.findSpace(JiniSpaceService.java:372)
at edu.vt.ndssl.blackboard.JiniSpaceService.<init>(JiniSpaceService.java:74)
at edu.vt.ndssl.blackboard.JavaSpaceBlackboard.<init>(JavaSpaceBlackboard.java:31)
at edu.vt.ndssl.blackboard.BlackboardFactory.make(BlackboardFactory.java:28)
at edu.vt.ndssl.broker.Broker.<init>(Broker.java:53)
at edu.vt.ndssl.broker.Broker.main(Broker.java:231)
Caused by: java.lang.RuntimeException: Unexpected exception
at com.sun.jini.logging.Levels.createLevel(Levels.java:142)
at com.sun.jini.logging.Levels.<clinit>(Levels.java:52)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:237)
... 10 more
Caused by: java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2667)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1387)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2059)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1984)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1867)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1419)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:420)
at com.sun.jini.logging.Levels.createLevel(Levels.java:138)
... 13 more同样的代码也适用于26版本的Java1.6版本。我希望在上安装一个正确的Java版本,它将与此操作系统兼容,也相当于Oracle 5或Open版本1.7.0_05 (iced茶)。
发布于 2014-06-22 00:47:59
显然,造成此问题的根本原因是Oracle对com.sun.jini.logging.Levels类的序列化格式进行了不兼容的更改。据报道,这一变化发生在Oracle 1.6.0_38和JDK 1.7.0_13中,而且据推测,它也被纳入了最近的OpenJDK版本。
这个问题体现在使用JINI的各种项目中。示例:
通过搜索"com.sun.jini.logging.Levels EOFException“可以找到更多的示例。
我不能说对你来说解决方案是什么,但我有几个想法:
回避:我认为如果您不将应用程序网络中的前后JVM版本混合在一起,就可以避免这个问题。
如果需要升级应用程序JVM,我建议您全部升级,然后对JINI应用程序和服务进行完全关闭/重新启动。
修复您的应用程序:看来Apache项目通过修改JINI代码解决了问题。正如发行票所说:
com.sun.jini.logging.Levels类使用最新版本的RuntimeException ( 1.6和1.7)生成RuntimeException。这个问题涉及自定义java.util.logging.Level的创建。当前的实现使用ClassReplacingObjectOutputStream和LevelData方法。通过删除此方法并创建java.util.logging.Level的子类,问题将得到解决。
发行票对实现这一目标的最佳方法进行了大量讨论,提出了补丁,并链接到他们实际实现修复的签入。
https://stackoverflow.com/questions/24342263
复制相似问题