我在 JBoss5 中运行了 2 个应用程序。
他们互相发送数据。我在其中一个类中添加了一个字段,Serializable
而没有更改serialVersionUID
. 根据Java 序列化规则,此类仍然向后兼容。
我面临的问题是,每当我尝试通过 EJB 调用将 JBoss 从一个应用程序发送到另一个应用程序时,JBoss 都会抛出一个 IOException:
java.io.IOException: Current classpath has lesser fields on com.myproject.MyEntity than its original version
org.jboss.serial.classmetamodel.StreamingClass.readStream(StreamingClass.java:98)
org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:381)
org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
org.jboss.serial.objectmetamodel.DataContainer$DataContainerInput.readObject(DataContainer.java:845)
org.jboss.serial.io.MarshalledObjectForLocalCalls.get(MarshalledObjectForLocalCalls.java:60)
org.jboss.ejb3.remoting.IsLocalInterceptor.invokeLocal(IsLocalInterceptor.java:101)
org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:72)
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
com.sun.proxy.$Proxy881.invoke(Unknown Source)
org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
com.sun.proxy.$Proxy1063.getAlertScheduleForTrip(Unknown Source)
com.myclient.ejb.MyEntityLoadingBean.loadMyEntities(MyEntityLoadingBean.java:256)
...
有什么方法可以告诉 JBoss 避免使用它的序列化模块而使用标准的 Java 序列化?这个错误似乎已知并且在 JBoss JIRA 中已有几年了:https ://issues.jboss.org/browse/JBSER-120
我试过用 JBoss 启动,-Dserialization.jboss=false
但没有用(我认为这可能只适用于 JBoss Cache)。