JBoss5 で 2 つのアプリを実行しています。
それらは互いにデータを送信します。Serializable
を変更せずに、クラスの 1 つにフィールドを追加しましたserialVersionUID
。このクラスは、 Java シリアライゼーション ルールに従って下位互換性があります。
私が直面している問題は、あるアプリから別のアプリに EJB 呼び出しを介して送信しようとするたびに、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 でのみ動作すると思います)。