Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AEM CQ等待工作流完成_Java_Workflow_Aem_Wait - Fatal编程技术网

Java AEM CQ等待工作流完成

Java AEM CQ等待工作流完成,java,workflow,aem,wait,Java,Workflow,Aem,Wait,对于我当前的AEM 6.0项目,我需要创建自定义工作流来创建格式副本。与其他AEM项目在共享平台上工作。这就是为什么我们不允许修改原始DAMUpdateAsset工作流(该工作流呈现AEM特定的格式副本、缩略图等)的原因 我的自定义格式副本工作流呈现不同的格式副本。问题是,当我的工作流与DAMUpdateAsset工作流并行运行时,有时我会遇到诸如IllegalOakState之类的异常 我需要的是一个解决方案,等待我的工作流,直到DAMUpdateAsset工作流完成 目前,我正试图通过oak

对于我当前的AEM 6.0项目,我需要创建自定义工作流来创建格式副本。与其他AEM项目在共享平台上工作。这就是为什么我们不允许修改原始DAMUpdateAsset工作流(该工作流呈现AEM特定的格式副本、缩略图等)的原因

我的自定义格式副本工作流呈现不同的格式副本。问题是,当我的工作流与DAMUpdateAsset工作流并行运行时,有时我会遇到诸如IllegalOakState之类的异常

我需要的是一个解决方案,等待我的工作流,直到DAMUpdateAsset工作流完成

目前,我正试图通过oak查询来完成这项工作

public static final String QUERY_STRING = "SELECT * FROM [nt:base] AS s WHERE ISDESCENDANTNODE([/etc/workflow/instances]) and CONTAINS('status', 'COMPLETED') and contains('modelId', '/etc/workflow/models/dam/update_asset/jcr:content/model') and [data/payload/path]='%s' and endTime > CAST('%s' AS DATE)";
private void waitForDamUpdateImage(Session session, String path) throws WorkflowException, InterruptedException
{
    final DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.GERMAN);
    final Date now = new Date();
    final Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date(now.getTime() - 2 * 60 * 1000));

    String queryString = String.format(QUERY_STRING, path, formatter.format(calendar.getTime()));

    Iterator iterator;

    do
    {
        //wait(100); this wait will produce IllegalMonitor... Exception
        iterator = QueryUtils.query(session, queryString);
    }
    while (!iterator.hasNext());
}
我不认为这是一个最佳的解决方案,我认为会有一个更容易的方法来解决这个问题

希望你知道我的问题是什么,也许能帮我解决这个问题


无论如何,谢谢你;)

您可以创建一个工作流启动器,当节点类型为cq:workflow和path/etc/workflow/instances(/.*)的节点被修改时,该启动器将自动调用您的工作流。 条件是status=COMPLETEDmodeleid=/etc/workflow/models/dam/update\u asset/jcr:content/model,您可能需要试验哪个条件具有最佳性能


由于launcher中只允许一个条件,您需要在流程实现中检查其中一个条件,然后继续或中止。

我们意识到解决此问题的最佳方法是要求平台管理员在包含自定义工作流的DamUpdateAsset工作流的末尾添加容器步骤。在自定义工作流中,我们检查有效负载,以仅执行步骤(如果内容正确)。到目前为止,所有其他的解决方案都会带来多线程问题