JBPM 3.1 と MySQL を使用するアプリケーションを使用しています。中心的な問題は、JBPM 以外の外部Serializable
クラスの古いバージョンを含む変数を持つプロセス インスタンスがあることです。メイン アプリケーションがアップグレードされると、特定のクラス インスタンスの SUID がメイン アプリケーションで変更されたため、これらのプロセス インスタンスによって JBPM によって例外がスローされます。
以下で説明する手法を使用して、逆シリアル化プロセスを修正する方法があると思います。
オブジェクトのserialVersionUIDが異なる場合に、データベースに永続化されたオブジェクトをデシリアライズする方法
ただし、私の問題は、MySQL JBPM がプロセスインスタンス変数を格納する場所を特定することです。そのため、すべてのインスタンスのすべての変数を対話処理し、変数を再シリアル化して、問題のあるクラスが新しい SUID を持つようにするプログラムを作成できるため、JBPM はプロセスに対して操作します。
JBPM テーブルを最初に見たところ、JBPM_BYTEARRAY および/または JBPM_BYTEBLOCK が操作対象のテーブルである可能性があるようです。ただし、どのように進めればよいかわかりません。各プロセス変数はラッピング コンテナー クラスに格納されていると思います。そのクラスorg.jbpm.context.exe.VariableInstance
ですか?それとも別のものですか?
クラスパスに適切なjarファイルがあり、JBPMがプロセス変数をMySQLに格納するために使用するメインクラスインスタンスが何であるかを知っている場合、クラスをデシリアライズできます(これにより、埋め込まれた問題クラスのSUIDの問題が修正されます)インスタンス)、クラスを再シリアル化します。JBPM のドキュメントにはコンバーターに関する記述があるため、デシリアライズ時に JPBM が行う変換プロセスを再現する必要があるのか、それとも標準の Java デシリアライズで十分なのかはわかりません。