2016-03-09 129 views
3

對於我當前的AEM 6.0項目,我需要創建自定義工作流程來創建演繹。正在與其他AEM項目共享平臺。這就是我們爲什麼不允許修改原始DAMUpdateAsset工作流程(其中呈現AEM特定呈現,縮略圖等)的原因。AEM CQ等待工作流程完成

我的自定義呈現工作流呈現不同的呈現。問題是,當我的工作流程與DAMUpdateAsset工作流程並行運行時,有時我會收回像IllegalOakState這樣的異常。

我需要的是一個解決方案,等待我的工作流程,直到DAMUpdateAsset工作流程完成。

目前,我試圖讓與橡樹查詢

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()); 
} 

我不認爲這是一個最佳的解決方案做了,我想會有解決這個問題更簡單的方法。

希望你瞭解我的問題是什麼,也許可以幫助我解決這個問題。

謝謝你的好意;)

回答

1

您可以創建一個工作流啓動,它會自動調用上修改節點類型CQ節點的事件您的工作流程:工作流程和路徑/etc/workflow/instances(/.*)。 並且條件是status = COMPLETED modeleid =/etc/workflow/models/dam/update_asset/jcr:content/model,您可能需要試驗哪種條件具有最佳性能。

由於在啓動器中只允許有一個條件,您需要檢查流程實施中的一個條件並繼續或中止。

0

我們意識到解決此問題的最佳方法是讓plattform admin在包含自定義工作流程的DamUpdateAsset工作流程末尾添加容器步驟。在自定義工作流程中,我們檢查有效負載,只在其正確的內容執行我們的步驟。現在所有其他解決方案將帶有多線程問題