[jbpm-commits] JBoss JBPM SVN: r6095 - in jbpm4/trunk/modules: bpmn/src/main/java/org/jbpm/bpmn/parser and 2 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Tue Jan 19 10:47:59 EST 2010
Author: jbarrez
Date: 2010-01-19 10:47:58 -0500 (Tue, 19 Jan 2010)
New Revision: 6095
Added:
jbpm4/trunk/modules/devguide/src/main/docbook/en/images/bpmn2.conditional.sequence.flow.png
Modified:
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractGatewayBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnActivity.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ExclusiveGatewayActivity.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/InclusiveGatewayActivity.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ManualTaskBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ReceiveBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ScriptTaskBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ServiceTaskBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/TaskBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/UserTaskBinding.java
jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BpmnParser.java
jbpm4/trunk/modules/devguide/src/main/docbook/en/modules/ch03-Bpmn2.xml
Log:
JBPM-2756: allow default/conditional sequence flow on task/activities
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractGatewayBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractGatewayBinding.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractGatewayBinding.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -54,8 +54,6 @@
protected String gatewayDirection;
protected boolean valid = true;
- protected String default_;
-
static ObjectBinding objectBinding = new ObjectBinding();
static WireParser wireParser = WireParser.getInstance();
@@ -71,14 +69,11 @@
resetMemberFields();
+ super.parse(element, parse);
+
id = element.getAttribute("id");
name = element.getAttribute("name");
- this.default_ = null;
- if (element.hasAttribute("default")) {
- default_ = element.getAttribute("default");
- }
-
// 'gatewayDirection' is a constraint on any gateway type.
// Since this is an optional attribute, we can't rely on it at runtime.
// As such, it is only used at parsing time to check if the constraints are met.
@@ -137,7 +132,7 @@
}
/**
- * For some gateway types (exclusive/inclusive), conditions are required on every outgoing
+ * For some gateway types (eg. exclusive), conditions are required on every outgoing
* sequence flow. This operation will check if all sequence flow (excluding the default
* sequence flow) have such a condition defined.
*
@@ -168,11 +163,11 @@
}
- if (default_ != null && !defaultExists) {
- parse.addProblem("exclusiveGateway '" + name + "' default sequenceFlow '" + default_
- + "' does not exist or is not related to this node", element);
- valid = false;
- }
+ if (default_ != null && !defaultExists) {
+ parse.addProblem("exclusiveGateway '" + name + "' default sequenceFlow '" + default_
+ + "' does not exist or is not related to this node", element);
+ valid = false;
+ }
}
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -28,7 +28,10 @@
}
public Object parse(Element element, Parse parse, Parser parser) {
- return new ManualTaskActivity();
+ super.parse(element, parse);
+ ManualTaskActivity manualTaskActivity = new ManualTaskActivity();
+ manualTaskActivity.setDefault(getDefault());
+ return manualTaskActivity;
}
protected void addActivityResources(TaskDefinitionImpl taskDefinition, BpmnActivity taskActivity, Element element, Parse parse) {
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnActivity.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnActivity.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnActivity.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -27,12 +27,12 @@
import java.util.Map;
import org.jbpm.api.Execution;
+import org.jbpm.api.JbpmException;
import org.jbpm.api.activity.ActivityBehaviour;
import org.jbpm.internal.log.Log;
import org.jbpm.pvm.internal.model.Activity;
import org.jbpm.pvm.internal.model.Condition;
import org.jbpm.pvm.internal.model.ExecutionImpl;
-import org.jbpm.pvm.internal.model.ExpressionCondition;
import org.jbpm.pvm.internal.model.Transition;
/**
@@ -44,7 +44,7 @@
*/
public abstract class BpmnActivity implements ActivityBehaviour {
- private static final Log log = Log.getLog(BpmnActivity.class.getName());
+ private static final Log LOG = Log.getLog(BpmnActivity.class.getName());
private static final long serialVersionUID = 1L;
@@ -60,16 +60,16 @@
* Code initially based on the JPDL fork logic.
*/
protected void proceed(ExecutionImpl execution, List<Transition> transitions) {
- if (log.isDebugEnabled()) {
- log.debug("Proceeding from execution " + execution.getActivityName());
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Proceeding from execution " + execution.getActivityName());
}
Activity activity = execution.getActivity();
// if no outgoing transitions should be forked,
if (transitions.size() == 0) {
- if (log.isDebugEnabled()) {
- log.debug("No outgoing transitions found. Ending the execution");
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("No outgoing transitions found. Ending the execution");
}
execution.end();
}
@@ -113,9 +113,6 @@
/**
* Returns the list of outgoing sequence flow for this activity.
* If the boolean 'checkConditions' is true, conditions on the sequence flow will be evaluated.
- *
- * Note that for activities that have a default sequence flow (eg Exclusive gateway),
- * the default sequence flow will NOT be included in the returned list.
*/
protected List<Transition> findOutgoingSequenceFlow(ExecutionImpl execution, boolean checkConditions) {
Activity activity = execution.getActivity();
@@ -125,18 +122,32 @@
for (Transition transition : outgoingTransitions) {
Condition condition = transition.getCondition();
- if ( ( (condition == null)
- || (!checkConditions)
- || (condition.evaluate(execution))
- )
- && (activity.getDefaultOutgoingTransition() != transition)
- ) {
+ if ( ( (condition == null) || (!checkConditions) || (condition.evaluate(execution)) )
+ && (activity.getDefaultOutgoingTransition() != transition) ) {
forkingTransitions.add(transition);
}
}
- if (log.isDebugEnabled()) {
- log.debug(forkingTransitions.size() + " out of " + outgoingTransitions.size() + " selected for " + activity.getName());
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug(forkingTransitions.size() + " out of " + outgoingTransitions.size() + " selected for " + activity.getName());
}
+
+ // If no outgoing sequence flow found, check if there is a default sequence flow
+ if (forkingTransitions.isEmpty() && isDefaultEnabled()) {
+ Transition defaultSeqFlow = execution.getActivity().getDefaultOutgoingTransition();
+ if (defaultSeqFlow != null) {
+ forkingTransitions.add(defaultSeqFlow);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Selected default sequence flow for " + execution.getActivityName());
+ }
+ } else {
+ throw new JbpmException("No sequence flow condition evaluated to true for " +
+ execution.getActivityName() + " and no default sequenceFlow was speficied");
+ }
+ } else if (forkingTransitions.isEmpty()){
+ throw new JbpmException("No outgoing sequence flow found for " + execution.getActivityName());
+ }
+
return forkingTransitions;
}
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnBinding.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/BpmnBinding.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -24,57 +24,28 @@
import org.jbpm.bpmn.parser.BpmnParser;
import org.jbpm.pvm.internal.util.TagBinding;
import org.jbpm.pvm.internal.wire.xml.WireParser;
+import org.jbpm.pvm.internal.xml.Parse;
+import org.w3c.dom.Element;
+public abstract class BpmnBinding extends TagBinding {
+ protected static final WireParser wireParser = BpmnParser.wireParser;
-public abstract class BpmnBinding extends TagBinding {
+ protected String default_;
- protected static final WireParser wireParser = BpmnParser.wireParser;
+ public BpmnBinding(String tagName) {
+ super(tagName, "http://schema.omg.org/spec/BPMN/2.0", null);
+ }
- public BpmnBinding(String tagName) {
- super(tagName, "http://schema.omg.org/spec/BPMN/2.0", null);
- }
-//
-// public void parseName(Element element, ActivityImpl activity, Parse parse) {
-// String name = XmlUtil.attribute(element, "name", isNameRequired(), parse);
-//
-// if (name!=null) {
-// // basic name validation
-// if ("".equals(name)) {
-// parse.addProblem(XmlUtil.errorMessageAttribute(element, "name", name, "is empty"), element);
-// } else if (name.indexOf('/')!=-1) {
-// parse.addProblem(XmlUtil.errorMessageAttribute(element, "name", name, "contains slash (/)"), element);
-// }
-// activity.setName(name);
-// }
-// }
-//
-// public boolean isNameRequired() {
-// return true;
-// }
-//
-// public void parseTransitions(Element element, ActivityImpl activity, Parse parse, JpdlParser jpdlParser) {
-// List<Element> transitionElements = XmlUtil.elements(element, "transition");
-// UnresolvedTransitions unresolvedTransitions = parse.findObject(UnresolvedTransitions.class);
-// for (Element transitionElement: transitionElements) {
-// String transitionName = XmlUtil.attribute(transitionElement, "name", false, parse);
-//
-// Element timerElement = XmlUtil.element(transitionElement, "timer");
-// if (timerElement!=null) {
-// if (transitionName!=null) {
-// TimerDefinitionImpl timerDefinitionImpl = jpdlParser.parseTimerDefinition(timerElement, parse, activity);
-// timerDefinitionImpl.setSignalName(transitionName);
-// } else {
-// parse.addProblem("a transition name is required when a timer is placed on a transition", element);
-// }
-// }
-//
-// TransitionImpl transition = activity.createOutgoingTransition();
-// transition.setName(transitionName);
-//
-// unresolvedTransitions.add(transition, transitionElement);
-//
-// jpdlParser.parseOnEvent(transitionElement, parse, transition, Event.TAKE);
-// }
-// }
+ public void parse(Element element, Parse parse) {
+ this.default_ = null;
+ if (element.hasAttribute("default")) {
+ default_ = element.getAttribute("default");
+ }
+ }
+
+ public String getDefault() {
+ return default_;
+ }
+
}
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ExclusiveGatewayActivity.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ExclusiveGatewayActivity.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ExclusiveGatewayActivity.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -23,7 +23,6 @@
import java.util.List;
-import org.jbpm.api.JbpmException;
import org.jbpm.api.activity.ActivityExecution;
import org.jbpm.bpmn.parser.BindingsParser;
import org.jbpm.internal.log.Log;
@@ -54,15 +53,7 @@
List<Transition> transitions = findOutgoingSequenceFlow(execution, CONDITIONS_CHECKED);
int numTransitions = transitions.size();
- if (numTransitions == 0) {
- Transition defaultTransition = execution.getActivity().getDefaultOutgoingTransition();
- if (defaultTransition != null) {
- transitions.add(defaultTransition);
- } else {
- throw new JbpmException("No sequenceFlow condition evaluated to true for " +
- execution.getActivity() + " and no default sequenceFlow was speficied");
- }
- } else if (numTransitions > 2) {
+ if (numTransitions > 2) {
transitions = transitions.subList(0, 0);
if (log.isInfoEnabled()) {
log.info("More than one outgoing sequenceFlow conditions evaluated to true for "
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/InclusiveGatewayActivity.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/InclusiveGatewayActivity.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/InclusiveGatewayActivity.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -22,13 +22,9 @@
package org.jbpm.bpmn.flownodes;
import java.util.Collection;
-import java.util.List;
-import org.jbpm.api.JbpmException;
import org.jbpm.bpmn.model.BpmnProcessDefinition;
-import org.jbpm.internal.log.Log;
import org.jbpm.pvm.internal.model.ExecutionImpl;
-import org.jbpm.pvm.internal.model.Transition;
/**
* @author Joram Barrez
@@ -37,22 +33,8 @@
private static final long serialVersionUID = 1L;
- private static final Log LOG = Log.getLog(InclusiveGatewayActivity.class.getName());
-
- public void fork(ExecutionImpl execution) {
- List<Transition> outgoingSeqFlow = findOutgoingSequenceFlow(execution, CONDITIONS_CHECKED);
-
- if (outgoingSeqFlow.isEmpty()) {
- Transition defaultSeqFlow = execution.getActivity().getDefaultOutgoingTransition();
- if (defaultSeqFlow != null) {
- outgoingSeqFlow.add(defaultSeqFlow);
- } else {
- throw new JbpmException("No sequenceFlow condition evaluated to true for " +
- execution.getActivity() + " and no default sequenceFlow was speficied");
- }
- }
-
- proceed(execution, outgoingSeqFlow);
+ public void fork(ExecutionImpl execution) {
+ proceed(execution, findOutgoingSequenceFlow(execution, CONDITIONS_CHECKED));
}
/**
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ManualTaskBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ManualTaskBinding.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ManualTaskBinding.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -35,7 +35,10 @@
}
public Object parse(Element element, Parse parse, Parser parser) {
- return new ManualTaskActivity();
+ super.parse(element, parse);
+ ManualTaskActivity manualTaskActivity = new ManualTaskActivity();
+ manualTaskActivity.setDefault(getDefault());
+ return manualTaskActivity;
}
}
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ReceiveBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ReceiveBinding.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ReceiveBinding.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -33,7 +33,10 @@
}
public Object parse(Element element, Parse parse, Parser parser) {
- return new ReceiveActivity();
+ super.parse(element, parse);
+ ReceiveActivity receiveActivity = new ReceiveActivity();
+ receiveActivity.setDefault(getDefault());
+ return receiveActivity;
}
}
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ScriptTaskBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ScriptTaskBinding.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ScriptTaskBinding.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -35,13 +35,15 @@
}
public Object parse(Element element, Parse parse, Parser parser) {
-
+ super.parse(element, parse);
+
String scriptLanguage = XmlUtil.attribute(element, "scriptLanguage");
String script = XmlUtil.element(element, "script").getTextContent();
ScriptTaskActivity scriptTaskActivity = new ScriptTaskActivity();
scriptTaskActivity.setLanguage(scriptLanguage);
scriptTaskActivity.setScript(script);
+ scriptTaskActivity.setDefault(getDefault());
return scriptTaskActivity;
}
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ServiceTaskBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ServiceTaskBinding.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/ServiceTaskBinding.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -33,7 +33,6 @@
import org.jbpm.pvm.internal.xml.Parser;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
public class ServiceTaskBinding extends BpmnBinding {
@@ -44,6 +43,7 @@
}
public Object parse(Element element, Parse parse, Parser parser) {
+ super.parse(element, parse);
JavaServiceTaskActivity javaActivity = new JavaServiceTaskActivity();
BpmnProcessDefinition bpmnProcessDefinition = parse.contextStackFind(BpmnProcessDefinition.class);
@@ -91,6 +91,8 @@
} else {
// parse.addProblem("no target specified in "+TAG+": must specify attribute 'class' or 'expr'", element);
}
+
+ javaActivity.setDefault(getDefault());
return javaActivity;
}
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/TaskBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/TaskBinding.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/TaskBinding.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -38,11 +38,13 @@
}
public Object parse(Element element, Parse parse, Parser parser) {
+ super.parse(element, parse);
TaskActivity taskActivity = new TaskActivity();
ScopeElementImpl scopeElement = parse.contextStackFind(ScopeElementImpl.class);
TaskDefinitionImpl taskDefinition = BpmnParser.parseTaskDefinition(element, parse, scopeElement);
taskActivity.setTaskDefinition(taskDefinition);
+ taskActivity.setDefault(getDefault());
return taskActivity;
}
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/UserTaskBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/UserTaskBinding.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/UserTaskBinding.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -21,7 +21,6 @@
*/
package org.jbpm.bpmn.flownodes;
-import org.jbpm.bpmn.model.BpmnProcessDefinition;
import org.jbpm.bpmn.parser.BpmnParser;
import org.jbpm.pvm.internal.model.ScopeElementImpl;
import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
@@ -43,6 +42,7 @@
}
public Object parse(Element element, Parse parse, Parser parser) {
+ super.parse(element, parse);
UserTaskActivity taskActivity = new UserTaskActivity();
ScopeElementImpl scopeElement = parse.contextStackFind(ScopeElementImpl.class);
@@ -57,6 +57,7 @@
}
taskActivity.setTaskDefinition(taskDefinition);
+ taskActivity.setDefault(getDefault());
return taskActivity;
}
Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BpmnParser.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BpmnParser.java 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/parser/BpmnParser.java 2010-01-19 15:47:58 UTC (rev 6095)
@@ -103,7 +103,7 @@
try {
// process attribues
- String name = XmlUtil.attribute(processElement, "name", true, parse);
+ String name = XmlUtil.attribute(processElement, "name", false, parse);
processDefinition.setName(name);
String key = XmlUtil.attribute(processElement, "id", false, parse);
Added: jbpm4/trunk/modules/devguide/src/main/docbook/en/images/bpmn2.conditional.sequence.flow.png
===================================================================
(Binary files differ)
Property changes on: jbpm4/trunk/modules/devguide/src/main/docbook/en/images/bpmn2.conditional.sequence.flow.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: jbpm4/trunk/modules/devguide/src/main/docbook/en/modules/ch03-Bpmn2.xml
===================================================================
--- jbpm4/trunk/modules/devguide/src/main/docbook/en/modules/ch03-Bpmn2.xml 2010-01-19 14:05:07 UTC (rev 6094)
+++ jbpm4/trunk/modules/devguide/src/main/docbook/en/modules/ch03-Bpmn2.xml 2010-01-19 15:47:58 UTC (rev 6095)
@@ -426,7 +426,9 @@
</programlisting>
Note that is currently is necessary to add the <emphasis role="bold">
xsi:type="tFormalExpression"</emphasis> to the <emphasis role="bold">
- conditionExpression</emphasis>. This can change in a future release.
+ conditionExpression</emphasis>. A conditional sequence flow is visualized as a mini diamond
+ shape at the beginning of the sequence flow. Keep in mind that conditions always can be defined
+ on sequence flow, but some constructs will not interprete them (eg. parallel gateway).
</para>
<para>
More information about the jbpm-commits
mailing list