シリアル化を多用する本番システムがあります。基本的に行うことは、ProcessDataというオブジェクトをバイト配列としてjbpmデータベースに格納することです。したがって、これはシリアル化されます。
次のオブジェクトについて考えてみます。
public class ProcessData implements Serializable {
private static final long serialVersionUID = -4859440951531011062L;
public void getX() {
//not important
}
}
ここで、このオブジェクトをバイト配列としてJBPMデータベースに格納し、これを本番環境で使用しているとします。
後で、このProcessDataオブジェクトを新しいデータでアップグレードします
public class ProcessData implements Serializable {
private static final long serialVersionUID = -4859440951531011062L;
public void getX() {
//not important
}
public void getY() {
//not important
}
}
old
ここで問題となるのは、JBPMが保存されたProcessDataオブジェクトを
ロードするときに、例外が発生することです。Caused by: java.io.InvalidClassException: my.package.ProcessData; local class incompatible: stream classdesc serialVersionUID = 6651422488035743444, local class serialVersionUID = -7966721901330644987
今私の質問は、どうすればこの問題を解決できるかということです。シリアル化されたオブジェクトを読み取り、この新しいクラスで変換するにはどうすればよいですか。それも可能ですか?JBPMライブラリの制御は制限されていることに注意してください。