Axon Framework事件包重构



我有一组事件已重构到另一个包中。在我执行事件回放之前,此操作一直保持原样。深入挖掘后,我注意到domainevententry表中有一个payloadtype,并认为更改它就足够了,但遗憾的是,事件的xml根元素似乎也需要更改。我希望有一个简单的方法来做到这一点。

我找不到任何关于向不同包升级或使用XStream别名的示例,因此任何帮助都将不胜感激。

感谢

正如您所注意到的,存储在事件中的默认负载类型是完全限定的类名。这样可以确保开箱即用的序列化和反序列化按预期工作。然而,移动类意味着无法再找到有效载荷类型,需要进行一些调整。

您本可以使用《参考指南》中提到的EventTypeUpcasterEventTypeUpcaster专用于调整有效载荷类型,因此也可用于处理更改的包名称。

当使用(默认(XStreamSerializer时,混淆标记确实也会起作用。例如,可以在这里看到如何设置别名。正如在该示例中注意到的那样,别名被添加到XStream实例中。XStreamSerializer使用XStream实例来支持从/到XML的反序列化。要调整XStream实例,您可以简单地在XStreamSerializer上使用构建器范例。构建器的JavaDoc应该足够具体,以帮助您了解如何使用它

在这方面做了很长的努力,但似乎奏效了。和往常一样,在执行大量更改之前备份数据库。完成后,我还使用数据库重新启动了服务。不用说,在下次部署之前,我会确保事件在逻辑包中:(

数据库引擎:Postgres 10

:域事件条目

update domainevententry
set
payloadtype = '<new.package.Classname>',
payload = lo_from_bytea(0, decode(REPLACE(
subquery.output,
'<old.package.Classname>',
'<new.package.Classname>'
), 'escape'))
from (
SELECT eventidentifier, payloadtype, encode(lo_get(payload::oid), 'escape') as output FROM domainevententry
WHERE eventidentifier in (
'<event guid 1>',
'<event guid 2>'
)
AND payloadtype = '<old.package.Classname>'
) as subquery
where domainevententry.eventidentifier = subquery.eventidentifier;

一旦完成,我需要更新大对象的所有者:

ALTER LARGE OBJECT <LargeObjectId> OWNER TO database_role;

可能不是最优雅的解决方案,但基于我的时间限制,它完成了任务。对于大对象,这个解决方案可能存在编码问题,但最终对我来说一切都解决了。请随意分享任何可以使上述内容更合适的优化。

发射Axon框架回放重建了投影,一切都安排好了。

最新更新