【发布时间】:2011-08-30 17:42:52
【问题描述】:
我正在使用一个使用 JBPM 3.1 和 MySQL 的应用程序。核心问题是,有些流程实例的变量包含旧版本的外部非 JBPM Serializable 类。当主应用程序升级时,这些流程实例会导致 JBPM 抛出异常,因为主应用程序中特定类实例的 SUID 已更改。
我相信我有一种方法可以使用以下描述的技术来修复反序列化过程:
How to deserialize an object persisted in a db now when the object has different serialVersionUID
但是,我的问题是找出 MySQL JBPM 中存储流程实例变量的位置,因此我可以编写一个程序,该程序可以对所有实例的所有变量进行交互,重新序列化变量,以便有问题的类将具有新的 SUID,因此 JBPM 可以针对流程进行操作。
我最初查看 JBPM 表时,似乎 JBPM_BYTEARRAY 和/或 JBPM_BYTEBLOCK 可能是要操作的表。但是,我不确定如何进行。我猜每个流程变量都存储在一个包装容器类中。那堂课是org.jbpm.context.exe.VariableInstance吗?还是别的什么?
我想如果我在类路径中有正确的 jar 文件,并且我知道 JBPM 用于在 MySQL 中存储流程变量的主类实例是什么,我可以反序列化该类(这将解决 SUID 问题嵌入式问题类实例),并重新序列化该类。由于 JBPM 文档确实提到了有关转换器的内容,因此我不确定是否必须复制 JPBM 在反序列化时执行的转换过程,或者标准 java 反序列化是否足够。
【问题讨论】: