0

在 AEM CQ 中,我使用资产管理器 api 在 dam 中编写内容(上传的图像)。这会触发开箱即用的 Dam Update Asset 工作流程。我需要阅读工作流完成后将写入可用的演绎版和资产属性。我的问题是如何等到工作流程完成才能读取资产属性而不是 thread.sleep。

我尝试在资产属性存在时使用递归函数调用进行迭代。这给出了空指针异常。但是当我在迭代中放置一个 50 毫秒的 thread.sleep 时,它对我有用。

另一种方法我试图让服务中的工作流对象读取工作流状态,但发现在写入内容后启动 ootb 工作流需要几毫秒。这里还得给thread.sleep。

又一次尝试使用事件处理程序来监听工作流事件。我们可以在工作流程完成时输入事件类型。如何通知服务或 jsp 工作流已完成并且我们可以读取资产属性和演绎版?

如果有人可以分享他们对该方法的建议反馈,那就太好了。谢谢你。

4

1 回答 1

1

你有错误的方法来解决这个问题。在我看来,您对此有两个合理的解决方案。

创建工作流程过程/步骤并使用您的自定义步骤扩展大坝更新资产工作流程

或者

例如,创建JCR 观察侦听器并侦听Event.PROPERTY_ADDED或使用更高的 sling API 并创建具有适当主题的事件处理程序,然后在添加或更改您查找的属性后立即执行您的业务逻辑。

为什么不使用 Thread.sleep() 或其他类似的解决方案

  • 您不知道工作流何时被准确执行。如果上传了许多资产或只是卡住了,它可能会延迟
  • 你不能保证你的线程将能够执行它的逻辑。例如,实例可能会停止
  • 为每个上传的资源创建一个新的线程可能是一项昂贵的任务。当您创建无限循环并使这些线程进入睡眠状态时,您还会浪费资源,而不是唤醒它们并一次又一次地检查......等等,直到最终线程能够完成它的工作
于 2017-02-10T11:48:57.530 回答