【问题标题】:Encountered activationStatus has been modified externally when publishing发布时遇到activationStatus已被外部修改
【发布时间】:2016-12-13 15:11:20
【问题描述】:

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

这是抛出的错误。

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)

有没有人遇到过类似的问题?或者知道从哪里看这个问题?

谢谢! :)

【问题讨论】:

  • 我假设您正在使用异步命令,因此一个可能会更改其状态,直到另一个处理此情况。如果您以编程方式执行此操作,我建议您尝试在两者之间设置一些 Thread.sleep() 时间是否有帮助。如果问题确实是时间问题,我们可以做一些事情,比如在操作完成时进行监听等。
  • 嗨@Ducaz035,这个命令是异步的吗?我正在执行这个: Command cmd = ((CommandsManager) Components.getComponent(CommandsManager.class)).getCommand("", "activate");上下文 ctx = new SimpleContext();映射参数 = new HashMap(); params.put("repository", workspaceName); params.put("uuid", uuid); params.put("递归", true); ctx.putAll(参数); cmd.execute(ctx);
  • 另外,我不太明白到底发生了什么?为什么activationStatus在外部修改?只有一个作者实例,除了这个作者实例之外,没有人接触公共实例。你能帮忙解释一下这可能发生的情况吗?非常感谢!
  • 请问哪个版本?
  • @JenSze 澄清一下:您是否更新节点并直接尝试发布它们?我假设节点的更新会改变发布状态(它应该),然后你就有问题了。

标签: magnolia


【解决方案1】:

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

潜在解决方案:

1) 您可以简单地给第一个操作一些时间来完成并在之后执行第二个操作。

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

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

【讨论】:

  • 好的,谢谢!我会尝试第一个。谢谢! :)
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多