<?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 Behavior about the ExclusiveGatewayActivityBehavior in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/behavior-about-the-exclusivegatewayactivitybehavior/m-p/73558#M48022</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi All&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I found very strange behavior when the engine is dealing with the process like the attachment ExclusiveGatewayProcess.png.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[attachment=0]ExclusiveGatewayProcess.png[/attachment]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Which I want to do is that when first execution reach the Exclusive gateway, it trigger the parent execution to went on and destory itself( like the behavior in parallel gateway ), and when the second execution reach the Exclusive gateway, it just destory itself and will not trigger the Exclusive gateway for the second time&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;And I think this should be the correct way to run such process in the BPMN 2.0 standard.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So I added the following code in ExclusiveGatewayActivityBehavior to meet my requirement&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The red one is my code, I want to get some help here is to hear the suggestion from the Activiti Engine Team if my modify is correct or not.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; protected void leave(ActivityExecution execution) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (log.isLoggable(Level.FINE)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log.fine("Leaving activity '" + execution.getActivity().getId() + "'");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PvmTransition outgoingSeqFlow = null;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String defaultSequenceFlow = (String) execution.getActivity().getProperty("default");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Iterator&amp;lt;PvmTransition&amp;gt; transitionIterator = execution.getActivity().getOutgoingTransitions().iterator();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color:#FF0000;"&gt; &lt;STRONG&gt; if(!execution.isProcessInstance()){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//the parent execution should be went on instead of the sub process&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;ActivityExecution parentExecution = execution.getParent();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(parentExecution.isActive()){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.info("Parent execution: " + parentExecution.getId() + " is already active, abort the current execution: " + execution.getId() + " is enough");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;execution.end();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//abort the current execution&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;BR /&gt;&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;else{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log.info("Parent execution: " + parentExecution.getId() + " has been triggered by execution " + execution.getId());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parentExecution.setActive(true);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parentExecution.setConcurrent(false);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;execution.end();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;execution = parentExecution;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (outgoingSeqFlow == null &amp;amp;&amp;amp; transitionIterator.hasNext()) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PvmTransition seqFlow = transitionIterator.next();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Condition condition = (Condition) seqFlow.getProperty(BpmnParse.PROPERTYNAME_CONDITION);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( (condition == null &amp;amp;&amp;amp; (defaultSequenceFlow == null || !defaultSequenceFlow.equals(seqFlow.getId())) ) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; || (condition != null &amp;amp;&amp;amp; condition.evaluate(execution)) ) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (log.isLoggable(Level.FINE)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log.fine("Sequence flow '" + seqFlow.getId() + " '"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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;&amp;nbsp;&amp;nbsp; + "selected as outgoing sequence flow.");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outgoingSeqFlow = seqFlow;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (outgoingSeqFlow != null) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; execution.take(outgoingSeqFlow);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (defaultSequenceFlow != null) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PvmTransition defaultTransition = execution.getActivity().findOutgoingTransition(defaultSequenceFlow);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (defaultTransition != null) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; execution.take(defaultTransition);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ActivitiException("Default sequence flow '" + defaultSequenceFlow + "' not found");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //No sequence flow could be found, not even a default one&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ActivitiException("No outgoing sequence flow of the exclusive gateway '"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; + execution.getActivity().getId() + "' could be selected for continuing the process");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you very much for your help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;With Regards&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 06 Jan 2012 05:27:18 GMT</pubDate>
    <dc:creator>michaelkira</dc:creator>
    <dc:date>2012-01-06T05:27:18Z</dc:date>
    <item>
      <title>Behavior about the ExclusiveGatewayActivityBehavior</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/behavior-about-the-exclusivegatewayactivitybehavior/m-p/73558#M48022</link>
      <description>Hi AllI found very strange behavior when the engine is dealing with the process like the attachment ExclusiveGatewayProcess.png.[attachment=0]ExclusiveGatewayProcess.png[/attachment]Which I want to do is that when first execution reach the Exclusive gateway, it trigger the parent execution to went o</description>
      <pubDate>Fri, 06 Jan 2012 05:27:18 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/behavior-about-the-exclusivegatewayactivitybehavior/m-p/73558#M48022</guid>
      <dc:creator>michaelkira</dc:creator>
      <dc:date>2012-01-06T05:27:18Z</dc:date>
    </item>
    <item>
      <title>Re: Behavior about the ExclusiveGatewayActivityBehavior</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/behavior-about-the-exclusivegatewayactivitybehavior/m-p/73559#M48023</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;No this is not valid BPMN 2.0 with the description you gave.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;When you have a parallel gateway it will produce 2 execution instances.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;When each of these execution instances reach the exclusive gateway they will just proceed from there. There is no joining behaviour.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Maybe the inclusive gateway suites your needs?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards,&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 09 Jan 2012 08:27:06 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/behavior-about-the-exclusivegatewayactivitybehavior/m-p/73559#M48023</guid>
      <dc:creator>trademak</dc:creator>
      <dc:date>2012-01-09T08:27:06Z</dc:date>
    </item>
    <item>
      <title>Re: Behavior about the ExclusiveGatewayActivityBehavior</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/behavior-about-the-exclusivegatewayactivitybehavior/m-p/73560#M48024</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Hi,&lt;BR /&gt;&lt;BR /&gt;No this is not valid BPMN 2.0 with the description you gave.&lt;BR /&gt;When you have a parallel gateway it will produce 2 execution instances.&lt;BR /&gt;When each of these execution instances reach the exclusive gateway they will just proceed from there. There is no joining behaviour.&lt;BR /&gt;Maybe the inclusive gateway suites your needs?&lt;BR /&gt;&lt;BR /&gt;Best regards,&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you very much for your reply.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I think&amp;nbsp; you are totally right about the behaviour since I've found the following definition from the BPMN 2-0 Specification BMI 09-05-03.pdf&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;"A converging Exclusive Gateway is used to merge alternative paths. Each incoming control flow token is&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;routed to the outgoing Sequence Flow without synchronization."&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best Regards&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 11 Jan 2012 02:19:22 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/behavior-about-the-exclusivegatewayactivitybehavior/m-p/73560#M48024</guid>
      <dc:creator>michaelkira</dc:creator>
      <dc:date>2012-01-11T02:19:22Z</dc:date>
    </item>
  </channel>
</rss>

