发布时遇到activationStatus已被外部修改

Encountered activationStatus has been modified externally when publishing

我正在对多个节点进行更新,然后使用命令 "Activate" 以编程方式发布节点进行批量发布(大量数据),但有时我不知道为什么我会得到一个有时会出错。到目前为止它只发生过几次,所以我发现很难弄清楚是什么导致了这个问题。

这是抛出的错误。

Caused by: org.apache.jackrabbit.core.state.StaleItemStateException: 8b3ce2d4-eb7b-4838-901c-413aa9eeee84/{http://www.magnolia.info/jcr/mgnl}activationStatus has been modified externally
    at org.apache.jackrabbit.core.ItemSaveOperation.removeTransientItems(ItemSaveOperation.java:723)
    at org.apache.jackrabbit.core.ItemSaveOperation.perform(ItemSaveOperation.java:228)

有没有人遇到过类似的问题?或者知道在哪里查看此问题?

谢谢! :)

基本上更新操作在内部导致 Magnolia 修改激活状态(这是正确的)。当此操作正在进行时,更新操作将接管并尝试更改状态。在这种情况下,如果你运气不好,你可能会遇到你得到的异常。推理是那些命令 运行 异步但触及相同的节点。

可能的解决方案:

1)您可以简单地给第一个操作一些时间完成,然后再执行第二个操作。

2) 这需要一些开发工作,但我们开始吧:

您可以使用 LockManager 锁定第一个操作使用的节点,并在操作完成后解锁。同时,第二个操作将检查节点是否被锁定,如果是,则不会继续,而是等到它从第一个进程解锁。