我正在使用一个使用 JBPM 3.1 和 MySQL 的应用程序。核心问题是,有些流程实例的变量包含旧版本的外部非 JBPMSerializable
类。当主应用程序升级时,这些流程实例会导致 JBPM 抛出异常,因为主应用程序中特定类实例的 SUID 已更改。
我相信我有一种方法可以使用以下描述的技术来修复反序列化过程:
当对象具有不同的serialVersionUID时,如何反序列化保存在数据库中的对象
但是,我的问题是弄清楚 JBPM 在 MySQL 中存储流程实例变量的位置,因此我可以编写一个程序,该程序可以对所有实例的所有变量进行交互,重新序列化变量,以便有问题的类将具有新的 SUID,因此 JBPM 可以对流程进行操作。
我最初查看 JBPM 表时,似乎 JBPM_BYTEARRAY 和/或 JBPM_BYTEBLOCK 可能是要操作的表。但是,我不确定如何进行。我猜每个流程变量都存储在一个包装容器类中。是那个班org.jbpm.context.exe.VariableInstance
吗?或者是别的什么?
我想如果我在类路径中有正确的 jar 文件,并且我知道 JBPM 用于在 MySQL 中存储流程变量的主类实例是什么,我可以反序列化该类(这将解决嵌入式问题类的 SUID 问题实例),然后重新序列化类。由于 JBPM 文档确实提到了有关转换器的内容,因此我不确定是否必须复制 JPBM 在反序列化时所做的转换过程,或者标准 java 反序列化是否足够。