<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: process terminated event? in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/process-terminated-event/m-p/93992#M64350</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Looks good. That is exactly the use case why we added the bpmn parse listeners.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 30 Oct 2012 06:23:33 GMT</pubDate>
    <dc:creator>jbarrez</dc:creator>
    <dc:date>2012-10-30T06:23:33Z</dc:date>
    <item>
      <title>process terminated event?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/process-terminated-event/m-p/93989#M64347</link>
      <description>Is there a way I can register an event handler with the process engine to get called whenever a process finishes?Currently I'm awkwardly polling the HistoryService for a given process ID to determine that a process finished.Thanks!-Max</description>
      <pubDate>Sat, 27 Oct 2012 00:37:06 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/process-terminated-event/m-p/93989#M64347</guid>
      <dc:creator>m2spring</dc:creator>
      <dc:date>2012-10-27T00:37:06Z</dc:date>
    </item>
    <item>
      <title>Re: process terminated event?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/process-terminated-event/m-p/93990#M64348</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Look at &lt;/SPAN&gt;&lt;A href="http://activiti.org/userguide/index.html#executionListeners" rel="nofollow noopener noreferrer"&gt;http://activiti.org/userguide/index.html#executionListeners&lt;/A&gt;&lt;SPAN&gt;. You can easily add this to your BPMN file and allow any of your code to be run, once the process has been finished:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;lt;process id="executionListenersProcess"&amp;gt;&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;extensionElements&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;activiti:executionListener class="org.activiti.examples.RecordProcessFinishedListener" event="end" /&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/extensionElements&amp;gt;&lt;BR /&gt;&lt;/CODE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 29 Oct 2012 10:55:52 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/process-terminated-event/m-p/93990#M64348</guid>
      <dc:creator>frederikherema1</dc:creator>
      <dc:date>2012-10-29T10:55:52Z</dc:date>
    </item>
    <item>
      <title>Re: process terminated event?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/process-terminated-event/m-p/93991#M64349</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Frederik, thank you for your response.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;While I still find it kind of awkward to having to manipulate the BPMN DOM at BPMN load time just to get my listener injected, I got it now working.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I've got a helper which attaches the BPMN parse listener to the engine:&lt;/SPAN&gt;&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt;class JenkowEngine{&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static ProcessEngine getEngine(){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (engine == null){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; …&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClassLoader peCL = JenkowEngine.class.getClassLoader();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.currentThread().setContextClassLoader(peCL);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProcessEngineConfigurationImpl peCfg = (ProcessEngineConfigurationImpl)cfg;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;BpmnParseListener&amp;gt; preParseListeners = peCfg.getPreParseListeners();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (preParseListeners == null){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; preParseListeners = new ArrayList&amp;lt;BpmnParseListener&amp;gt;();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; peCfg.setPreParseListeners(preParseListeners);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; preParseListeners.add(new JenkowBpmnParseListener());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cfg.setClassLoader(peCL);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; engine = cfg.buildProcessEngine();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return engine;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;&lt;/CODE&gt;&lt;SPAN&gt;A new method adds the execution listener:&lt;/SPAN&gt;&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt;class JenkowBpmnParseListener extends AbstractBpmnParseListener{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; … &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void parseProcess(Element el, ProcessDefinitionEntity processDefinition) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; processDefinition.addExecutionListener("end",new ProcessExecLogger(el.attribute("id")));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;&lt;/CODE&gt;&lt;SPAN&gt;The execution listener itself is the easy part.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(For some reason I'm unable to access the id of the process definition from DelegateExecution, I'm passing this around "by hand" as 'name'.)&lt;/SPAN&gt;&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt;public class ProcessExecLogger implements ExecutionListener{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String name;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProcessExecLogger(String name) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.name = name;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void notify(DelegateExecution exec) throws Exception {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "+name);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("exec.getEventName()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; "+exec.getEventName());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("exec.getId()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; "+exec.getId());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("exec.getProcessBusinessKey() -&amp;gt; "+exec.getProcessBusinessKey());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("exec.getProcessInstanceId()&amp;nbsp; -&amp;gt; "+exec.getProcessInstanceId());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;&lt;/CODE&gt;&lt;SPAN&gt;It works, but does this make sense?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-Max&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 29 Oct 2012 17:16:36 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/process-terminated-event/m-p/93991#M64349</guid>
      <dc:creator>m2spring</dc:creator>
      <dc:date>2012-10-29T17:16:36Z</dc:date>
    </item>
    <item>
      <title>Re: process terminated event?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/process-terminated-event/m-p/93992#M64350</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Looks good. That is exactly the use case why we added the bpmn parse listeners.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 30 Oct 2012 06:23:33 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/process-terminated-event/m-p/93992#M64350</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2012-10-30T06:23:33Z</dc:date>
    </item>
  </channel>
</rss>

