Oracle JDK更新5(1.7.0_05)不适用于SUSE Linux Enterprise Server 11。连接到Javaspace黑板(JINI)时出现EOFEException

Oracle JDK更新5(1.7.0_05)不适用于SUSE Linux Enterprise Server 11。连接到Javaspace黑板(JINI)时出现EOFEException,java,linux,oracle,Java,Linux,Oracle,我们正在尝试从SUSE Linux企业服务器11(java-1_7_0-ibm)运行一个进程(代理),该服务器连接到另一台Linux机器上部署的Javaspace黑板(JINI)。(带有开放JDK“1.7.0_05-icedtea”版本的CentOs) 堆栈跟踪: 信息:启动代理 线程“main”java.lang.ExceptionInInitializeError中出现异常 在java.lang.J9VMInternals.initialize(J9VMInternals.java:259)

我们正在尝试从SUSE Linux企业服务器11(java-1_7_0-ibm)运行一个进程(代理),该服务器连接到另一台Linux机器上部署的Javaspace黑板(JINI)。(带有开放JDK“1.7.0_05-icedtea”版本的CentOs)

堆栈跟踪:
信息:启动代理
线程“main”java.lang.ExceptionInInitializeError中出现异常
在java.lang.J9VMInternals.initialize(J9VMInternals.java:259)中
在net.jini.jeri.BasicInvocationHandler.invokeRemoteMethod(BasicInvocationHandler.java:653)
在net.jini.jeri.BasicInvocationHandler.invoke(BasicInvocationHandler.java:528)
位于com.sun.jini.reggie.$Proxy0.lookup(未知源)
在com.sun.jini.reggie.registerproxy.lookup(registerproxy.java:128)上
在edu.vt.ndssl.blackboard.JiniSpaceService.findSpace(JiniSpaceService.java:372)
在edu.vt.ndssl.blackboard.JiniSpaceService。(JiniSpaceService.java:74)
在edu.vt.ndssl.blackboard.JavaSpaceBlackboard.(JavaSpaceBlackboard.java:31)
在edu.vt.ndssl.blackboard.BlackboardFactory.make(BlackboardFactory.java:28)
位于edu.vt.ndssl.broker.broker.(broker.java:53)
位于edu.vt.ndssl.broker.broker.main(broker.java:231)
原因:java.lang.RuntimeException:意外异常
位于com.sun.jini.logging.Levels.createLevel(Levels.java:142)
位于com.sun.jini.logging.Levels。(Levels.java:52)
位于java.lang.J9VMInternals.initializeImpl(本机方法)
在java.lang.J9VMInternals.initialize(J9VMInternals.java:237)中
... 10多
原因:java.io.EOFException
位于java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2667)
位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1387)
位于java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2059)
位于java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1984)
位于java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1867)
位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1419)
位于java.io.ObjectInputStream.readObject(ObjectInputStream.java:420)
位于com.sun.jini.logging.Levels.createLevel(Levels.java:138)
... 还有13个
同样的代码适用于高达26的Java1.6版本。
我正在寻找一个正确版本的Java安装在SUSE Linux Enterprise Server上,它将与此操作系统兼容,并且与Oracle JDK Update 5或Open JDK version 1.7.0_05(icedtea)等效

显然,问题的根本原因是Oracle对
com.sun.jini.logging.Levels
类的序列化格式进行了不兼容的更改。据报道,这一变化发生在OracleJDK1.6.0_38和JDK1.7.0_13中,并且可能也出现在最新的OpenJDK版本中

这个问题已经在使用JINI的各种项目中表现出来。示例:

  • +
搜索“com.sun.jini.logging.Levels EOFEException”可以找到更多示例


我不能说你的解决方案是什么,但我有几个想法:

避免:我认为如果不在应用程序网络中混合使用变更前和变更后的JVM版本,就可以避免这个问题

如果需要升级应用程序JVM,我建议您升级所有JVM,然后完全关闭/重新启动JINI应用程序和服务

修复您的应用程序:看来Apache River项目通过修改JINI代码解决了这个问题。正如政府所说:

com.sun.jini.logging.Levels类使用最新版本的Java(1.6和1.7)生成RuntimeException。问题围绕着自定义java.util.logging.Level的创建。当前实现使用ClassReplacingObjectOutputStream和LevelData方法。通过删除此方法并创建java.util.logging.Level的子类,问题得到了解决


对于最好的解决方法、建议的修补程序以及实际实施修复的签入链接进行了大量讨论。

这些产品中是否存在与此修复相关的已知缺陷?
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