如何等到大坝更新资产工作流程完成而不是线点休眠

时间:2017-02-09 19:05:51

标签: workflow cq5 wait aem dam

在AEM CQ中,我正在使用资产管理器api来写入大坝中的内容(上传的图像)。这触发了开箱即用的Dam Update Asset工作流程。我需要读取工作流程完成后可以写入的再现和资产属性。 我的问题是如何等到完成工作流程以读取资产属性而不是thread.sleep。

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

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

再次尝试使用事件处理程序来侦听工作流事件。我们可以在完成工作流程时输入事件类型。如何通知服务或jsp工作流程已完成,我们可以阅读资产属性和再现?

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

1 个答案:

答案 0 :(得分:1)

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

创建workflow process/step并使用自定义步骤扩展 Dam更新资产工作流程

创建JCR observation listener并监听Event.PROPERTY_ADDED或使用更高的吊索API,并使用相应的主题创建event handler,然后在您查找的属性后立即执行业务逻辑添加或更改。

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

  • 您不知道工作流程何时完全执行。它可能是 如果许多配置被上传或者被卡住,则会延迟
  • 你无法保证你的线程能够执行它 逻辑。例如,实例可以停止
  • 为上传的每个资源创建新的步骤可能是昂贵的任务。当你创建一个无限循环并让这些线程进入休眠时,你也会浪费资源,而不是唤醒它们并反复检查......等等,直到最终线程能够完成它的工作