对于我当前的 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 和路径/etc/workflow/instances(/.*) 修改节点事件时自动调用您的工作流。 并且条件是 status=COMPLETED 或 modeleid=/etc/workflow/models/dam/update_asset/jcr:content/model,您可能需要试验哪种条件具有最佳性能。
由于启动器中只允许一个条件,您需要在流程实现中检查其中一个条件并继续或中止。
关于java - AEM CQ 等待工作流完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35887104/