Workflow 如何等待dam更新资产工作流完成,而不是线程点睡眠

Workflow 如何等待dam更新资产工作流完成,而不是线程点睡眠,workflow,aem,wait,dam,Workflow,Aem,Wait,Dam,在AEM CQ中,我使用asset manager api在dam中写入内容(上传的图像)。这将触发现成的Dam更新资源工作流。我需要阅读工作流完成后可用的格式副本和资产属性。 我的问题是,如何等到工作流完成后再读取资产属性,而不是thread.sleep 当资产属性存在时,我尝试使用递归函数调用进行迭代。这导致空指针异常。但是当我在迭代中加入一个50毫秒的thread.sleep时,它对我来说是有效的 另一种方法是,我试图让服务中的工作流对象读取工作流状态,但发现在内容写入后,ootb工作流需

在AEM CQ中,我使用asset manager api在dam中写入内容(上传的图像)。这将触发现成的Dam更新资源工作流。我需要阅读工作流完成后可用的格式副本和资产属性。 我的问题是,如何等到工作流完成后再读取资产属性,而不是thread.sleep

当资产属性存在时,我尝试使用递归函数调用进行迭代。这导致空指针异常。但是当我在迭代中加入一个50毫秒的thread.sleep时,它对我来说是有效的

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

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


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

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

使用自定义步骤创建和扩展Dam更新资源工作流

例如,创建并侦听
事件。添加的属性
,或者使用更高的sling API并使用适当的主题进行创建,然后在添加或更改所查找的属性后立即执行业务逻辑

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

  • 您不知道工作流何时准确执行。可能是 如果上传了许多ASSET或只是卡住了,则延迟
  • 你不能保证你的线程能够执行它的 逻辑。例如,可以停止该实例
  • 为每个上传的资源创建一个新的趋势可能是一项昂贵的任务。当您创建无限循环并使这些线程处于睡眠状态,而不是唤醒它们并反复检查时,您也会浪费资源。。。以此类推,直到线程最终能够完成它的任务

感谢您提供的ans。我得到了您解释的读取持久化数据的方法。但仍然不确定,它将如何适应我的问题。我有一个使用htmlsmartimage xtype的图像组件,在其渲染脚本中,我使用asset manager api在dam中写入内容(使用浏览选项上载的图像),以便创建其格式副本。然后在image.jsp中读取此格式副本,以使lighbox正常工作。使用建议的方法,现在我的问题是如何在不中断流的情况下将控制从image.jsp转移到jcr侦听器并返回到jsp。请帮助我理解这一点。使用listener/handler选项,您不必等待或与image.jsp同步,只要其他数据(如属性)可用,您就可以编写数据。另一方面,通过工作流过程步骤,您可以确保在提取元数据或创建格式副本后立即执行逻辑。writeContentToDam服务是从image.jsp调用的,它触发dam更新资产工作流(工作流将写入资产属性和格式副本)。jsp中的下一步是读取资产属性和格式副本。但问题是ootb工作流被触发时有轻微的毫秒延迟,而且完成也需要一些时间。看起来我跟不上你。你所说的“我在写内容”到底是什么意思。请扩展或修改您的问题以使其足够清晰,也许还可以提供一个示例或流程图。我正在使用asset manager api以编程方式将图像上载到dam,以便由ootb工作流创建其格式副本。由于使用“浏览”选项上载的图像仅存储为带有二进制文件的对话框属性,因此我们没有其格式副本。工作流完成后,即可使用格式副本,并可在后续行中读取,以提供图像灯箱的url。所有这些编码都是在自定义图像组件的image.jsp中使用xtype htmlsmartimage完成的。工作流需要时间来启动和完成。在阅读之前,如何确保属性可用