JBoss JBPM SVN: r4835 - jbpm3/branches.
by do-not-reply@jboss.org
Author: alex.guizar(a)jboss.com
Date: 2009-05-18 13:21:05 -0400 (Mon, 18 May 2009)
New Revision: 4835
Removed:
jbpm3/branches/aguizar/
jbpm3/branches/tbaeyens/
jbpm3/branches/tdiesler/
Log:
nuke user branches
15 years, 5 months
JBoss JBPM SVN: r4834 - jbpm3/branches.
by do-not-reply@jboss.org
Author: alex.guizar(a)jboss.com
Date: 2009-05-18 13:20:21 -0400 (Mon, 18 May 2009)
New Revision: 4834
Removed:
jbpm3/branches/jbpm-3.2.5.SP4_JBPM-2121/
Log:
drop patch branch - jBPM 3.2.5.SP5 superseded JBPM-2121
15 years, 5 months
JBoss JBPM SVN: r4833 - in jbpm4/trunk/modules: api/src/main/java/org/jbpm/api/history and 12 other directories.
by do-not-reply@jboss.org
Author: tom.baeyens(a)jboss.com
Date: 2009-05-18 12:53:45 -0400 (Mon, 18 May 2009)
New Revision: 4833
Added:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteEventListener.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionEndActivity.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionEndActivityMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionStartActivity.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionStartActivityMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionTake.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionTakeMessage.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/async/
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/async/AsyncBasicsTest.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/HistoryTaskAssigneeTest.java
Removed:
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestination.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransition.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java
Modified:
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityExecution.java
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/history/HistoryActivityInstanceQuery.java
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/model/Activity.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ActivityBuilder.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExceptionHandlerImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/TransitionImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivity.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivityMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/SignalMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/AsyncCommandMessage.java
jbpm4/trunk/modules/pvm/src/main/resources/jbpm.execution.hbm.xml
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/EndProcessInstanceTest.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/ProcessInstanceHistoryTest.java
Log:
JBPM-2256 introducing async continuations
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityExecution.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityExecution.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityExecution.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -23,15 +23,10 @@
import org.jbpm.api.Execution;
import org.jbpm.api.JbpmException;
-import org.jbpm.api.client.ClientProcessDefinition;
-import org.jbpm.api.client.ClientProcessInstance;
-import org.jbpm.api.env.Environment;
import org.jbpm.api.model.Activity;
import org.jbpm.api.model.ObservableElement;
import org.jbpm.api.model.OpenExecution;
import org.jbpm.api.model.Transition;
-import org.jbpm.api.session.PvmDbSession;
-import org.jbpm.api.task.Task;
/** view upon an {@link Execution path of execution} exposed to
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/history/HistoryActivityInstanceQuery.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/history/HistoryActivityInstanceQuery.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/history/HistoryActivityInstanceQuery.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -24,9 +24,7 @@
import java.util.Date;
import java.util.List;
-import org.jbpm.api.task.Task;
-
/**
* @author Tom Baeyens
*/
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/model/Activity.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/model/Activity.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/model/Activity.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -111,17 +111,8 @@
/** indicates if this activity should be executed
* <a href="package-summary.html#asynchronouscontinuations">asynchronously</a>. */
- boolean isExecutionAsync();
+ boolean isAsync();
- /** indicates if signals should be processed
- * <a href="package-summary.html#asynchronouscontinuations">asynchronously</a>. */
- boolean isSignalAsync();
-
- /** indicates if execution should proceed
- * <a href="package-summary.html#asynchronouscontinuations">asynchronously</a>
- * when this activity is left over any of the outgoing transitions. */
- boolean isLeaveAsync();
-
/** indicates if this activity behaviour needs to know
* {@link Execution#getPreviousActivity() the previous activity} or
* {@link Execution#getPreviousTransition() previous transition}.
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -82,6 +82,7 @@
}
TransitionImpl transition = activity.createOutgoingTransition(transitionName);
+
unresolvedTransitions.add(transition, transitionElement);
jpdlParser.parseOnEvent(transitionElement, transition, Event.TAKE, parse);
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -41,6 +41,7 @@
import org.jbpm.pvm.internal.model.ActivityImpl;
import org.jbpm.pvm.internal.model.CompositeElementImpl;
import org.jbpm.pvm.internal.model.EventImpl;
+import org.jbpm.pvm.internal.model.EventListenerReference;
import org.jbpm.pvm.internal.model.ObservableElementImpl;
import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
import org.jbpm.pvm.internal.model.ScopeElementImpl;
@@ -237,7 +238,7 @@
activityBinding.parseTransitions(nestedElement, activity, parse, this);
if (XmlUtil.attributeBoolean(nestedElement, "async", false, parse, Boolean.FALSE)) {
- activity.setExecutionAsync(true);
+ activity.setAsync(true);
}
ActivityBehaviour activityBehaviour = (ActivityBehaviour) activityBinding.parse(nestedElement, parse, this);
@@ -313,7 +314,7 @@
for (Element onElement: onElements) {
String eventName = XmlUtil.attribute(onElement, "event", true, parse);
parseOnEvent(onElement, scopeElement, eventName, parse);
-
+
Element timerElement = XmlUtil.element(onElement, "timer");
if (timerElement!=null) {
TimerDefinitionImpl timerDefinitionImpl = parseTimerDefinition(timerElement, parse, scopeElement);
@@ -329,11 +330,20 @@
event = scopeElement.createEvent(eventName);
}
+ if (XmlUtil.attributeBoolean(element, "async", false, parse, Boolean.FALSE)) {
+ event.setAsync(true);
+ }
+
for (Element eventListenerElement: XmlUtil.elements(element)) {
JpdlBinding eventBinding = (JpdlBinding) getBinding(eventListenerElement, "eventlistener");
if (eventBinding!=null) {
EventListener eventListener = (EventListener) eventBinding.parse(eventListenerElement, parse, this);
- event.createEventListenerReference(eventListener);
+ EventListenerReference eventListenerReference = event.createEventListenerReference(eventListener);
+
+ if (XmlUtil.attributeBoolean(eventListenerElement, "async", false, parse, Boolean.FALSE)) {
+ eventListenerReference.setAsync(true);
+ }
+
} else {
String tagName = XmlUtil.getTagLocalName(eventListenerElement);
if ( ! ( (scopeElement instanceof TransitionImpl)
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ActivityBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ActivityBuilder.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ActivityBuilder.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -97,7 +97,7 @@
}
public ActivityBuilder asyncExecute() {
- activity.setExecutionAsync(true);
+ activity.setAsync(true);
return this;
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -46,9 +46,7 @@
protected ActivityImpl parentActivity;
protected String type;
- protected boolean isExecutionAsync;
- protected boolean isSignalAsync;
- protected boolean isLeaveAsync;
+ protected boolean isAsync;
protected boolean isPreviousNeeded;
protected ActivityCoordinatesImpl coordinates;
@@ -455,24 +453,12 @@
public void setParentActivity(ActivityImpl parentActivity) {
this.parentActivity = parentActivity;
}
- public boolean isExecutionAsync() {
- return isExecutionAsync;
+ public boolean isAsync() {
+ return isAsync;
}
- public boolean isSignalAsync() {
- return isSignalAsync;
+ public void setAsync(boolean isExecutionAsync) {
+ this.isAsync = isExecutionAsync;
}
- public void setSignalAsync(boolean isSignalAsync) {
- this.isSignalAsync = isSignalAsync;
- }
- public void setExecutionAsync(boolean isExecutionAsync) {
- this.isExecutionAsync = isExecutionAsync;
- }
- public boolean isLeaveAsync() {
- return isLeaveAsync;
- }
- public void setLeaveAsync(boolean isLeaveAsync) {
- this.isLeaveAsync = isLeaveAsync;
- }
public boolean isPreviousNeeded() {
return isPreviousNeeded;
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -38,6 +38,7 @@
protected String name;
protected List<EventListenerReference> listenerReferences;
+ protected boolean isAsync;
public String toString() {
return (name != null ? "event(" + name + ")" : "event");
@@ -89,4 +90,10 @@
public void setListenerReferences(List<EventListenerReference> eventListenerReferences) {
this.listenerReferences = eventListenerReferences;
}
+ public boolean isAsync() {
+ return isAsync;
+ }
+ public void setAsync(boolean isAsync) {
+ this.isAsync = isAsync;
+ }
}
\ No newline at end of file
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -32,6 +32,7 @@
/** does this action accept propagated events ? */
boolean isPropagationEnabled = false;
+ boolean isAsync = false;
/** does this action accept propagated events ? Default is false. */
public boolean isPropagationEnabled() {
@@ -42,4 +43,12 @@
public void setPropagationEnabled(boolean isPropagationEnabled) {
this.isPropagationEnabled = isPropagationEnabled;
}
+
+ public boolean isAsync() {
+ return isAsync;
+ }
+
+ public void setAsync(boolean isAsync) {
+ this.isAsync = isAsync;
+ }
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExceptionHandlerImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExceptionHandlerImpl.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExceptionHandlerImpl.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -196,7 +196,7 @@
if (transition!=null) {
log.trace(toString()+" takes transition "+transitionName);
execution.setTransition(transition);
- execution.performAtomicOperationSync(ExecutionImpl.TAKE_TRANSITION);
+ execution.performAtomicOperationSync(ExecutionImpl.TRANSITION_END_ACTIVITY);
} else {
log.info("WARNING: "+toString()+" couldn't find transition "+transitionName+" on "+activity);
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -43,7 +43,6 @@
import org.jbpm.api.cmd.CommandService;
import org.jbpm.api.env.Environment;
import org.jbpm.api.env.Transaction;
-import org.jbpm.api.listener.EventListener;
import org.jbpm.api.listener.EventListenerExecution;
import org.jbpm.api.model.Activity;
import org.jbpm.api.model.Comment;
@@ -66,11 +65,13 @@
import org.jbpm.pvm.internal.job.MessageImpl;
import org.jbpm.pvm.internal.model.op.AtomicOperation;
import org.jbpm.pvm.internal.model.op.ExecuteActivity;
+import org.jbpm.pvm.internal.model.op.ExecuteEventListener;
import org.jbpm.pvm.internal.model.op.MoveToChildActivity;
import org.jbpm.pvm.internal.model.op.MoveToParentActivity;
-import org.jbpm.pvm.internal.model.op.ProceedToDestination;
import org.jbpm.pvm.internal.model.op.Signal;
-import org.jbpm.pvm.internal.model.op.TakeTransition;
+import org.jbpm.pvm.internal.model.op.TransitionEndActivity;
+import org.jbpm.pvm.internal.model.op.TransitionStartActivity;
+import org.jbpm.pvm.internal.model.op.TransitionTake;
import org.jbpm.pvm.internal.util.EqualsUtil;
import org.jbpm.pvm.internal.util.Priority;
@@ -89,10 +90,11 @@
// atomic operations
public static final AtomicOperation EXECUTE_ACTIVITY = new ExecuteActivity();
- public static final AtomicOperation PROCEED_TO_DESTINATION = new ProceedToDestination();
- public static final AtomicOperation TAKE_TRANSITION = new TakeTransition();
+ public static final AtomicOperation TRANSITION_END_ACTIVITY = new TransitionEndActivity();
+ public static final AtomicOperation TRANSITION_TAKE = new TransitionTake();
+ public static final AtomicOperation TRANSITION_START_ACTIVITY = new TransitionStartActivity();
public static final AtomicOperation PROPAGATE_TO_PARENT = new MoveToParentActivity();
-
+
// persistent member fields /////////////////////////////////////////////////
/** an optional name for this execution. can be used to
@@ -386,7 +388,7 @@
if (getActivity()!=null) {
performAtomicOperation(new Signal(signal, parameters, getActivity()));
} else if (transition!=null) {
- performAtomicOperation(ExecutionImpl.PROCEED_TO_DESTINATION);
+ performAtomicOperation(ExecutionImpl.TRANSITION_START_ACTIVITY);
} else {
throw new JbpmException("execution is not in a activity or in a transition");
}
@@ -442,7 +444,7 @@
setTransitionOrigin(getActivity());
setPreviousTransition(null);
- performAtomicOperation(TAKE_TRANSITION);
+ performAtomicOperation(TRANSITION_END_ACTIVITY);
}
public void take(Transition transition, Execution execution) {
@@ -512,12 +514,12 @@
}
}
- public void setActivity(Activity destination, Execution execution) {
- ((ExecutionImpl)execution).setActivity(destination);
+ public void setActivity(Activity activity, Execution execution) {
+ ((ExecutionImpl)execution).setActivity(activity);
}
- public void setActivity(Activity destination) {
- setActivity((ActivityImpl) destination);
+ public void setActivity(Activity activity) {
+ setActivity((ActivityImpl) activity);
}
// execution : internal methods /////////////////////////////////////////////
@@ -633,35 +635,16 @@
/** fires the given event without propagation */
void fire(EventImpl event, ObservableElement eventSource, ObservableElement observableElement) {
- try {
- this.event = event;
- this.eventSource = (ObservableElementImpl) eventSource;
-
- List<EventListenerReference> eventListenerReferences = event.getListenerReferences();
-
- if (eventListenerReferences!=null) {
- for (EventListenerReference eventListenerReference: eventListenerReferences) {
-
- if ( (observableElement.equals(eventSource)) // this event is not propagated
- || (eventListenerReference.isPropagationEnabled()) // propagation is allowed
- ) {
- EventListener eventListener = eventListenerReference.get();
-
- log.trace("executing "+eventListener+" for "+event);
- try {
- // TODO can/should this invocation be unified with the exception handler invocation of the event notification method?
- eventListener.notify(this);
- } catch (Exception e) {
- log.trace("exception during action: "+e);
- handleException((ObservableElementImpl) observableElement, event, eventListenerReference, e, "couldn't run action "+eventListener);
- }
- }
+ List<EventListenerReference> eventListenerReferences = event.getListenerReferences();
+ if (eventListenerReferences!=null) {
+ for (EventListenerReference eventListenerReference: eventListenerReferences) {
+ ExecuteEventListener executeEventListenerOperation = new ExecuteEventListener(eventListenerReference, event, (ObservableElementImpl) eventSource, observableElement);
+ if (eventListenerReference.isAsync()) {
+ sendContinuationMessage(executeEventListenerOperation);
+ } else {
+ executeEventListenerOperation.perform(this);
}
}
-
- } finally {
- this.eventSource = null;
- this.event = null;
}
}
@@ -1203,4 +1186,16 @@
public String getProcessDefinitionId() {
return processDefinitionId;
}
+
+ public boolean hasAsyncEndEvent(List<ActivityImpl> leftActivities) {
+ for (ActivityImpl leftActivity : leftActivities) {
+ EventImpl endEvent = leftActivity.getEvent(Event.END);
+ if ( (endEvent!=null)
+ && (endEvent.isAsync())
+ ) {
+ return true;
+ }
+ }
+ return false;
+ }
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/TransitionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/TransitionImpl.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/TransitionImpl.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -41,7 +41,6 @@
protected ActivityImpl destination;
protected Descriptor conditionDescriptor;
protected Descriptor waitConditionDescriptor;
- protected boolean isTakeAsync;
/* Use one of the ActivityImpl.createOutgoingTransition methods instead. */
TransitionImpl() {
@@ -166,10 +165,4 @@
public void setWaitConditionDescriptor(Descriptor waitConditionDescriptor) {
this.waitConditionDescriptor = waitConditionDescriptor;
}
- public boolean isTakeAsync() {
- return isTakeAsync;
- }
- public void setTakeAsync(boolean isTakeAsync) {
- this.isTakeAsync = isTakeAsync;
- }
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivity.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivity.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivity.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -34,17 +34,17 @@
private static Log log = Log.getLog(ExecuteActivity.class.getName());
public boolean isAsync(ExecutionImpl execution) {
- return execution.getActivity().isExecutionAsync();
+ return execution.getActivity().isAsync();
}
public void perform(ExecutionImpl execution) {
ActivityImpl activity = execution.getActivity();
- if (log.isTraceEnabled()) {
+ if (log.isDebugEnabled()) {
if (execution.getName()!=null) {
- log.trace(execution.toString()+" executes "+activity);
+ log.debug(execution.toString()+" executes "+activity);
} else {
- log.trace("executing "+activity);
+ log.debug("executing "+activity);
}
}
@@ -66,7 +66,7 @@
}
public String toString() {
- return "execute(activity)";
+ return "ExecuteActivity";
}
public MessageImpl<?> createAsyncMessage(ExecutionImpl execution) {
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivityMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivityMessage.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivityMessage.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -53,7 +53,7 @@
}
public String toString() {
- return "execute-activity-message["+dbid+"]";
+ return "ExecuteActivityMessage["+dbid+"]";
}
}
Added: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteEventListener.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteEventListener.java (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteEventListener.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -0,0 +1,91 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.pvm.internal.model.op;
+
+import org.jbpm.api.listener.EventListener;
+import org.jbpm.api.model.ObservableElement;
+import org.jbpm.internal.log.Log;
+import org.jbpm.pvm.internal.job.MessageImpl;
+import org.jbpm.pvm.internal.model.ActivityImpl;
+import org.jbpm.pvm.internal.model.EventImpl;
+import org.jbpm.pvm.internal.model.EventListenerReference;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.model.ObservableElementImpl;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class ExecuteEventListener implements AtomicOperation {
+
+ private static Log log = Log.getLog(ExecuteEventListener.class.getName());
+
+ protected EventListenerReference eventListenerReference;
+ protected EventImpl event;
+ protected ObservableElementImpl eventSource;
+ protected ObservableElement observableElement;
+
+ public ExecuteEventListener(EventListenerReference eventListenerReference, EventImpl event, ObservableElementImpl eventSource, ObservableElement observableElement) {
+ this.eventListenerReference = eventListenerReference;
+ this.event = event;
+ this.eventSource = eventSource;
+ this.observableElement = observableElement;
+ }
+
+ public boolean isAsync(ExecutionImpl execution) {
+ return eventListenerReference.isAsync();
+ }
+
+ public void perform(ExecutionImpl execution) {
+ try {
+ execution.setEvent(event);
+ execution.setEventSource(eventSource);
+
+ if ( (observableElement.equals(eventSource)) // this event is not propagated
+ || (eventListenerReference.isPropagationEnabled()) // propagation is allowed
+ ) {
+ EventListener eventListener = eventListenerReference.get();
+
+ log.trace("executing "+eventListener+" for "+event);
+ try {
+ // TODO can/should this invocation be unified with the exception handler invocation of the event notification method?
+ eventListener.notify(execution);
+ } catch (Exception e) {
+ log.trace("exception during action: "+e);
+ execution.handleException((ObservableElementImpl) observableElement, event, eventListenerReference, e, "couldn't run action "+eventListener);
+ }
+ }
+
+ } finally {
+ execution.setEvent(null);
+ execution.setEventSource(null);
+ }
+ }
+
+ public MessageImpl< ? > createAsyncMessage(ExecutionImpl execution) {
+ return null;
+ }
+
+ public String toString() {
+ return "ExecuteEventListener";
+ }
+}
Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteEventListener.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Deleted: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestination.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestination.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestination.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -1,90 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jbpm.pvm.internal.model.op;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import org.jbpm.pvm.internal.job.MessageImpl;
-import org.jbpm.pvm.internal.model.ExecutionImpl;
-import org.jbpm.pvm.internal.model.ActivityImpl;
-import org.jbpm.pvm.internal.model.ObservableElementImpl;
-
-/**
- * @author Tom Baeyens
- */
-public class ProceedToDestination implements AtomicOperation {
-
- public boolean isAsync(ExecutionImpl execution) {
- return false;
- }
-
- public void perform(ExecutionImpl execution) {
- ActivityImpl destination = execution.getTransition().getDestination();
- execution.setActivity(destination);
- List<ActivityImpl> enteredActivities = getActivitiesEntered(execution.getTransitionOrigin(), destination);
-
- ExecutionImpl propagatingExecution = execution;
- for (ActivityImpl enteredActivity : enteredActivities) {
- propagatingExecution = propagatingExecution.startActivity(enteredActivity);
- }
-
- // Restore original transition source activity
- // (so that the call to moveTo updates the previous activity)
- propagatingExecution.setActivity(execution.getTransitionOrigin());
- propagatingExecution.moveTo(destination);
-
- propagatingExecution.performAtomicOperation(ExecutionImpl.EXECUTE_ACTIVITY);
- }
-
- public List<ActivityImpl> getActivitiesEntered(ActivityImpl origin, ActivityImpl destination) {
- LinkedList<ActivityImpl> activitiesEntered = new LinkedList<ActivityImpl>();
-
- if (origin.equals(destination)) {
- activitiesEntered.add(destination);
-
- } else {
- List<ObservableElementImpl> sourceChain = origin.getParentChain();
-
- if (!sourceChain.contains(destination)) {
- ActivityImpl destinationActivity = destination;
- while ( (destinationActivity!=null)
- && (!sourceChain.contains(destinationActivity))
- ) {
- activitiesEntered.addFirst(destinationActivity);
- destinationActivity = destinationActivity.getParentActivity();
- }
- }
- }
-
- return activitiesEntered;
- }
-
-
- public String toString() {
- return "proceed-to-destination";
- }
-
- public MessageImpl<?> createAsyncMessage(ExecutionImpl execution) {
- return new ProceedToDestinationMessage(execution);
- }
-}
Deleted: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -1,58 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jbpm.pvm.internal.model.op;
-
-import org.jbpm.api.Execution;
-import org.jbpm.api.env.Environment;
-import org.jbpm.pvm.internal.job.MessageImpl;
-import org.jbpm.pvm.internal.jobexecutor.JobDbSession;
-import org.jbpm.pvm.internal.model.ExecutionImpl;
-
-/**
- * @author Tom Baeyens
- */
-public class ProceedToDestinationMessage extends MessageImpl<Object> {
-
- private static final long serialVersionUID = 1L;
-
- public ProceedToDestinationMessage() {
- super();
- }
-
- public ProceedToDestinationMessage(ExecutionImpl execution) {
- super(execution);
- }
-
- public Object execute(Environment environment) throws Exception {
- execution.setState(Execution.STATE_ACTIVE_ROOT);
- execution.performAtomicOperationSync(ExecutionImpl.PROCEED_TO_DESTINATION);
-
- JobDbSession jobDbSession = environment.get(JobDbSession.class);
- jobDbSession.delete(this);
-
- return null;
- }
-
- public String toString() {
- return "proceed-to-destination-message["+dbid+"]";
- }
-}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -49,7 +49,7 @@
}
public boolean isAsync(ExecutionImpl execution) {
- return execution.getActivity().isSignalAsync();
+ return false;
}
public void perform(ExecutionImpl execution) {
@@ -78,7 +78,7 @@
}
public String toString() {
- return "signal(activity)";
+ return "Signal";
}
public MessageImpl<?> createAsyncMessage(ExecutionImpl execution) {
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/SignalMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/SignalMessage.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/SignalMessage.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -60,6 +60,6 @@
}
public String toString() {
- return "signal-transition-message["+dbid+"]";
+ return "SignalMessage["+dbid+"]";
}
}
Deleted: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransition.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransition.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransition.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -1,101 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jbpm.pvm.internal.model.op;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.jbpm.api.model.Condition;
-import org.jbpm.api.model.Event;
-import org.jbpm.internal.log.Log;
-import org.jbpm.pvm.internal.job.MessageImpl;
-import org.jbpm.pvm.internal.model.ExecutionImpl;
-import org.jbpm.pvm.internal.model.ActivityImpl;
-import org.jbpm.pvm.internal.model.ObservableElementImpl;
-import org.jbpm.pvm.internal.model.TransitionImpl;
-
-public class TakeTransition implements AtomicOperation {
-
- private static Log log = Log.getLog(TakeTransition.class.getName());
-
- public boolean isAsync(ExecutionImpl execution) {
- return execution.getActivity().isLeaveAsync() || execution.getTransition().isTakeAsync();
- }
-
- public void perform(ExecutionImpl execution) {
- TransitionImpl transition = execution.getTransition();
-
- if (execution.getName() != null) {
- log.debug(execution.toString() + " takes " + transition);
- } else {
- log.debug("taking " + transition);
- }
-
- List<ActivityImpl> leftActivities = getActivitiesLeft(execution.getActivity(), transition.getDestination());
- ExecutionImpl propagatingExecution = execution;
- for (ActivityImpl leftActivity : leftActivities) {
- propagatingExecution = propagatingExecution.endActivity(leftActivity);
- }
-
- propagatingExecution.setActivity(null);
- propagatingExecution.fire(Event.TAKE, transition);
-
- boolean wait = false;
-
- Condition waitCondition = transition.getWaitCondition();
- if (waitCondition != null) {
- wait = waitCondition.evaluate(propagatingExecution);
- }
-
- if (!wait) {
- propagatingExecution.performAtomicOperation(ExecutionImpl.PROCEED_TO_DESTINATION);
- }
- }
-
- List<ActivityImpl> getActivitiesLeft(ActivityImpl source, ActivityImpl destination) {
- List<ActivityImpl> activitiesLeft = new ArrayList<ActivityImpl>();
-
- if (source.equals(destination)) {
- activitiesLeft.add(source);
- } else {
- List<ObservableElementImpl> destinationChain = destination.getParentChain();
-
- if (!destinationChain.contains(source)) {
- ActivityImpl sourceActivity = source;
- while ((sourceActivity != null) && (!destinationChain.contains(sourceActivity))) {
- activitiesLeft.add(sourceActivity);
- sourceActivity = sourceActivity.getParentActivity();
- }
- }
- }
-
- return activitiesLeft;
- }
-
- public String toString() {
- return "take-transition";
- }
-
- public MessageImpl< ? > createAsyncMessage(ExecutionImpl execution) {
- return new TakeTransitionMessage(execution);
- }
-}
\ No newline at end of file
Deleted: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -1,58 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jbpm.pvm.internal.model.op;
-
-import org.jbpm.api.Execution;
-import org.jbpm.api.env.Environment;
-import org.jbpm.pvm.internal.job.MessageImpl;
-import org.jbpm.pvm.internal.jobexecutor.JobDbSession;
-import org.jbpm.pvm.internal.model.ExecutionImpl;
-
-/**
- * @author Tom Baeyens
- */
-public class TakeTransitionMessage extends MessageImpl<Object> {
-
- private static final long serialVersionUID = 1L;
-
- public TakeTransitionMessage() {
- }
-
- public TakeTransitionMessage(ExecutionImpl execution) {
- super(execution);
- }
-
- public Object execute(Environment environment) throws Exception {
- execution.setState(Execution.STATE_ACTIVE_ROOT);
-
- execution.performAtomicOperationSync(ExecutionImpl.TAKE_TRANSITION);
-
- JobDbSession jobDbSession = environment.get(JobDbSession.class);
- jobDbSession.delete(this);
-
- return null;
- }
-
- public String toString() {
- return "take-transition-message["+dbid+"]";
- }
-}
Copied: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionEndActivity.java (from rev 4830, jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransition.java)
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionEndActivity.java (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionEndActivity.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -0,0 +1,97 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.pvm.internal.model.op;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jbpm.internal.log.Log;
+import org.jbpm.pvm.internal.job.MessageImpl;
+import org.jbpm.pvm.internal.model.ActivityImpl;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.model.ObservableElementImpl;
+import org.jbpm.pvm.internal.model.TransitionImpl;
+
+public class TransitionEndActivity implements AtomicOperation {
+
+ private static final TransitionTake TRANSITION_TAKE = new TransitionTake();
+
+ private static Log log = Log.getLog(TransitionEndActivity.class.getName());
+
+ public boolean isAsync(ExecutionImpl execution) {
+ TransitionImpl transition = execution.getTransition();
+ List<ActivityImpl> leftActivities = getActivitiesLeft(execution.getActivity(), transition.getDestination());
+ return execution.hasAsyncEndEvent(leftActivities);
+ }
+
+ public void perform(ExecutionImpl execution) {
+ TransitionImpl transition = execution.getTransition();
+
+ if (execution.getName() != null) {
+ log.debug(execution.toString() + " takes " + transition);
+ } else {
+ log.debug("taking " + transition);
+ }
+
+ List<ActivityImpl> leftActivities = getActivitiesLeft(execution.getActivity(), transition.getDestination());
+ ExecutionImpl propagatingExecution = endActivity(execution, leftActivities);
+
+ propagatingExecution.performAtomicOperation(TRANSITION_TAKE);
+ }
+
+ public static ExecutionImpl endActivity(ExecutionImpl execution, List<ActivityImpl> leftActivities) {
+ ExecutionImpl propagatingExecution = execution;
+ for (ActivityImpl leftActivity : leftActivities) {
+ propagatingExecution = propagatingExecution.endActivity(leftActivity);
+ }
+ propagatingExecution.setActivity(null);
+ return propagatingExecution;
+ }
+
+ List<ActivityImpl> getActivitiesLeft(ActivityImpl source, ActivityImpl destination) {
+ List<ActivityImpl> activitiesLeft = new ArrayList<ActivityImpl>();
+
+ if (source.equals(destination)) {
+ activitiesLeft.add(source);
+ } else {
+ List<ObservableElementImpl> destinationChain = destination.getParentChain();
+
+ if (!destinationChain.contains(source)) {
+ ActivityImpl sourceActivity = source;
+ while ((sourceActivity != null) && (!destinationChain.contains(sourceActivity))) {
+ activitiesLeft.add(sourceActivity);
+ sourceActivity = sourceActivity.getParentActivity();
+ }
+ }
+ }
+
+ return activitiesLeft;
+ }
+
+ public String toString() {
+ return "TakeTransition";
+ }
+
+ public MessageImpl< ? > createAsyncMessage(ExecutionImpl execution) {
+ return new TransitionEndActivityMessage(execution);
+ }
+}
\ No newline at end of file
Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionEndActivity.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Copied: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionEndActivityMessage.java (from rev 4830, jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java)
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionEndActivityMessage.java (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionEndActivityMessage.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -0,0 +1,58 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.pvm.internal.model.op;
+
+import org.jbpm.api.Execution;
+import org.jbpm.api.env.Environment;
+import org.jbpm.pvm.internal.job.MessageImpl;
+import org.jbpm.pvm.internal.jobexecutor.JobDbSession;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+
+/**
+ * @author Tom Baeyens
+ */
+public class TransitionEndActivityMessage extends MessageImpl<Object> {
+
+ private static final long serialVersionUID = 1L;
+
+ public TransitionEndActivityMessage() {
+ }
+
+ public TransitionEndActivityMessage(ExecutionImpl execution) {
+ super(execution);
+ }
+
+ public Object execute(Environment environment) throws Exception {
+ execution.setState(Execution.STATE_ACTIVE_ROOT);
+
+ execution.performAtomicOperationSync(ExecutionImpl.TRANSITION_END_ACTIVITY);
+
+ JobDbSession jobDbSession = environment.get(JobDbSession.class);
+ jobDbSession.delete(this);
+
+ return null;
+ }
+
+ public String toString() {
+ return "TakeTransitionMessage["+dbid+"]";
+ }
+}
Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionEndActivityMessage.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Copied: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionStartActivity.java (from rev 4830, jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestination.java)
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionStartActivity.java (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionStartActivity.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -0,0 +1,90 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.pvm.internal.model.op;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.jbpm.pvm.internal.job.MessageImpl;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.model.ActivityImpl;
+import org.jbpm.pvm.internal.model.ObservableElementImpl;
+
+/**
+ * @author Tom Baeyens
+ */
+public class TransitionStartActivity implements AtomicOperation {
+
+ public boolean isAsync(ExecutionImpl execution) {
+ return false;
+ }
+
+ public void perform(ExecutionImpl execution) {
+ ActivityImpl destination = execution.getTransition().getDestination();
+ execution.setActivity(destination);
+ List<ActivityImpl> enteredActivities = getActivitiesEntered(execution.getTransitionOrigin(), destination);
+
+ ExecutionImpl propagatingExecution = execution;
+ for (ActivityImpl enteredActivity : enteredActivities) {
+ propagatingExecution = propagatingExecution.startActivity(enteredActivity);
+ }
+
+ // Restore original transition source activity
+ // (so that the call to moveTo updates the previous activity)
+ propagatingExecution.setActivity(execution.getTransitionOrigin());
+ propagatingExecution.moveTo(destination);
+
+ propagatingExecution.performAtomicOperation(ExecutionImpl.EXECUTE_ACTIVITY);
+ }
+
+ public List<ActivityImpl> getActivitiesEntered(ActivityImpl origin, ActivityImpl destination) {
+ LinkedList<ActivityImpl> activitiesEntered = new LinkedList<ActivityImpl>();
+
+ if (origin.equals(destination)) {
+ activitiesEntered.add(destination);
+
+ } else {
+ List<ObservableElementImpl> sourceChain = origin.getParentChain();
+
+ if (!sourceChain.contains(destination)) {
+ ActivityImpl destinationActivity = destination;
+ while ( (destinationActivity!=null)
+ && (!sourceChain.contains(destinationActivity))
+ ) {
+ activitiesEntered.addFirst(destinationActivity);
+ destinationActivity = destinationActivity.getParentActivity();
+ }
+ }
+ }
+
+ return activitiesEntered;
+ }
+
+
+ public String toString() {
+ return "ProceedToDestination";
+ }
+
+ public MessageImpl<?> createAsyncMessage(ExecutionImpl execution) {
+ return new TransitionStartActivityMessage(execution);
+ }
+}
Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionStartActivity.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Copied: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionStartActivityMessage.java (from rev 4830, jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java)
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionStartActivityMessage.java (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionStartActivityMessage.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -0,0 +1,57 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.pvm.internal.model.op;
+
+import org.jbpm.api.Execution;
+import org.jbpm.api.env.Environment;
+import org.jbpm.pvm.internal.job.MessageImpl;
+import org.jbpm.pvm.internal.jobexecutor.JobDbSession;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+
+/**
+ * @author Tom Baeyens
+ */
+public class TransitionStartActivityMessage extends MessageImpl<Object> {
+
+ private static final long serialVersionUID = 1L;
+
+ public TransitionStartActivityMessage() {
+ }
+
+ public TransitionStartActivityMessage(ExecutionImpl execution) {
+ super(execution);
+ }
+
+ public Object execute(Environment environment) throws Exception {
+ execution.setState(Execution.STATE_ACTIVE_ROOT);
+ execution.performAtomicOperationSync(ExecutionImpl.TRANSITION_START_ACTIVITY);
+
+ JobDbSession jobDbSession = environment.get(JobDbSession.class);
+ jobDbSession.delete(this);
+
+ return null;
+ }
+
+ public String toString() {
+ return "ProceedToDestinationMessage["+dbid+"]";
+ }
+}
Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionStartActivityMessage.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionTake.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionTake.java (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionTake.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.pvm.internal.model.op;
+
+import org.jbpm.api.model.Event;
+import org.jbpm.pvm.internal.job.MessageImpl;
+import org.jbpm.pvm.internal.model.EventImpl;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.model.TransitionImpl;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class TransitionTake implements AtomicOperation {
+
+ public boolean isAsync(ExecutionImpl execution) {
+ TransitionImpl transition = execution.getTransition();
+ EventImpl event = transition.getEvent(Event.TAKE);
+ return ((event!=null) && (event.isAsync()));
+ }
+
+ public void perform(ExecutionImpl execution) {
+ TransitionImpl transition = execution.getTransition();
+ execution.fire(Event.TAKE, transition);
+ execution.performAtomicOperation(ExecutionImpl.TRANSITION_START_ACTIVITY);
+ }
+
+ public MessageImpl< ? > createAsyncMessage(ExecutionImpl execution) {
+ return new TransitionTakeMessage(execution);
+ }
+}
Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionTake.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionTakeMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionTakeMessage.java (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionTakeMessage.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -0,0 +1,58 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.pvm.internal.model.op;
+
+import org.jbpm.api.Execution;
+import org.jbpm.api.env.Environment;
+import org.jbpm.pvm.internal.job.MessageImpl;
+import org.jbpm.pvm.internal.jobexecutor.JobDbSession;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class TransitionTakeMessage extends MessageImpl<Object> {
+
+ private static final long serialVersionUID = 1L;
+
+ public TransitionTakeMessage() {
+ }
+
+ public TransitionTakeMessage(ExecutionImpl execution) {
+ super(execution);
+ }
+
+ public Object execute(Environment environment) throws Exception {
+ execution.setState(Execution.STATE_ACTIVE_ROOT);
+ execution.performAtomicOperationSync(ExecutionImpl.TRANSITION_TAKE);
+
+ JobDbSession jobDbSession = environment.get(JobDbSession.class);
+ jobDbSession.delete(this);
+
+ return null;
+ }
+
+ public String toString() {
+ return "TransitionTakeMessage["+dbid+"]";
+ }
+}
Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TransitionTakeMessage.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/AsyncCommandMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/AsyncCommandMessage.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/AsyncCommandMessage.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -65,6 +65,6 @@
}
public String toString() {
- return "async-command-message["+dbid+"]";
+ return "AsyncCommandMessage["+dbid+"]";
}
}
Modified: jbpm4/trunk/modules/pvm/src/main/resources/jbpm.execution.hbm.xml
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/resources/jbpm.execution.hbm.xml 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/pvm/src/main/resources/jbpm.execution.hbm.xml 2009-05-18 16:53:45 UTC (rev 4833)
@@ -59,14 +59,6 @@
<property name="priority" column="PRIORITY_" />
<property name="historyActivityInstanceDbid" column="HISACTINST_" />
- <!-- many-to-one name="transition" column="TRANSITION_" class="TransitionImpl" / -->
-
- <!-- many-to-one name="transitionOrigin"
- class="org.jbpm.pvm.internal.model.ActivityImpl"
- column="TRANSORIG_"
- foreign-key="FK_EXEC_TRANSORIG"
- index="IDX_EXEC_TRANSORIG" / -->
-
<list name="executions"
cascade="all-delete-orphan"
inverse="false"
@@ -254,8 +246,9 @@
cascade="none"
foreign-key="FK_JOB_NODE"/ -->
</subclass>
- <subclass name="org.jbpm.pvm.internal.model.op.TakeTransitionMessage" discriminator-value="TakeTrMsg" />
- <subclass name="org.jbpm.pvm.internal.model.op.ProceedToDestinationMessage" discriminator-value="ProceedDestMsg" />
+ <subclass name="org.jbpm.pvm.internal.model.op.TransitionEndActivityMessage" discriminator-value="TrEndActMsg" />
+ <subclass name="org.jbpm.pvm.internal.model.op.TransitionTakeMessage" discriminator-value="TrTakeMsg" />
+ <subclass name="org.jbpm.pvm.internal.model.op.TransitionStartActivityMessage" discriminator-value="TrStartActMsg" />
<subclass name="org.jbpm.pvm.internal.job.CommandMessage" discriminator-value="CmdMsg" />
</subclass>
Added: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/async/AsyncBasicsTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/async/AsyncBasicsTest.java (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/async/AsyncBasicsTest.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -0,0 +1,186 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.test.async;
+
+import java.util.List;
+
+import org.jbpm.api.Execution;
+import org.jbpm.api.ProcessInstance;
+import org.jbpm.api.job.Job;
+import org.jbpm.test.JbpmTestCase;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class AsyncBasicsTest extends JbpmTestCase {
+
+ static boolean doneSomething;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ doneSomething = false;
+ }
+
+
+ public static class Do {
+ public void something() {
+ doneSomething = true;
+ }
+ }
+
+ public void testAsyncWaitStatesSequence() {
+ deployJpdlXmlString(
+ "<process name='TwoAsyncStates'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <java name='a' async='true' class='"+Do.class.getName()+"' method='something'>" +
+ " <transition to='b' />" +
+ " </java>" +
+ " <java name='b' async='true' class='"+Do.class.getName()+"' method='something'>" +
+ " <transition to='end' />" +
+ " </java>" +
+ " <end name='end' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("TwoAsyncStates");
+ assertEquals("a", processInstance.getActivityName());
+ assertEquals(Execution.STATE_ASYNC, processInstance.getState());
+
+ assertFalse(doneSomething);
+
+ List<Job> jobs = managementService
+ .createJobQuery()
+ .processInstanceId(processInstance.getId())
+ .list();
+
+ assertEquals(1, jobs.size());
+
+ Job job = jobs.get(0);
+
+ managementService.executeJob(job.getDbid());
+
+ assertTrue(doneSomething);
+ doneSomething = false;
+
+ processInstance = executionService.findProcessInstanceById(processInstance.getId());
+ assertEquals("b", processInstance.getActivityName());
+ assertEquals(Execution.STATE_ASYNC, processInstance.getState());
+
+ jobs = managementService
+ .createJobQuery()
+ .processInstanceId(processInstance.getId())
+ .list();
+
+ assertEquals(1, jobs.size());
+
+ job = jobs.get(0);
+
+ managementService.executeJob(job.getDbid());
+
+ assertTrue(doneSomething);
+ processInstance = executionService.findProcessInstanceById(processInstance.getId());
+ assertNull(processInstance);
+ }
+
+// public void testAsyncTransitions() {
+// deployJpdlXmlString(
+// "<process name='TwoAsyncStates'>" +
+// " <start>" +
+// " <transition to='a' />" +
+// " </start>" +
+// " <java name='a' class='"+Do.class.getName()+"' method='something'>" +
+// " <transition async='true' to='b' />" +
+// " </java>" +
+// " <java name='b' class='"+Do.class.getName()+"' method='something'>" +
+// " <transition async='true' to='end' />" +
+// " </java>" +
+// " <end name='end' />" +
+// "</process>"
+// );
+//
+// ProcessInstance processInstance = executionService.startProcessInstanceByKey("TwoAsyncStates");
+// assertEquals("a", processInstance.getActivityName());
+// assertEquals(Execution.STATE_ASYNC, processInstance.getState());
+//
+// assertTrue(doneSomething);
+// doneSomething = false;
+//
+// List<Job> jobs = managementService
+// .createJobQuery()
+// .processInstanceId(processInstance.getId())
+// .list();
+//
+// assertEquals(1, jobs.size());
+//
+// Job job = jobs.get(0);
+//
+// managementService.executeJob(job.getDbid());
+//
+// assertTrue(doneSomething);
+//
+// processInstance = executionService.findProcessInstanceById(processInstance.getId());
+// assertEquals("b", processInstance.getActivityName());
+// assertEquals(Execution.STATE_ASYNC, processInstance.getState());
+//
+// jobs = managementService
+// .createJobQuery()
+// .processInstanceId(processInstance.getId())
+// .list();
+//
+// assertEquals(1, jobs.size());
+//
+// job = jobs.get(0);
+//
+// managementService.executeJob(job.getDbid());
+//
+// processInstance = executionService.findProcessInstanceById(processInstance.getId());
+// assertNull(processInstance);
+// }
+
+
+ public void testExecutionBlockedDuringAsync() {
+ deployJpdlXmlString(
+ "<process name='AsyncState'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a' async='true'>" +
+ " <transition to='end' />" +
+ " </state>" +
+ " <end name='end' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("AsyncState");
+
+ try {
+ executionService.signalExecutionById(processInstance.getId());
+ fail("expected exception");
+ } catch (Exception e) {
+ assertTextPresent("process-instance is not active: async", e.getMessage());
+ }
+ }
+}
Property changes on: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/async/AsyncBasicsTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -144,7 +144,7 @@
" </start>" +
" <state name='s'>" +
" <on event='end'>" +
- " <event-listener class='"+ActivityStartListener.class.getName()+"' />" +
+ " <event-listener class='"+ActivityEndListener.class.getName()+"' />" +
" </on>" +
" <transition to='end' />" +
" </state>" +
Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/EndProcessInstanceTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/EndProcessInstanceTest.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/EndProcessInstanceTest.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -59,6 +59,7 @@
.processInstanceId(processInstanceId)
.uniqueResult();
+ assertNotNull(historyProcessInstance.getStartTime());
assertNotNull(historyProcessInstance.getEndTime());
assertEquals("cancel", historyProcessInstance.getState());
}
Added: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/HistoryTaskAssigneeTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/HistoryTaskAssigneeTest.java (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/HistoryTaskAssigneeTest.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -0,0 +1,56 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.test.history;
+
+import org.jbpm.api.Execution;
+import org.jbpm.api.history.HistoryActivityInstance;
+import org.jbpm.test.JbpmTestCase;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class HistoryTaskAssigneeTest extends JbpmTestCase {
+
+ public void testHistoryTaskAssignee() {
+ deployJpdlXmlString(
+ "<process name='TaskAssignee'>" +
+ " <start>" +
+ " <transition to='review' />" +
+ " </start>" +
+ " <task name='review' " +
+ " assignee='johndoe'>" +
+ " <transition to='wait' />" +
+ " </task>" +
+ " <state name='wait'/>" +
+ "</process>"
+ );
+
+ executionService.startProcessInstanceByKey("TaskAssignee");
+
+ HistoryActivityInstance historyActivityInstance = historyService
+ .createHistoryActivityInstanceQuery()
+ .uniqueResult();
+
+ }
+
+}
Property changes on: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/HistoryTaskAssigneeTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/ProcessInstanceHistoryTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/ProcessInstanceHistoryTest.java 2009-05-18 12:16:27 UTC (rev 4832)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/ProcessInstanceHistoryTest.java 2009-05-18 16:53:45 UTC (rev 4833)
@@ -61,6 +61,7 @@
assertEquals(HistoryProcessInstance.STATE_ENDED, historyProcessInstance.getState());
assertNotNull(historyProcessInstance.getStartTime());
assertNotNull(historyProcessInstance.getEndTime());
+ assertTrue(historyProcessInstance.getDuration()>=0);
}
// also check that the ended process instances have been removed from the
15 years, 5 months
JBoss JBPM SVN: r4832 - in projects/gwt-console/trunk: gui/war and 5 other directories.
by do-not-reply@jboss.org
Author: heiko.braun(a)jboss.com
Date: 2009-05-18 08:16:27 -0400 (Mon, 18 May 2009)
New Revision: 4832
Modified:
projects/gwt-console/trunk/gui/war/gui-war.iml
projects/gwt-console/trunk/gui/war/src/main/resources/org/jboss/bpm/console/Application.gwt.xml
projects/gwt-console/trunk/gui/workspace-api/workspace-api.iml
projects/gwt-console/trunk/gui/workspace-example/workspace-example.iml
projects/gwt-console/trunk/gwt-parent.iml
projects/gwt-console/trunk/pom.xml
projects/gwt-console/trunk/server/server-core/server-core.iml
projects/gwt-console/trunk/server/server-integration/server-integration.iml
Log:
Move to mosaic 0.10.0.CR1: Aegean theme
Modified: projects/gwt-console/trunk/gui/war/gui-war.iml
===================================================================
--- projects/gwt-console/trunk/gui/war/gui-war.iml 2009-05-18 12:15:53 UTC (rev 4831)
+++ projects/gwt-console/trunk/gui/war/gui-war.iml 2009-05-18 12:16:27 UTC (rev 4832)
@@ -11,7 +11,7 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="module" module-name="gwt-parent" />
+ <orderEntry type="module" module-name="gwt-rpc" />
<orderEntry type="module" module-name="workspace-api" />
<orderEntry type="module-library" exported="">
<library name="M2 Dep: javax.xml.bind:jaxb-api:jar:2.1:compile">
@@ -80,15 +80,6 @@
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic-dnd:jar:0.1.9:compile">
- <CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic-dnd/0.1.9/gwt-mosaic-dnd-0.1.9.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- </orderEntry>
- <orderEntry type="module-library" exported="">
<library name="M2 Dep: com.google.gwt:gwt-servlet:jar:1.5.3:runtime">
<CLASSES>
<root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/google/gwt/gwt-servlet/1.5.3/gwt-servlet-1.5.3.jar!/" />
@@ -107,33 +98,6 @@
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic-incubator:jar:0.1.9:compile">
- <CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic-incubator/0.1.9/gwt-mosaic-incubator-0.1.9.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- </orderEntry>
- <orderEntry type="module-library" exported="">
- <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic:jar:0.1.9:compile">
- <CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic/0.1.9/gwt-mosaic-0.1.9.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- </orderEntry>
- <orderEntry type="module-library" exported="">
- <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic-gwtx:jar:0.1.9:compile">
- <CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic-gwtx/0.1.9/gwt-mosaic-gwtx-0.1.9.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- </orderEntry>
- <orderEntry type="module-library" exported="">
<library name="M2 Dep: commons-collections:commons-collections:jar:3.2.1:compile">
<CLASSES>
<root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
@@ -208,7 +172,42 @@
<SOURCES />
</library>
</orderEntry>
- <orderEntry type="module" module-name="gwt-rpc" />
+ <orderEntry type="module-library">
+ <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic-incubator:jar:0.10.0.CR1:compile">
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic-incubator/0.10.0.CR1/gwt-mosaic-incubator-0.10.0.CR1.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic-dnd:jar:0.10.0.CR1:compile">
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic-dnd/0.10.0.CR1/gwt-mosaic-dnd-0.10.0.CR1.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic:jar:0.10.0.CR1:compile">
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic/0.10.0.CR1/gwt-mosaic-0.10.0.CR1.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic-gwtx:jar:0.10.0.CR1:compile">
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic-gwtx/0.10.0.CR1/gwt-mosaic-gwtx-0.10.0.CR1.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
<orderEntryProperties />
</component>
</module>
Modified: projects/gwt-console/trunk/gui/war/src/main/resources/org/jboss/bpm/console/Application.gwt.xml
===================================================================
--- projects/gwt-console/trunk/gui/war/src/main/resources/org/jboss/bpm/console/Application.gwt.xml 2009-05-18 12:15:53 UTC (rev 4831)
+++ projects/gwt-console/trunk/gui/war/src/main/resources/org/jboss/bpm/console/Application.gwt.xml 2009-05-18 12:16:27 UTC (rev 4832)
@@ -9,27 +9,29 @@
<!-- Add gwt-log support, default level `DEBUG` -->
<inherits name="com.allen_sauer.gwt.log.gwt-log-DEBUG" />
- <!-- Includes the public resources used by the GWT themes. Those files -->
- <!-- do not inject a style sheet into the application. -->
- <inherits name='com.google.gwt.user.theme.standard.StandardResources' />
- <inherits name="com.google.gwt.user.theme.chrome.ChromeResources" />
- <inherits name="com.google.gwt.user.theme.dark.DarkResources" />
+ <!-- Inherit Mosaic Web Toolkit stuff. -->
+ <inherits name='org.gwt.mosaic.Mosaic' />
+ <inherits name='org.gwt.mosaic.forms.Forms' />
- <!-- Other module inherits -->
- <inherits name='org.gwt.mosaic.core.Core' />
- <inherits name='org.gwt.mosaic.ui.UI'/>
- <inherits name="org.gwt.mosaic.forms.Forms"/>
+ <!-- Includes the public resources used by the GWT Mosaic -->
+ <!-- themes. Those files do not inject a style sheet into the -->
+ <!-- application. -->
+ <!--inherits name="org.gwt.mosaic.theme.standard.StandardResources" />
+ <inherits name="org.gwt.mosaic.theme.chrome.ChromeResources" />
+ <inherits name="org.gwt.mosaic.theme.dark.DarkResources" /-->
+ <inherits name="org.gwt.mosaic.theme.aegean.AegeanResources" />
- <!-- mvc4g -->
- <inherits name='com.mvc4g.Mvc4gModule'/>
-
- <!-- Inherit the default GWT style sheet. You can change -->
- <!-- the theme of your GWT application by uncommenting -->
+ <!-- Inherit the default GWT Mosaic style sheet. You can change -->
+ <!-- the theme of your GWT Mosaic application by uncommenting -->
<!-- any one of the following lines. -->
- <inherits name='com.google.gwt.user.theme.standard.Standard' />
- <!-- <inherits name="com.google.gwt.user.theme.chrome.Chrome"/> -->
- <!-- <inherits name="com.google.gwt.user.theme.dark.Dark"/> -->
+ <!-- <inherits name='org.gwt.mosaic.theme.standard.Standard' /> -->
+ <!-- <inherits name="org.gwt.mosaic.chrome.Chrome"/> -->
+ <!-- <inherits name="org.gwt.mosaic.dark.Dark"/> -->
+ <inherits name='org.gwt.mosaic.theme.aegean.Aegean' />
+ <!-- mvc4g -->
+ <inherits name='com.mvc4g.Mvc4gModule'/>
+
<generate-with class="org.jboss.bpm.console.rebind.WorkspaceGenerator" >
<when-type-assignable class="org.jboss.bpm.console.client.WorkspaceLauncher"/>
</generate-with>
@@ -53,15 +55,7 @@
<servlet path="/xhp" class="jmaki.xhp.XmlHttpProxyServlet"/>
- <!-- Inherit the default GWT-Mosaic style sheet. You can -->
- <!-- change the theme of your GWT application by uncommenting -->
- <!-- any one of the following lines. -->
- <stylesheet src="gwt/standard/Mosaic.css" />
- <!-- <stylesheet src="gwt/chrome/Mosaic.css" /> -->
- <!-- <stylesheet src="gwt/dark/Mosaic.css" /> -->
-
-
<!-- Specify a css to load into your gwt application -->
<stylesheet src='console.css' />
-</module>
\ No newline at end of file
+</module>
Modified: projects/gwt-console/trunk/gui/workspace-api/workspace-api.iml
===================================================================
--- projects/gwt-console/trunk/gui/workspace-api/workspace-api.iml 2009-05-18 12:15:53 UTC (rev 4831)
+++ projects/gwt-console/trunk/gui/workspace-api/workspace-api.iml 2009-05-18 12:16:27 UTC (rev 4832)
@@ -6,11 +6,10 @@
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/target/generated-sources" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="module" module-name="gwt-parent" exported="" />
+ <orderEntry type="module" module-name="gwt-rpc" exported="" />
<orderEntry type="module-library" exported="">
<library name="M2 Dep: com.google.code.gwt-log:gwt-log:jar:2.5.2:compile">
<CLASSES>
@@ -60,120 +59,120 @@
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic-dnd:jar:0.1.9:compile">
+ <library name="M2 Dep: com.google.gwt:gwt-user:jar:1.5.3:provided">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic-dnd/0.1.9/gwt-mosaic-dnd-0.1.9.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/google/gwt/gwt-user/1.5.3/gwt-user-1.5.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic:jar:0.1.9:compile">
+ <library name="M2 Dep: commons-collections:commons-collections:jar:3.2.1:compile">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic/0.1.9/gwt-mosaic-0.1.9.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: com.google.gwt:gwt-user:jar:1.5.3:provided">
+ <library name="M2 Dep: commons-logging:commons-logging:jar:1.1.1:compile">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/google/gwt/gwt-user/1.5.3/gwt-user-1.5.3.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic-incubator:jar:0.1.9:compile">
+ <library name="M2 Dep: commons-lang:commons-lang:jar:2.4:compile">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic-incubator/0.1.9/gwt-mosaic-incubator-0.1.9.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-lang/commons-lang/2.4/commons-lang-2.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic-gwtx:jar:0.1.9:compile">
+ <library name="M2 Dep: commons-digester:commons-digester:jar:1.8:compile">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic-gwtx/0.1.9/gwt-mosaic-gwtx-0.1.9.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-digester/commons-digester/1.8/commons-digester-1.8.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: commons-collections:commons-collections:jar:3.2.1:compile">
+ <library name="M2 Dep: com.googlecode.mvc4g:mvc4g:jar:1.0.0-jboss:compile">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/mvc4g/mvc4g/1.0.0-jboss/mvc4g-1.0.0-jboss.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: commons-logging:commons-logging:jar:1.1.1:compile">
+ <library name="M2 Dep: commons-beanutils:commons-beanutils:jar:1.7.0:compile">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar!/" />
</CLASSES>
<JAVADOC />
- <SOURCES />
+ <SOURCES>
+ <root url="jar://$MODULE_DIR$/../../../../../../../.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0-sources.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0-sources.jar!/" />
+ </SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: commons-lang:commons-lang:jar:2.4:compile">
+ <library name="M2 Dep: commons-configuration:commons-configuration:jar:1.6:compile">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-lang/commons-lang/2.4/commons-lang-2.4.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-configuration/commons-configuration/1.6/commons-configuration-1.6.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: commons-digester:commons-digester:jar:1.8:compile">
+ <library name="M2 Dep: commons-beanutils:commons-beanutils-core:jar:1.8.0:compile">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-digester/commons-digester/1.8/commons-digester-1.8.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-beanutils/commons-beanutils-core/1.8.0/commons-beanutils-core-1.8.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: com.googlecode.mvc4g:mvc4g:jar:1.0.0-jboss:compile">
+ <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic-incubator:jar:0.10.0.CR1:compile">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/mvc4g/mvc4g/1.0.0-jboss/mvc4g-1.0.0-jboss.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic-incubator/0.10.0.CR1/gwt-mosaic-incubator-0.10.0.CR1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: commons-beanutils:commons-beanutils:jar:1.7.0:compile">
+ <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic-dnd:jar:0.10.0.CR1:compile">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic-dnd/0.10.0.CR1/gwt-mosaic-dnd-0.10.0.CR1.jar!/" />
</CLASSES>
<JAVADOC />
- <SOURCES>
- <root url="jar://$MODULE_DIR$/../../../../../../../.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0-sources.jar!/" />
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0-sources.jar!/" />
- </SOURCES>
+ <SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: commons-configuration:commons-configuration:jar:1.6:compile">
+ <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic:jar:0.10.0.CR1:compile">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-configuration/commons-configuration/1.6/commons-configuration-1.6.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic/0.10.0.CR1/gwt-mosaic-0.10.0.CR1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" exported="">
- <library name="M2 Dep: commons-beanutils:commons-beanutils-core:jar:1.8.0:compile">
+ <library name="M2 Dep: com.googlecode.gwtmosaic:gwt-mosaic-gwtx:jar:0.10.0.CR1:compile">
<CLASSES>
- <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-beanutils/commons-beanutils-core/1.8.0/commons-beanutils-core-1.8.0.jar!/" />
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/com/googlecode/gwtmosaic/gwt-mosaic-gwtx/0.10.0.CR1/gwt-mosaic-gwtx-0.10.0.CR1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
Modified: projects/gwt-console/trunk/gui/workspace-example/workspace-example.iml
===================================================================
--- projects/gwt-console/trunk/gui/workspace-example/workspace-example.iml 2009-05-18 12:15:53 UTC (rev 4831)
+++ projects/gwt-console/trunk/gui/workspace-example/workspace-example.iml 2009-05-18 12:16:27 UTC (rev 4832)
@@ -12,7 +12,7 @@
<orderEntry type="module" module-name="toplevel" />
<orderEntry type="module" module-name="plugin-api" />
<orderEntry type="module" module-name="plugin" />
- <orderEntry type="module" module-name="gwt-parent" />
+ <orderEntry type="module" module-name="gwt-rpc" />
<orderEntry type="module" module-name="workspace-api" />
<orderEntry type="module-library">
<library name="M2 Dep: javax.xml.bind:jaxb-api:jar:2.1:compile">
Modified: projects/gwt-console/trunk/gwt-parent.iml
===================================================================
--- projects/gwt-console/trunk/gwt-parent.iml 2009-05-18 12:15:53 UTC (rev 4831)
+++ projects/gwt-console/trunk/gwt-parent.iml 2009-05-18 12:16:27 UTC (rev 4832)
@@ -21,6 +21,7 @@
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="server-integration" exported="" />
+ <orderEntry type="module" module-name="gwt-rpc" exported="" />
<orderEntry type="module" module-name="workspace-api" exported="" />
<orderEntry type="module-library" exported="">
<library name="M2 Dep: junit:junit:jar:3.8.1:test">
Modified: projects/gwt-console/trunk/pom.xml
===================================================================
--- projects/gwt-console/trunk/pom.xml 2009-05-18 12:15:53 UTC (rev 4831)
+++ projects/gwt-console/trunk/pom.xml 2009-05-18 12:16:27 UTC (rev 4832)
@@ -23,7 +23,7 @@
<gson.version>1.2.2</gson.version>
<gwt.version>1.5.3</gwt.version>
- <gwt-mosaic.version>0.1.9</gwt-mosaic.version>
+ <gwt-mosaic.version>0.10.0.CR1</gwt-mosaic.version>
<gwt-log.version>2.5.2</gwt-log.version>
<jaf.version>1.1</jaf.version>
<javax.ejb.version>3.0</javax.ejb.version>
Modified: projects/gwt-console/trunk/server/server-core/server-core.iml
===================================================================
--- projects/gwt-console/trunk/server/server-core/server-core.iml 2009-05-18 12:15:53 UTC (rev 4831)
+++ projects/gwt-console/trunk/server/server-core/server-core.iml 2009-05-18 12:16:27 UTC (rev 4832)
@@ -11,7 +11,7 @@
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="server-integration" exported="" />
- <orderEntry type="module" module-name="gwt-parent" />
+ <orderEntry type="module" module-name="gwt-rpc" exported="" />
<orderEntry type="module-library" exported="">
<library name="M2 Dep: org.slf4j:slf4j-simple:jar:1.5.2:compile">
<CLASSES>
@@ -252,7 +252,6 @@
</SOURCES>
</library>
</orderEntry>
- <orderEntry type="module" module-name="gwt-rpc" />
<orderEntryProperties />
</component>
</module>
Modified: projects/gwt-console/trunk/server/server-integration/server-integration.iml
===================================================================
--- projects/gwt-console/trunk/server/server-integration/server-integration.iml 2009-05-18 12:15:53 UTC (rev 4831)
+++ projects/gwt-console/trunk/server/server-integration/server-integration.iml 2009-05-18 12:16:27 UTC (rev 4832)
@@ -8,7 +8,7 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="module" module-name="gwt-parent" />
+ <orderEntry type="module" module-name="gwt-rpc" exported="" />
<orderEntry type="module-library" exported="">
<library name="M2 Dep: javax.xml.bind:jaxb-api:jar:2.1:provided">
<CLASSES>
@@ -69,6 +69,15 @@
</SOURCES>
</library>
</orderEntry>
+ <orderEntry type="module-library" exported="">
+ <library name="M2 Dep: commons-logging:commons-logging:jar:1.1.1:provided">
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/../../../../../../../../.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
<orderEntryProperties />
</component>
</module>
15 years, 5 months
JBoss JBPM SVN: r4831 - projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/task.
by do-not-reply@jboss.org
Author: heiko.braun(a)jboss.com
Date: 2009-05-18 08:15:53 -0400 (Mon, 18 May 2009)
New Revision: 4831
Modified:
projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/task/ParticipantPanel.java
Log:
Fix participant panel: clear() was not invoked upon refresh
Modified: projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/task/ParticipantPanel.java
===================================================================
--- projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/task/ParticipantPanel.java 2009-05-17 09:55:43 UTC (rev 4830)
+++ projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/task/ParticipantPanel.java 2009-05-18 12:15:53 UTC (rev 4831)
@@ -123,6 +123,8 @@
public void update(TaskRef task)
{
currentTask = task;
+
+ tree.clear();
TreeItem root = tree.addItem(PARTICIPANTS);
@@ -140,6 +142,8 @@
users.addItem(uref.getIdRef());
}
+ root.setState(true); // open users
+
this.invalidate();
}
15 years, 5 months
JBoss JBPM SVN: r4830 - in jbpm4/trunk/modules: api/src/main/java/org/jbpm/api/activity and 7 other directories.
by do-not-reply@jboss.org
Author: tom.baeyens(a)jboss.com
Date: 2009-05-17 05:55:43 -0400 (Sun, 17 May 2009)
New Revision: 4830
Added:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupActivity.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupBinding.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/GroupBasicsTest.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/GroupTimersTest.java
Removed:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateBinding.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java
Modified:
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Execution.java
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityExecution.java
jbpm4/trunk/modules/api/src/main/resources/jpdl-4.0.xsd
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndActivity.java
jbpm4/trunk/modules/jpdl/src/main/resources/jbpm.jpdl.activities.xml
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransition.java
jbpm4/trunk/modules/userguide/src/main/docbook/en/modules/ch05-Jpdl.xml
Log:
JBPM-2026 renamed super-state to group and added a group timer test, fixing a lot of scope related things
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Execution.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Execution.java 2009-05-16 15:38:55 UTC (rev 4829)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Execution.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -113,7 +113,7 @@
String STATE_INACTIVE_CONCURRENT_ROOT = "inactive-concurrent-root";
/** parent of a scoped execution. This execution is inactive,
- * but points to the parent scope like e.g. a super-state.
+ * but points to the parent scope like e.g. a group.
* This execution has exactly 1 child execution. That indicates
* the state inside of the scope.
* Make sure that comparisons are
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityExecution.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityExecution.java 2009-05-16 15:38:55 UTC (rev 4829)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityExecution.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -94,7 +94,7 @@
* <p>CAUTION: It's up to the client to make sure
* that this transition makes sense as there is no check whether the given transition
* is an outgoing transition of the current activity. The motivation for that is
- * that in case of superstates, that check can become too 'expensive'. </p> */
+ * that in case of groups, that check can become too 'expensive'. </p> */
void take(Transition transition);
/** let's the given execution take the transition.
Modified: jbpm4/trunk/modules/api/src/main/resources/jpdl-4.0.xsd
===================================================================
--- jbpm4/trunk/modules/api/src/main/resources/jpdl-4.0.xsd 2009-05-16 15:38:55 UTC (rev 4829)
+++ jbpm4/trunk/modules/api/src/main/resources/jpdl-4.0.xsd 2009-05-17 09:55:43 UTC (rev 4830)
@@ -421,9 +421,9 @@
</complexType>
</element>
- <!-- ~~~ SUPER-STATE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+ <!-- ~~~ group ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!--
- <element name="super-state">
+ <element name="group">
<annotation><documentation>Scope enclosing a number of activities.
</documentation></annotation>
<complexType>
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndActivity.java 2009-05-16 15:38:55 UTC (rev 4829)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndActivity.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -27,6 +27,8 @@
import org.jbpm.api.model.Activity;
import org.jbpm.api.model.OpenExecution;
import org.jbpm.api.model.Transition;
+import org.jbpm.pvm.internal.model.ActivityImpl;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
/**
@@ -40,18 +42,32 @@
protected String state = null;
public void execute(ActivityExecution execution) {
+ execute((ExecutionImpl)execution);
+ }
+
+ public void execute(ExecutionImpl execution) {
Activity activity = execution.getActivity();
List<Transition> outgoingTransitions = activity.getOutgoingTransitions();
+ ActivityImpl parentActivity = (ActivityImpl) activity.getParentActivity();
- Activity parentActivity = activity.getParentActivity();
if ( (parentActivity!=null)
- && ("super-state".equals(parentActivity.getType()))
- && (outgoingTransitions!=null)
- && (outgoingTransitions.size()==1)
+ && ("group".equals(parentActivity.getType()))
) {
- Transition outgoingTransition = outgoingTransitions.get(0);
- execution.take(outgoingTransition);
+ // if the end activity itself has an outgoing transition
+ // (such end activities should be drawn on the border of the group)
+ if ( (outgoingTransitions!=null)
+ && (outgoingTransitions.size()==1)
+ ) {
+ Transition outgoingTransition = outgoingTransitions.get(0);
+ // taking the transition that goes over the group boundaries will
+ // destroy the scope automatically (see atomic operation TakeTransition)
+ execution.take(outgoingTransition);
+ } else {
+ execution.setActivity(parentActivity);
+ execution.signal();
+ }
+
} else {
OpenExecution executionToEnd = null;
if (endProcessInstance) {
Copied: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupActivity.java (from rev 4829, jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java)
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupActivity.java (rev 0)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupActivity.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -0,0 +1,102 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.jpdl.internal.activity;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.jbpm.api.Execution;
+import org.jbpm.api.JbpmException;
+import org.jbpm.api.activity.ActivityExecution;
+import org.jbpm.api.model.Activity;
+import org.jbpm.api.model.Transition;
+import org.jbpm.pvm.internal.model.ActivityImpl;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class GroupActivity extends JpdlExternalActivity {
+
+ private static final long serialVersionUID = 1L;
+
+ public void execute(ActivityExecution execution) throws Exception {
+ execute((ExecutionImpl)execution);
+ }
+ public void execute(ExecutionImpl execution) throws Exception {
+ // find the start activity
+ Activity activity = execution.getActivity();
+ List<Activity> startActivities = findStartActivities(activity);
+ if (startActivities.size()==1) {
+ execution.execute(startActivities.get(0));
+ } else {
+
+ ExecutionImpl concurrentRoot = null;
+ if (Execution.STATE_ACTIVE_ROOT.equals(execution.getState())) {
+ concurrentRoot = execution;
+ } else if (Execution.STATE_ACTIVE_ROOT.equals(execution.getState())) {
+ concurrentRoot = execution.getParent();
+
+ } else {
+ throw new JbpmException("illegal state");
+ }
+
+ for (Activity startActivity: startActivities) {
+ ExecutionImpl concurrentExecution = concurrentRoot.createExecution();
+ concurrentExecution.setState(Execution.STATE_ACTIVE_CONCURRENT);
+ concurrentExecution.execute(startActivity);
+ }
+ }
+ }
+
+ private List<Activity> findStartActivities(Activity activity) {
+ List<Activity> startActivities = new ArrayList<Activity>();
+ List nestedActivities = activity.getActivities();
+ for (ActivityImpl nestedActivity : (List<ActivityImpl>) nestedActivities) {
+ if ( (nestedActivity.getIncomingTransitions()==null)
+ || (nestedActivity.getIncomingTransitions().isEmpty())
+ ) {
+ startActivities.add(nestedActivity);
+ }
+ }
+ return startActivities;
+ }
+
+ public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
+ Transition transition = null;
+ Activity activity = execution.getActivity();
+ List<Transition> outgoingTransitions = activity.getOutgoingTransitions();
+
+ int nbrOfOutgoingTransitions = (outgoingTransitions!=null ? outgoingTransitions.size() : 0);
+ if ( (signalName==null)
+ && (nbrOfOutgoingTransitions==1)
+ ) {
+ transition = outgoingTransitions.get(0);
+ } else {
+ transition = activity.getOutgoingTransition(signalName);
+ }
+
+ execution.take(transition);
+ }
+}
Property changes on: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupActivity.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Copied: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupBinding.java (from rev 4829, jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateBinding.java)
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupBinding.java (rev 0)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupBinding.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -0,0 +1,50 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.jpdl.internal.activity;
+
+import org.jbpm.jpdl.internal.xml.JpdlParser;
+import org.jbpm.pvm.internal.model.ActivityImpl;
+import org.jbpm.pvm.internal.xml.Parse;
+import org.jbpm.pvm.internal.xml.Parser;
+import org.w3c.dom.Element;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class GroupBinding extends JpdlBinding {
+
+ public GroupBinding() {
+ super("group");
+ }
+
+ public Object parse(Element element, Parse parse, Parser parser) {
+ GroupActivity groupActivity = new GroupActivity();
+
+ ActivityImpl activity = parse.findObject(ActivityImpl.class);
+
+ JpdlParser jpdlParser = (JpdlParser) parser;
+ jpdlParser.parseActivities(element, parse, activity);
+
+ return groupActivity;
+ }
+}
Property changes on: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/GroupBinding.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Deleted: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java 2009-05-16 15:38:55 UTC (rev 4829)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -1,102 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jbpm.jpdl.internal.activity;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.jbpm.api.Execution;
-import org.jbpm.api.JbpmException;
-import org.jbpm.api.activity.ActivityExecution;
-import org.jbpm.api.model.Activity;
-import org.jbpm.api.model.Transition;
-import org.jbpm.pvm.internal.model.ActivityImpl;
-import org.jbpm.pvm.internal.model.ExecutionImpl;
-
-
-/**
- * @author Tom Baeyens
- */
-public class SuperStateActivity extends JpdlExternalActivity {
-
- private static final long serialVersionUID = 1L;
-
- public void execute(ActivityExecution execution) throws Exception {
- execute((ExecutionImpl)execution);
- }
- public void execute(ExecutionImpl execution) throws Exception {
- // find the start activity
- Activity activity = execution.getActivity();
- List<Activity> startActivities = findStartActivities(activity);
- if (startActivities.size()==1) {
- execution.execute(startActivities.get(0));
- } else {
-
- ExecutionImpl concurrentRoot = null;
- if (Execution.STATE_ACTIVE_ROOT.equals(execution.getState())) {
- concurrentRoot = execution;
- } else if (Execution.STATE_ACTIVE_ROOT.equals(execution.getState())) {
- concurrentRoot = execution.getParent();
-
- } else {
- throw new JbpmException("illegal state");
- }
-
- for (Activity startActivity: startActivities) {
- ExecutionImpl concurrentExecution = concurrentRoot.createExecution();
- concurrentExecution.setState(Execution.STATE_ACTIVE_CONCURRENT);
- concurrentExecution.execute(startActivity);
- }
- }
- }
-
- private List<Activity> findStartActivities(Activity activity) {
- List<Activity> startActivities = new ArrayList<Activity>();
- List nestedActivities = activity.getActivities();
- for (ActivityImpl nestedActivity : (List<ActivityImpl>) nestedActivities) {
- if ( (nestedActivity.getIncomingTransitions()==null)
- || (nestedActivity.getIncomingTransitions().isEmpty())
- ) {
- startActivities.add(nestedActivity);
- }
- }
- return startActivities;
- }
-
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
- Transition transition = null;
- Activity activity = execution.getActivity();
- List<Transition> outgoingTransitions = activity.getOutgoingTransitions();
-
- int nbrOfOutgoingTransitions = (outgoingTransitions!=null ? outgoingTransitions.size() : 0);
- if ( (signalName==null)
- && (nbrOfOutgoingTransitions==1)
- ) {
- transition = outgoingTransitions.get(0);
- } else {
- transition = activity.getOutgoingTransition(signalName);
- }
-
- execution.take(transition);
- }
-}
Deleted: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateBinding.java 2009-05-16 15:38:55 UTC (rev 4829)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateBinding.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -1,50 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jbpm.jpdl.internal.activity;
-
-import org.jbpm.jpdl.internal.xml.JpdlParser;
-import org.jbpm.pvm.internal.model.ActivityImpl;
-import org.jbpm.pvm.internal.xml.Parse;
-import org.jbpm.pvm.internal.xml.Parser;
-import org.w3c.dom.Element;
-
-
-/**
- * @author Tom Baeyens
- */
-public class SuperStateBinding extends JpdlBinding {
-
- public SuperStateBinding() {
- super("super-state");
- }
-
- public Object parse(Element element, Parse parse, Parser parser) {
- SuperStateActivity superStateActivity = new SuperStateActivity();
-
- ActivityImpl activity = parse.findObject(ActivityImpl.class);
-
- JpdlParser jpdlParser = (JpdlParser) parser;
- jpdlParser.parseActivities(element, parse, activity);
-
- return superStateActivity;
- }
-}
Modified: jbpm4/trunk/modules/jpdl/src/main/resources/jbpm.jpdl.activities.xml
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/resources/jbpm.jpdl.activities.xml 2009-05-16 15:38:55 UTC (rev 4829)
+++ jbpm4/trunk/modules/jpdl/src/main/resources/jbpm.jpdl.activities.xml 2009-05-17 09:55:43 UTC (rev 4830)
@@ -15,5 +15,5 @@
<activity binding="org.jbpm.jpdl.internal.activity.TaskBinding" />
<activity binding="org.jbpm.jpdl.internal.activity.SubProcessBinding" />
<activity binding="org.jbpm.jpdl.internal.activity.MailBinding" />
- <activity binding="org.jbpm.jpdl.internal.activity.SuperStateBinding" />
+ <activity binding="org.jbpm.jpdl.internal.activity.GroupBinding" />
</activities>
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2009-05-16 15:38:55 UTC (rev 4829)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -321,7 +321,9 @@
// end all child executions
if (executions!=null) {
- for (ExecutionImpl child: executions) {
+ // making a copy of the executions to prevent ConcurrentMoidificationException
+ List<ExecutionImpl> executionsToEnd = new ArrayList<ExecutionImpl>(executions);
+ for (ExecutionImpl child: executionsToEnd) {
child.end(state);
}
}
@@ -336,6 +338,7 @@
} else { // this is a process instance
fireHistoryEvent(new ProcessInstanceEnd());
fire(Event.END, getProcessDefinition());
+
if (superProcessExecution!=null) {
log.trace(toString()+" signals super process execution");
superProcessExecution.signal();
@@ -379,6 +382,7 @@
public void signal(String signal, Map<String, Object> parameters) {
checkActive();
+ propagation = Propagation.EXPLICIT;
if (getActivity()!=null) {
performAtomicOperation(new Signal(signal, parameters, getActivity()));
} else if (transition!=null) {
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java 2009-05-16 15:38:55 UTC (rev 4829)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/Signal.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -56,7 +56,7 @@
if (execution.getName()!=null) {
log.debug(execution.toString()+" signals "+activity);
} else {
- log.debug("signalling "+activity+", signal="+signalName);
+ log.debug("signalling "+activity+", signalName="+signalName);
}
ExternalActivityBehaviour externalActivityBehaviour = (ExternalActivityBehaviour) activity.getBehaviour();
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransition.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransition.java 2009-05-16 15:38:55 UTC (rev 4829)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransition.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -36,37 +36,36 @@
public class TakeTransition implements AtomicOperation {
private static Log log = Log.getLog(TakeTransition.class.getName());
-
+
public boolean isAsync(ExecutionImpl execution) {
- return execution.getActivity().isLeaveAsync()
- || execution.getTransition().isTakeAsync();
+ return execution.getActivity().isLeaveAsync() || execution.getTransition().isTakeAsync();
}
public void perform(ExecutionImpl execution) {
TransitionImpl transition = execution.getTransition();
- if (execution.getName()!=null) {
- log.debug(execution.toString()+" takes "+transition);
+ if (execution.getName() != null) {
+ log.debug(execution.toString() + " takes " + transition);
} else {
- log.debug("taking "+transition);
+ log.debug("taking " + transition);
}
-
+
List<ActivityImpl> leftActivities = getActivitiesLeft(execution.getActivity(), transition.getDestination());
ExecutionImpl propagatingExecution = execution;
for (ActivityImpl leftActivity : leftActivities) {
propagatingExecution = propagatingExecution.endActivity(leftActivity);
}
-
+
propagatingExecution.setActivity(null);
propagatingExecution.fire(Event.TAKE, transition);
-
+
boolean wait = false;
-
+
Condition waitCondition = transition.getWaitCondition();
- if (waitCondition!=null) {
+ if (waitCondition != null) {
wait = waitCondition.evaluate(propagatingExecution);
}
-
+
if (!wait) {
propagatingExecution.performAtomicOperation(ExecutionImpl.PROCEED_TO_DESTINATION);
}
@@ -74,23 +73,21 @@
List<ActivityImpl> getActivitiesLeft(ActivityImpl source, ActivityImpl destination) {
List<ActivityImpl> activitiesLeft = new ArrayList<ActivityImpl>();
-
+
if (source.equals(destination)) {
activitiesLeft.add(source);
} else {
List<ObservableElementImpl> destinationChain = destination.getParentChain();
-
+
if (!destinationChain.contains(source)) {
ActivityImpl sourceActivity = source;
- while ( (sourceActivity!=null)
- && (!destinationChain.contains(sourceActivity))
- ) {
+ while ((sourceActivity != null) && (!destinationChain.contains(sourceActivity))) {
activitiesLeft.add(sourceActivity);
- sourceActivity = sourceActivity.getParentActivity();
+ sourceActivity = sourceActivity.getParentActivity();
}
}
}
-
+
return activitiesLeft;
}
@@ -98,7 +95,7 @@
return "take-transition";
}
- public MessageImpl<?> createAsyncMessage(ExecutionImpl execution) {
+ public MessageImpl< ? > createAsyncMessage(ExecutionImpl execution) {
return new TakeTransitionMessage(execution);
}
}
\ No newline at end of file
Copied: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/GroupBasicsTest.java (from rev 4829, jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java)
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/GroupBasicsTest.java (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/GroupBasicsTest.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -0,0 +1,249 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.test.activities;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jbpm.api.ProcessInstance;
+import org.jbpm.test.JbpmTestCase;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class GroupBasicsTest extends JbpmTestCase {
+
+ public void testSimplestGroup() {
+ deployJpdlXmlString(
+ "<process name='Group'>" +
+ " <start>" +
+ " <transition to='group' />" +
+ " </start>" +
+ " <group name='group'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition to='done' />" +
+ " </state>" +
+ " <end name='done' />" +
+ " <transition to='end' />" +
+ " </group>" +
+ " <end name='end' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Group");
+ assertEquals("a", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+ assertTrue(processInstance.isEnded());
+ }
+
+ public void testGroupWithoutStartActivity() {
+ deployJpdlXmlString(
+ "<process name='Group'>" +
+ " <start>" +
+ " <transition to='group' />" +
+ " </start>" +
+ " <group name='group'>" +
+ " <state name='a'>" +
+ " <transition to='done' />" +
+ " </state>" +
+ " <end name='done' />" +
+ " <transition to='end' />" +
+ " </group>" +
+ " <end name='end' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Group");
+ assertEquals("a", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+ assertTrue(processInstance.isEnded());
+ }
+
+ public void testGroupMultipleEntryStartActivities() {
+ deployJpdlXmlString(
+ "<process name='Group'>" +
+ " <start>" +
+ " <transition to='choose' />" +
+ " </start>" +
+ " <decision name='choose' expr='#{theWayToGo}'>" +
+ " <transition name='left' to='left' />" +
+ " <transition name='right' to='right' />" +
+ " </decision>" +
+ " <group name='group'>" +
+ " <start name='left'>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <start name='right'>" +
+ " <transition to='b' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition to='done' />" +
+ " </state>" +
+ " <state name='b'>" +
+ " <transition to='done' />" +
+ " </state>" +
+ " <end name='done' />" +
+ " <transition to='end' />" +
+ " </group>" +
+ " <end name='end' />" +
+ "</process>"
+ );
+
+ Map<String, Object> variables = new HashMap<String, Object>();
+ variables.put("theWayToGo", "left");
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Group", variables);
+ assertEquals("a", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+ assertTrue(processInstance.isEnded());
+
+ variables.put("theWayToGo", "right");
+ processInstance = executionService.startProcessInstanceByKey("Group", variables);
+ assertEquals("b", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+ assertTrue(processInstance.isEnded());
+ }
+
+ public void testGroupDirectEntryTransition() {
+ deployJpdlXmlString(
+ "<process name='Group'>" +
+ " <start>" +
+ " <transition to='direct' />" +
+ " </start>" +
+ " <group name='group'>" +
+ " <start name='direct'>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition to='done' />" +
+ " </state>" +
+ " <end name='done' />" +
+ " <transition to='end' />" +
+ " </group>" +
+ " <end name='end' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Group");
+ assertEquals("a", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+ assertTrue(processInstance.isEnded());
+ }
+
+ public void testGroupWithoutEndActivity() {
+ deployJpdlXmlString(
+ "<process name='Group'>" +
+ " <start>" +
+ " <transition to='group' />" +
+ " </start>" +
+ " <group name='group'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a' />" +
+ " <transition to='end' />" +
+ " </group>" +
+ " <end name='end' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Group");
+ assertEquals("a", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+ assertTrue(processInstance.isEnded());
+ }
+
+ public void testGroupMultipleExitEndActivities() {
+ deployJpdlXmlString(
+ "<process name='Group'>" +
+ " <start>" +
+ " <transition to='group' />" +
+ " </start>" +
+ " <group name='group'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition name='a' to='exitA' />" +
+ " <transition name='b' to='exitB' />" +
+ " </state>" +
+ " <end name='exitA'>" +
+ " <transition to='endA' />" +
+ " </end>" +
+ " <end name='exitB'>" +
+ " <transition to='endB' />" +
+ " </end>" +
+ " </group>" +
+ " <end name='endA' />" +
+ " <end name='endB' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Group");
+ assertEquals("a", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId(), "a");
+ assertTrue(processInstance.isEnded());
+ assertEquals("endA", processInstance.getActivityName());
+
+ processInstance = executionService.startProcessInstanceByKey("Group");
+ assertEquals("a", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId(), "b");
+ assertTrue(processInstance.isEnded());
+ assertEquals("endB", processInstance.getActivityName());
+ }
+
+ public void testGroupDirectExitTransition() {
+ deployJpdlXmlString(
+ "<process name='Group'>" +
+ " <start>" +
+ " <transition to='group' />" +
+ " </start>" +
+ " <group name='group'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition to='end' />" +
+ " </state>" +
+ " </group>" +
+ " <end name='end' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Group");
+ assertEquals("a", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+ assertTrue(processInstance.isEnded());
+ }
+}
Property changes on: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/GroupBasicsTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/GroupTimersTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/GroupTimersTest.java (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/GroupTimersTest.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -0,0 +1,99 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.test.activities;
+
+import java.util.List;
+
+import org.jbpm.api.Execution;
+import org.jbpm.api.ProcessInstance;
+import org.jbpm.api.job.Job;
+import org.jbpm.api.job.Timer;
+import org.jbpm.test.JbpmTestCase;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class GroupTimersTest extends JbpmTestCase {
+
+ public void testGroupWithTimer() {
+ deployJpdlXmlString(
+ "<process name='Group'>" +
+ " <start>" +
+ " <transition to='group' />" +
+ " </start>" +
+ " <group name='group'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition to='done' />" +
+ " </state>" +
+ " <end name='done' />" +
+ " <transition to='end' />" +
+ " <transition name='timeout' to='escalate'>" +
+ " <timer duedate='2 hours' />" +
+ " </transition>" +
+ " </group>" +
+ " <state name='end' />" +
+ " <state name='escalate' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Group");
+
+ assertEquals(Execution.STATE_INACTIVE_SCOPE, processInstance.getState());
+ assertEquals("group", processInstance.getActivityName());
+ assertEquals(1, processInstance.getExecutions().size());
+ Execution groupExecution = processInstance.getExecutions().iterator().next();
+ assertEquals(Execution.STATE_ACTIVE_ROOT, groupExecution.getState());
+ assertEquals("a", groupExecution.getActivityName());
+
+ processInstance = executionService.signalExecutionById(groupExecution.getId());
+
+ assertEquals(Execution.STATE_ACTIVE_ROOT, processInstance.getState());
+ assertEquals("end", processInstance.getActivityName());
+ assertEquals(0, processInstance.getExecutions().size());
+
+
+ processInstance = executionService.startProcessInstanceByKey("Group");
+
+ List<Job> jobs = managementService
+ .createJobQuery()
+ .processInstanceId(processInstance.getId())
+ .list();
+
+ assertEquals(1, jobs.size());
+
+ Timer timer = (Timer) jobs.get(0);
+ assertEquals("timeout", timer.getSignalName());
+
+ managementService.executeJob(timer.getDbid());
+
+ processInstance = executionService.findProcessInstanceById(processInstance.getId());
+
+ assertEquals(Execution.STATE_ACTIVE_ROOT, processInstance.getState());
+ assertEquals("escalate", processInstance.getActivityName());
+ assertEquals(0, processInstance.getExecutions().size());
+ }
+
+}
Property changes on: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/GroupTimersTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Deleted: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java 2009-05-16 15:38:55 UTC (rev 4829)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java 2009-05-17 09:55:43 UTC (rev 4830)
@@ -1,249 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jbpm.test.activities;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.jbpm.api.ProcessInstance;
-import org.jbpm.test.JbpmTestCase;
-
-
-/**
- * @author Tom Baeyens
- */
-public class SuperStateBasicsTest extends JbpmTestCase {
-
- public void testSimplestSuperState() {
- deployJpdlXmlString(
- "<process name='Super'>" +
- " <start>" +
- " <transition to='super' />" +
- " </start>" +
- " <super-state name='super'>" +
- " <start>" +
- " <transition to='a' />" +
- " </start>" +
- " <state name='a'>" +
- " <transition to='done' />" +
- " </state>" +
- " <end name='done' />" +
- " <transition to='end' />" +
- " </super-state>" +
- " <end name='end' />" +
- "</process>"
- );
-
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super");
- assertEquals("a", processInstance.getActivityName());
-
- processInstance = executionService.signalExecutionById(processInstance.getId());
- assertTrue(processInstance.isEnded());
- }
-
- public void testSuperStateWithoutStartActivity() {
- deployJpdlXmlString(
- "<process name='Super'>" +
- " <start>" +
- " <transition to='super' />" +
- " </start>" +
- " <super-state name='super'>" +
- " <state name='a'>" +
- " <transition to='done' />" +
- " </state>" +
- " <end name='done' />" +
- " <transition to='end' />" +
- " </super-state>" +
- " <end name='end' />" +
- "</process>"
- );
-
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super");
- assertEquals("a", processInstance.getActivityName());
-
- processInstance = executionService.signalExecutionById(processInstance.getId());
- assertTrue(processInstance.isEnded());
- }
-
- public void testSuperStateMultipleEntryStartActivities() {
- deployJpdlXmlString(
- "<process name='Super'>" +
- " <start>" +
- " <transition to='choose' />" +
- " </start>" +
- " <decision name='choose' expr='#{theWayToGo}'>" +
- " <transition name='left' to='left' />" +
- " <transition name='right' to='right' />" +
- " </decision>" +
- " <super-state name='super'>" +
- " <start name='left'>" +
- " <transition to='a' />" +
- " </start>" +
- " <start name='right'>" +
- " <transition to='b' />" +
- " </start>" +
- " <state name='a'>" +
- " <transition to='done' />" +
- " </state>" +
- " <state name='b'>" +
- " <transition to='done' />" +
- " </state>" +
- " <end name='done' />" +
- " <transition to='end' />" +
- " </super-state>" +
- " <end name='end' />" +
- "</process>"
- );
-
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("theWayToGo", "left");
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super", variables);
- assertEquals("a", processInstance.getActivityName());
-
- processInstance = executionService.signalExecutionById(processInstance.getId());
- assertTrue(processInstance.isEnded());
-
- variables.put("theWayToGo", "right");
- processInstance = executionService.startProcessInstanceByKey("Super", variables);
- assertEquals("b", processInstance.getActivityName());
-
- processInstance = executionService.signalExecutionById(processInstance.getId());
- assertTrue(processInstance.isEnded());
- }
-
- public void testSuperStateDirectEntryTransition() {
- deployJpdlXmlString(
- "<process name='Super'>" +
- " <start>" +
- " <transition to='direct' />" +
- " </start>" +
- " <super-state name='super'>" +
- " <start name='direct'>" +
- " <transition to='a' />" +
- " </start>" +
- " <state name='a'>" +
- " <transition to='done' />" +
- " </state>" +
- " <end name='done' />" +
- " <transition to='end' />" +
- " </super-state>" +
- " <end name='end' />" +
- "</process>"
- );
-
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super");
- assertEquals("a", processInstance.getActivityName());
-
- processInstance = executionService.signalExecutionById(processInstance.getId());
- assertTrue(processInstance.isEnded());
- }
-
- public void testSuperStateWithoutEndActivity() {
- deployJpdlXmlString(
- "<process name='Super'>" +
- " <start>" +
- " <transition to='super' />" +
- " </start>" +
- " <super-state name='super'>" +
- " <start>" +
- " <transition to='a' />" +
- " </start>" +
- " <state name='a' />" +
- " <transition to='end' />" +
- " </super-state>" +
- " <end name='end' />" +
- "</process>"
- );
-
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super");
- assertEquals("a", processInstance.getActivityName());
-
- processInstance = executionService.signalExecutionById(processInstance.getId());
- assertTrue(processInstance.isEnded());
- }
-
- public void testSuperStateMultipleExitEndActivities() {
- deployJpdlXmlString(
- "<process name='Super'>" +
- " <start>" +
- " <transition to='super' />" +
- " </start>" +
- " <super-state name='super'>" +
- " <start>" +
- " <transition to='a' />" +
- " </start>" +
- " <state name='a'>" +
- " <transition name='a' to='exitA' />" +
- " <transition name='b' to='exitB' />" +
- " </state>" +
- " <end name='exitA'>" +
- " <transition to='endA' />" +
- " </end>" +
- " <end name='exitB'>" +
- " <transition to='endB' />" +
- " </end>" +
- " </super-state>" +
- " <end name='endA' />" +
- " <end name='endB' />" +
- "</process>"
- );
-
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super");
- assertEquals("a", processInstance.getActivityName());
-
- processInstance = executionService.signalExecutionById(processInstance.getId(), "a");
- assertTrue(processInstance.isEnded());
- assertEquals("endA", processInstance.getActivityName());
-
- processInstance = executionService.startProcessInstanceByKey("Super");
- assertEquals("a", processInstance.getActivityName());
-
- processInstance = executionService.signalExecutionById(processInstance.getId(), "b");
- assertTrue(processInstance.isEnded());
- assertEquals("endB", processInstance.getActivityName());
- }
-
- public void testSuperStateDirectExitTransition() {
- deployJpdlXmlString(
- "<process name='Super'>" +
- " <start>" +
- " <transition to='super' />" +
- " </start>" +
- " <super-state name='super'>" +
- " <start>" +
- " <transition to='a' />" +
- " </start>" +
- " <state name='a'>" +
- " <transition to='end' />" +
- " </state>" +
- " </super-state>" +
- " <end name='end' />" +
- "</process>"
- );
-
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super");
- assertEquals("a", processInstance.getActivityName());
-
- processInstance = executionService.signalExecutionById(processInstance.getId());
- assertTrue(processInstance.isEnded());
- }
-}
Modified: jbpm4/trunk/modules/userguide/src/main/docbook/en/modules/ch05-Jpdl.xml
===================================================================
--- jbpm4/trunk/modules/userguide/src/main/docbook/en/modules/ch05-Jpdl.xml 2009-05-16 15:38:55 UTC (rev 4829)
+++ jbpm4/trunk/modules/userguide/src/main/docbook/en/modules/ch05-Jpdl.xml 2009-05-17 09:55:43 UTC (rev 4830)
@@ -2189,13 +2189,13 @@
<para>A timer can be specified in the <literal>transition</literal>
element in wait state activities such as <literal>state</literal>s,
<literal>task</literal>s, <literal>sub-process</literal>es and
- <literal>super-state</literal>s.
+ <literal>group</literal>s.
When such a timer fires, that transition is taken.
</para>
<para>A timer can also be specified in custom events in wait state
activities such as <literal>state</literal>s,
<literal>task</literal>s, <literal>sub-process</literal>es and
- <literal>super-state</literal>s. The <literal>timer</literal> element
+ <literal>group</literal>s. The <literal>timer</literal> element
should then be the first element in the <literal>on</literal> element representing
the event. In that case the event fires upon the duedate of the timer.
</para>
15 years, 5 months
JBoss JBPM SVN: r4829 - in jbpm4/trunk/modules: test-db/src/test/java/org/jbpm/test/activities and 1 other directory.
by do-not-reply@jboss.org
Author: tom.baeyens(a)jboss.com
Date: 2009-05-16 11:38:55 -0400 (Sat, 16 May 2009)
New Revision: 4829
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndActivity.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java
Log:
JBPM-2026 added super state exit capabilities
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndActivity.java 2009-05-16 10:33:13 UTC (rev 4828)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndActivity.java 2009-05-16 15:38:55 UTC (rev 4829)
@@ -21,8 +21,12 @@
*/
package org.jbpm.jpdl.internal.activity;
+import java.util.List;
+
import org.jbpm.api.activity.ActivityExecution;
+import org.jbpm.api.model.Activity;
import org.jbpm.api.model.OpenExecution;
+import org.jbpm.api.model.Transition;
/**
@@ -36,18 +40,32 @@
protected String state = null;
public void execute(ActivityExecution execution) {
- OpenExecution executionToEnd = null;
- if (endProcessInstance) {
- executionToEnd = execution.getProcessInstance();
+ Activity activity = execution.getActivity();
+ List<Transition> outgoingTransitions = activity.getOutgoingTransitions();
+
+ Activity parentActivity = activity.getParentActivity();
+ if ( (parentActivity!=null)
+ && ("super-state".equals(parentActivity.getType()))
+ && (outgoingTransitions!=null)
+ && (outgoingTransitions.size()==1)
+ ) {
+ Transition outgoingTransition = outgoingTransitions.get(0);
+ execution.take(outgoingTransition);
+
} else {
- executionToEnd = execution;
+ OpenExecution executionToEnd = null;
+ if (endProcessInstance) {
+ executionToEnd = execution.getProcessInstance();
+ } else {
+ executionToEnd = execution;
+ }
+
+ if (state==null) {
+ execution.end(executionToEnd);
+ } else {
+ execution.end(executionToEnd, state);
+ }
}
-
- if (state==null) {
- execution.end(executionToEnd);
- } else {
- execution.end(executionToEnd, state);
- }
}
public void setEndProcessInstance(boolean endProcessInstance) {
Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java 2009-05-16 10:33:13 UTC (rev 4828)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java 2009-05-16 15:38:55 UTC (rev 4829)
@@ -60,7 +60,7 @@
assertTrue(processInstance.isEnded());
}
- public void testSuperStateStartActivityWithoutIncomingTransitions() {
+ public void testSuperStateWithoutStartActivity() {
deployJpdlXmlString(
"<process name='Super'>" +
" <start>" +
@@ -84,19 +84,29 @@
assertTrue(processInstance.isEnded());
}
- public void testSuperStateDirectEntry() {
+ public void testSuperStateMultipleEntryStartActivities() {
deployJpdlXmlString(
"<process name='Super'>" +
" <start>" +
- " <transition to='direct' />" +
+ " <transition to='choose' />" +
" </start>" +
+ " <decision name='choose' expr='#{theWayToGo}'>" +
+ " <transition name='left' to='left' />" +
+ " <transition name='right' to='right' />" +
+ " </decision>" +
" <super-state name='super'>" +
- " <start name='direct'>" +
+ " <start name='left'>" +
" <transition to='a' />" +
" </start>" +
+ " <start name='right'>" +
+ " <transition to='b' />" +
+ " </start>" +
" <state name='a'>" +
" <transition to='done' />" +
" </state>" +
+ " <state name='b'>" +
+ " <transition to='done' />" +
+ " </state>" +
" <end name='done' />" +
" <transition to='end' />" +
" </super-state>" +
@@ -104,36 +114,35 @@
"</process>"
);
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super");
+ Map<String, Object> variables = new HashMap<String, Object>();
+ variables.put("theWayToGo", "left");
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super", variables);
assertEquals("a", processInstance.getActivityName());
processInstance = executionService.signalExecutionById(processInstance.getId());
assertTrue(processInstance.isEnded());
+
+ variables.put("theWayToGo", "right");
+ processInstance = executionService.startProcessInstanceByKey("Super", variables);
+ assertEquals("b", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+ assertTrue(processInstance.isEnded());
}
- public void testSuperStateMultipleEntries() {
+ public void testSuperStateDirectEntryTransition() {
deployJpdlXmlString(
"<process name='Super'>" +
" <start>" +
- " <transition to='choose' />" +
+ " <transition to='direct' />" +
" </start>" +
- " <decision name='choose' expr='#{theWayToGo}'>" +
- " <transition name='left' to='left' />" +
- " <transition name='right' to='right' />" +
- " </decision>" +
" <super-state name='super'>" +
- " <start name='left'>" +
+ " <start name='direct'>" +
" <transition to='a' />" +
" </start>" +
- " <start name='right'>" +
- " <transition to='b' />" +
- " </start>" +
" <state name='a'>" +
" <transition to='done' />" +
" </state>" +
- " <state name='b'>" +
- " <transition to='done' />" +
- " </state>" +
" <end name='done' />" +
" <transition to='end' />" +
" </super-state>" +
@@ -141,19 +150,100 @@
"</process>"
);
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("theWayToGo", "left");
- ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super", variables);
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super");
assertEquals("a", processInstance.getActivityName());
processInstance = executionService.signalExecutionById(processInstance.getId());
assertTrue(processInstance.isEnded());
+ }
- variables.put("theWayToGo", "right");
- processInstance = executionService.startProcessInstanceByKey("Super", variables);
- assertEquals("b", processInstance.getActivityName());
+ public void testSuperStateWithoutEndActivity() {
+ deployJpdlXmlString(
+ "<process name='Super'>" +
+ " <start>" +
+ " <transition to='super' />" +
+ " </start>" +
+ " <super-state name='super'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a' />" +
+ " <transition to='end' />" +
+ " </super-state>" +
+ " <end name='end' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super");
+ assertEquals("a", processInstance.getActivityName());
processInstance = executionService.signalExecutionById(processInstance.getId());
assertTrue(processInstance.isEnded());
}
+
+ public void testSuperStateMultipleExitEndActivities() {
+ deployJpdlXmlString(
+ "<process name='Super'>" +
+ " <start>" +
+ " <transition to='super' />" +
+ " </start>" +
+ " <super-state name='super'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition name='a' to='exitA' />" +
+ " <transition name='b' to='exitB' />" +
+ " </state>" +
+ " <end name='exitA'>" +
+ " <transition to='endA' />" +
+ " </end>" +
+ " <end name='exitB'>" +
+ " <transition to='endB' />" +
+ " </end>" +
+ " </super-state>" +
+ " <end name='endA' />" +
+ " <end name='endB' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super");
+ assertEquals("a", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId(), "a");
+ assertTrue(processInstance.isEnded());
+ assertEquals("endA", processInstance.getActivityName());
+
+ processInstance = executionService.startProcessInstanceByKey("Super");
+ assertEquals("a", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId(), "b");
+ assertTrue(processInstance.isEnded());
+ assertEquals("endB", processInstance.getActivityName());
+ }
+
+ public void testSuperStateDirectExitTransition() {
+ deployJpdlXmlString(
+ "<process name='Super'>" +
+ " <start>" +
+ " <transition to='super' />" +
+ " </start>" +
+ " <super-state name='super'>" +
+ " <start>" +
+ " <transition to='a' />" +
+ " </start>" +
+ " <state name='a'>" +
+ " <transition to='end' />" +
+ " </state>" +
+ " </super-state>" +
+ " <end name='end' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super");
+ assertEquals("a", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+ assertTrue(processInstance.isEnded());
+ }
}
15 years, 5 months
JBoss JBPM SVN: r4828 - in jbpm4/trunk/modules: api/src/main/java/org/jbpm/api/activity and 7 other directories.
by do-not-reply@jboss.org
Author: tom.baeyens(a)jboss.com
Date: 2009-05-16 06:33:13 -0400 (Sat, 16 May 2009)
New Revision: 4828
Removed:
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/TransitionBasedConcurrencyTest.java
Modified:
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Execution.java
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityExecution.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkActivity.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JoinActivity.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/ExecutionType.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivityMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/SignalMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/AsyncCommandMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExecutionStateTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeStateTest.java
jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeVariableTest.java
Log:
JBPM-2026 updated fork and join to fit with execution.state updates in context of adding super-state
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Execution.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Execution.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Execution.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -35,12 +35,12 @@
* <h3 id="state">State of an execution</h3>
*
* <p>The state of an execution is either active or locked. An active execution is either
- * executing or waiting for an external trigger. If an execution is not in {@link #STATE_ACTIVE},
+ * executing or waiting for an external trigger. If an execution is not in {@link #STATE_ACTIVE_ROOT},
* then it is locked. A locked execution is read only.
* </p>
*
- * <p>When a new execution is created, it is in {@link #STATE_ACTIVE}.
- * {@link #STATE_ACTIVE Some STATE_* constants} are provided that represent the
+ * <p>When a new execution is created, it is in {@link #STATE_ACTIVE_ROOT}.
+ * {@link #STATE_ACTIVE_ROOT Some STATE_* constants} are provided that represent the
* most commonly used locked states. But the state '...' in the picture indicates
* that any string can be provided as the state in the lock method.
* </p>
@@ -58,7 +58,7 @@
* </p>
*
* <p>Make sure that comparisons between {@link #getState()} and the
- * {@link #STATE_ACTIVE STATE_* constants} are
+ * {@link #STATE_ACTIVE_ROOT STATE_* constants} are
* done with .equals and not with '==' because if executions are
* loaded from persistent storage, a new string is created instead
* of the constants.
@@ -77,15 +77,31 @@
* initializations of variables and timers */
String STATE_CREATED = "created";
- /** either executing or in a wait state waiting for a signal.
+ /** single (non-concurrent) path of execution that is an active indicator
+ * of the current position in the diagram. jBPM can be executing automatic
+ * activities or some external entity might be responsible for continuing the
+ * execution (wait state for jBPM). An active execution is always
+ * a leaf in the execution tree.
* This is the normal state of an execution and the initial state
* when creating a new execution. Make sure that comparisons are
* done with .equals and not with '==' because if executions are
* loaded from persistent storage, a new string is created instead
* of the constants. */
- String STATE_ACTIVE = "active";
-
- /** parents with concurrent child executions are inactive.
+ String STATE_ACTIVE_ROOT = "active-root";
+
+ /** concurrent path of execution that is an active indicator
+ * of the current position in the diagram. The parent of an active
+ * concurrent execution is always an inactive concurrent root. jBPM can
+ * be executing automatic
+ * activities or some external entity might be responsible for continuing the
+ * execution (wait state for jBPM).
+ * Make sure that comparisons are
+ * done with .equals and not with '==' because if executions are
+ * loaded from persistent storage, a new string is created instead
+ * of the constants. */
+ String STATE_ACTIVE_CONCURRENT = "active-concurrent";
+
+ /** parent of concurrent child executions.
* When an execution has concurrent child executions, it implies that
* this execution can't be active. For example, at a fork, the parent
* execution can wait inactively in the fork being till all the
@@ -94,14 +110,26 @@
* done with .equals and not with '==' because if executions are
* loaded from persistent storage, a new string is created instead
* of the constants. */
- String STATE_INACTIVE = "inactive";
+ String STATE_INACTIVE_CONCURRENT_ROOT = "inactive-concurrent-root";
- /** this execution has ended. Make sure that comparisons are
+ /** parent of a scoped execution. This execution is inactive,
+ * but points to the parent scope like e.g. a super-state.
+ * This execution has exactly 1 child execution. That indicates
+ * the state inside of the scope.
+ * Make sure that comparisons are
* done with .equals and not with '==' because if executions are
* loaded from persistent storage, a new string is created instead
* of the constants. */
- String STATE_ENDED = "ended";
-
+ String STATE_INACTIVE_SCOPE = "inactive-scope";
+
+ /** concurrent execution that is inactively waiting in a join
+ * until other concurrent executions arrive.
+ * Make sure that comparisons are
+ * done with .equals and not with '==' because if executions are
+ * loaded from persistent storage, a new string is created instead
+ * of the constants. */
+ String STATE_INACTIVE_JOIN = "inactive-join";
+
/** indicates that this execution is temporary suspended with the
* {@link #suspend()} method. Human tasks of a suspended execution
* shouldn't show up in people's task list and timers of suspended
@@ -114,6 +142,12 @@
/** indicates that this execution is doing an asynchronous continuation. */
String STATE_ASYNC = "async";
+ /** this execution has ended. Make sure that comparisons are
+ * done with .equals and not with '==' because if executions are
+ * loaded from persistent storage, a new string is created instead
+ * of the constants. */
+ String STATE_ENDED = "ended";
+
/** the externally given name or id of this execution. The id of a main
* path of execution is null. Can be used to differentiate concurrent
* paths of execution e.g. the shipping and billing paths. */
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityExecution.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityExecution.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/activity/ActivityExecution.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -148,7 +148,7 @@
* status.
*
* <p>It is not recommended to use any of
- * {@link #STATE_ACTIVE the defined statuses} as that may case unpredictable
+ * {@link Execution the defined statuses in Execution} as that may case unpredictable
* side effects.</p>
*
* <p>The execution will be removed from it's parent.</p> */
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkActivity.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkActivity.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -21,12 +21,13 @@
*/
package org.jbpm.jpdl.internal.activity;
+import java.util.ArrayList;
import java.util.List;
import org.jbpm.api.Execution;
import org.jbpm.api.activity.ActivityExecution;
import org.jbpm.api.model.Activity;
-import org.jbpm.api.model.OpenExecution;
+import org.jbpm.api.model.Condition;
import org.jbpm.api.model.Transition;
import org.jbpm.pvm.internal.model.ExecutionImpl;
@@ -38,25 +39,53 @@
private static final long serialVersionUID = 1L;
- public void execute(ActivityExecution execution) throws Exception {
- OpenExecution processInstance = execution.getProcessInstance();
+ public void execute(ActivityExecution execution) {
+ execute((ExecutionImpl)execution);
+ }
+ public void execute(ExecutionImpl execution) {
Activity activity = execution.getActivity();
+
+ // evaluate the conditions and find the transitions that should be forked
+ List<Transition> forkingTransitions = new ArrayList<Transition>();
List<Transition> outgoingTransitions = activity.getOutgoingTransitions();
-
- // for each outgoing transition
- for (Transition outgoingTransition: outgoingTransitions) {
- // launch a concurrent path of execution
- String childExecutionName = outgoingTransition.getName();
- // creating the execution will cause the execution to become inactive
- ExecutionImpl executionImpl = (ExecutionImpl) execution;
- Execution childExecution = executionImpl.createExecution(childExecutionName, processInstance);
- execution.take(outgoingTransition, childExecution);
+ for (Transition transition: outgoingTransitions) {
+ Condition condition = transition.getCondition();
+ if ( (condition==null)
+ || (condition.evaluate(execution))
+ ) {
+ forkingTransitions.add(transition);
+ }
}
- // if this was the first fork
- if (execution.isProcessInstance()) {
- execution.setActivity(null);
+ // if no outgoing transitions should be forked,
+ if (forkingTransitions.size()==0) {
+ // end this execution
+ execution.end();
+
+ // if there is exactly 1 transition to be taken, just use the incoming execution
+ } else if (forkingTransitions.size()==1) {
+ execution.take(forkingTransitions.get(0));
+
+ // if there are more transitions
+ } else {
+ ExecutionImpl concurrentRoot = null;
+ if (Execution.STATE_ACTIVE_ROOT.equals(execution.getState())) {
+ concurrentRoot = execution;
+ execution.setState(Execution.STATE_INACTIVE_CONCURRENT_ROOT);
+ execution.setActivity(null);
+ } else if (Execution.STATE_ACTIVE_CONCURRENT.equals(execution.getState())) {
+ concurrentRoot = execution.getParent();
+ }
+
+ for (Transition transition: forkingTransitions) {
+ // launch a concurrent path of execution
+ String childExecutionName = transition.getName();
+ ExecutionImpl concurrentExecution = concurrentRoot.createExecution(childExecutionName);
+ concurrentExecution.setActivity(activity);
+ concurrentExecution.setState(Execution.STATE_ACTIVE_CONCURRENT);
+ concurrentExecution.take(transition);
+ }
}
}
}
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JoinActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JoinActivity.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JoinActivity.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -26,6 +26,7 @@
import java.util.List;
import org.jbpm.api.Execution;
+import org.jbpm.api.JbpmException;
import org.jbpm.api.activity.ActivityExecution;
import org.jbpm.api.model.Activity;
import org.jbpm.api.model.OpenExecution;
@@ -39,65 +40,76 @@
public class JoinActivity extends JpdlActivity {
private static final long serialVersionUID = 1L;
+
+ int multiplicity = -1;
- public void execute(ActivityExecution execution) throws Exception {
- // end the child execution execution
- // this will also remove the execution from it's parent
- execution.setState(Execution.STATE_INACTIVE);
- execution.waitForSignal();
+ public void execute(ActivityExecution execution) {
+ execute((ExecutionImpl)execution);
+ }
+
+ public void execute(ExecutionImpl execution) {
+ Activity activity = execution.getActivity();
- Activity join = execution.getActivity();
- List<OpenExecution> joinedExecutions = findJoinedExecutions(execution, join);
-
- if (isComplete(joinedExecutions, join)) {
- endJoinedExecutions(joinedExecutions, execution);
+ // if this is a single, non concurrent root
+ if (Execution.STATE_ACTIVE_ROOT.equals(execution.getState())) {
+ // just pass through
+ Transition transition = activity.getDefaultOutgoingTransition();
+ execution.take(transition);
+
+ } else if (Execution.STATE_ACTIVE_CONCURRENT.equals(execution.getState())) {
- OpenExecution processInstance = execution.getProcessInstance();
+ execution.setState(Execution.STATE_INACTIVE_JOIN);
+ execution.waitForSignal();
+
+ ExecutionImpl concurrentRoot = execution.getParent();
+ List<ExecutionImpl> joinedExecutions = getJoinedExecutions(concurrentRoot, activity);
- Execution outgoingExecution = null;
- if ( processInstance.getExecutions()==null
- || processInstance.getExecutions().isEmpty()
- ) {
- outgoingExecution = processInstance;
- } else {
- ExecutionImpl executionImpl = (ExecutionImpl) execution;
- outgoingExecution = executionImpl.createExecution(processInstance);
+ if (isComplete(joinedExecutions, activity)) {
+ endJoinedExecutions(joinedExecutions);
+
+ ExecutionImpl outgoingExecution = null;
+ if (concurrentRoot.getExecutions().size()==0) {
+ outgoingExecution = concurrentRoot;
+ outgoingExecution.setState(Execution.STATE_ACTIVE_ROOT);
+ } else {
+ outgoingExecution = concurrentRoot.createExecution();
+ outgoingExecution.setState(Execution.STATE_ACTIVE_CONCURRENT);
+ }
+
+ execution.setActivity(activity, outgoingExecution);
+ Transition transition = activity.getDefaultOutgoingTransition();
+ outgoingExecution.take(transition);
}
- execution.setActivity(join, outgoingExecution);
- Transition transition = join.getDefaultOutgoingTransition();
- execution.take(transition, outgoingExecution);
+ } else {
+ throw new JbpmException("invalid execution state");
}
}
- List<OpenExecution> findJoinedExecutions(OpenExecution execution, Activity join) {
- List<OpenExecution> joinedExecutions = new ArrayList<OpenExecution>();
- scanRecursive((OpenExecution)execution.getProcessInstance(), join, joinedExecutions);
- return joinedExecutions;
+ protected boolean isComplete(List<ExecutionImpl> joinedExecutions, Activity activity) {
+ int nbrOfExecutionsToJoin = multiplicity;
+ if (multiplicity==-1) {
+ nbrOfExecutionsToJoin = activity.getIncomingTransitions().size();
+ }
+ return joinedExecutions.size()==nbrOfExecutionsToJoin;
}
- void scanRecursive(OpenExecution execution, Activity join, List<OpenExecution> joinedExecutions) {
- // if the execution is positioned in the join
- if (join.equals(execution.getActivity())) {
- joinedExecutions.add(execution);
- }
- Collection<OpenExecution> childExecutions = (Collection)execution.getExecutions();
- if (childExecutions!=null) {
- for (OpenExecution childExecution: childExecutions) {
- scanRecursive(childExecution, join, joinedExecutions);
+ protected List<ExecutionImpl> getJoinedExecutions(ExecutionImpl concurrentRoot, Activity activity) {
+ List<ExecutionImpl> joinedExecutions = new ArrayList<ExecutionImpl>();
+ List concurrentExecutions = (List)concurrentRoot.getExecutions();
+ for (ExecutionImpl concurrentExecution: (List<ExecutionImpl>)concurrentExecutions) {
+ if ( (Execution.STATE_INACTIVE_JOIN.equals(concurrentExecution.getState()))
+ && (concurrentExecution.getActivity()==activity)
+ ) {
+ joinedExecutions.add(concurrentExecution);
}
}
+ return joinedExecutions;
}
- boolean isComplete(List<OpenExecution> joinedExecutions, Activity join) {
- int executionsToJoin = join.getIncomingTransitions().size();
- return (executionsToJoin==joinedExecutions.size());
- }
-
- void endJoinedExecutions(List<OpenExecution> joinedExecutions, ActivityExecution execution) {
- for (OpenExecution joinedExecution: joinedExecutions) {
- execution.end(joinedExecution);
+ protected void endJoinedExecutions(List<ExecutionImpl> joinedExecutions) {
+ for (ExecutionImpl joinedExecution: joinedExecutions) {
+ joinedExecution.end();
}
}
-
}
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -25,11 +25,13 @@
import java.util.List;
import java.util.Map;
+import org.jbpm.api.Execution;
import org.jbpm.api.JbpmException;
import org.jbpm.api.activity.ActivityExecution;
import org.jbpm.api.model.Activity;
import org.jbpm.api.model.Transition;
import org.jbpm.pvm.internal.model.ActivityImpl;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
/**
@@ -40,11 +42,31 @@
private static final long serialVersionUID = 1L;
public void execute(ActivityExecution execution) throws Exception {
+ execute((ExecutionImpl)execution);
+ }
+ public void execute(ExecutionImpl execution) throws Exception {
// find the start activity
Activity activity = execution.getActivity();
List<Activity> startActivities = findStartActivities(activity);
if (startActivities.size()==1) {
execution.execute(startActivities.get(0));
+ } else {
+
+ ExecutionImpl concurrentRoot = null;
+ if (Execution.STATE_ACTIVE_ROOT.equals(execution.getState())) {
+ concurrentRoot = execution;
+ } else if (Execution.STATE_ACTIVE_ROOT.equals(execution.getState())) {
+ concurrentRoot = execution.getParent();
+
+ } else {
+ throw new JbpmException("illegal state");
+ }
+
+ for (Activity startActivity: startActivities) {
+ ExecutionImpl concurrentExecution = concurrentRoot.createExecution();
+ concurrentExecution.setState(Execution.STATE_ACTIVE_CONCURRENT);
+ concurrentExecution.execute(startActivity);
+ }
}
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/ExecutionType.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/ExecutionType.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/hibernate/ExecutionType.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -42,7 +42,7 @@
String activityName = rs.getString(names[0]);
ActivityImpl activity = (ActivityImpl) execution.getProcessDefinition().getActivity(activityName);
execution.setActivity(activity);
- execution.setState(Execution.STATE_ACTIVE);
+ execution.setState(Execution.STATE_ACTIVE_ROOT);
return execution;
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -191,7 +191,7 @@
if (state!=STATE_CREATED) {
throw new JbpmException(toString()+" is already begun: "+state);
}
- this.state = STATE_ACTIVE;
+ this.state = STATE_ACTIVE_ROOT;
ExecutionImpl scopedExecution = initializeScopes();
fireHistoryEvent(new ProcessInstanceStart());
@@ -235,6 +235,9 @@
public ExecutionImpl createScope(ScopeElementImpl scope) {
ExecutionImpl child = createExecution(scope.getName());
+ setState(STATE_INACTIVE_SCOPE);
+ child.setState(STATE_ACTIVE_ROOT);
+
// copy the current state from the child execution to the parent execution
child.setActivity(getActivity());
child.setTransition(getTransition());
@@ -253,13 +256,22 @@
destroyTimers(scope);
// copy the current state from the child execution to the parent execution
- getParent().setActivity(getActivity());
- getParent().setTransition(getTransition());
- getParent().setPropagation(getPropagation());
- getParent().setTransitionOrigin(getTransitionOrigin());
- getParent().setPreviousTransition(getPreviousTransition());
- getParent().setPreviousActivity(getPreviousActivity());
+ parent.setActivity(getActivity());
+ parent.setTransition(getTransition());
+ parent.setPropagation(getPropagation());
+ parent.setTransitionOrigin(getTransitionOrigin());
+ parent.setPreviousTransition(getPreviousTransition());
+ parent.setPreviousActivity(getPreviousActivity());
+ ExecutionImpl parentsParent = parent.getParent();
+ if ( (parentsParent!=null)
+ && (STATE_INACTIVE_CONCURRENT_ROOT.equals(parentsParent.getState()))
+ ) {
+ parent.setState(STATE_ACTIVE_CONCURRENT);
+ } else {
+ parent.setState(STATE_ACTIVE_ROOT);
+ }
+
end();
return parent;
@@ -287,9 +299,13 @@
if (state==null) {
throw new JbpmException("state is null");
}
- if (state.equals(STATE_ACTIVE)
- || state.equals(STATE_CREATED)
- || state.equals(STATE_INACTIVE)
+
+ if (state.equals(STATE_CREATED)
+ || state.equals(STATE_ACTIVE_ROOT)
+ || state.equals(STATE_ACTIVE_CONCURRENT)
+ || state.equals(STATE_INACTIVE_CONCURRENT_ROOT)
+ || state.equals(STATE_INACTIVE_SCOPE)
+ || state.equals(STATE_INACTIVE_JOIN)
|| state.equals(STATE_SUSPENDED)
|| state.equals(STATE_ASYNC)) {
throw new JbpmException("invalid end state: "+state);
@@ -730,47 +746,29 @@
// child executions /////////////////////////////////////////////////////////
- /** @see Execution#createProcessInstance() */
public ExecutionImpl createExecution() {
- return createExecution((String)null);
+ return createExecution(null);
}
- public Execution createExecution(Execution parent) {
- return ((ExecutionImpl)parent).createExecution();
- }
-
- public Execution createExecution(String name, Execution parent) {
- return ((ExecutionImpl)parent).createExecution(name);
- }
-
- /** @see Execution#createProcessInstance(String) */
public ExecutionImpl createExecution(String name) {
- // creating a child execution implies that this execution
- // is not a leave any more and therefore, it is inactivated
- if (isActive()) {
- setState(STATE_INACTIVE);
- propagation = Propagation.EXPLICIT;
- }
+ // ?!
+ propagation = Propagation.EXPLICIT;
// create child execution
ExecutionImpl childExecution = newChildExecution();
+ addExecution(childExecution);
+
+ // initialize new concurrent execution
childExecution.setProcessDefinition(getProcessDefinition());
- childExecution.setActivity(getActivity());
childExecution.processInstance = this.processInstance;
- childExecution.state = STATE_ACTIVE;
childExecution.name = name;
log.debug("creating "+childExecution);
- // add it to this execution
- addExecution(childExecution);
- // invalidate the cached executionsMap
- executionsMap = null;
-
- // id generation
+
+ // id generation (after initialization)
IdGenerator keyGenerator = Environment.getFromCurrent(IdGenerator.class, false);
if (keyGenerator!=null) {
childExecution.id = keyGenerator.createId(getProcessDefinition(), this, childExecution);
}
-
return childExecution;
}
@@ -786,6 +784,7 @@
executions = new ArrayList<ExecutionImpl>();
}
executions.add(executionImpl);
+ executionsMap = null;
}
/** @see Execution#getExecution(String) */
@@ -797,16 +796,6 @@
public void removeExecution(Execution child) {
if (executions!=null) {
if (executions.remove(child)) {
- if ( state.equals(STATE_INACTIVE) &&
- (executions.isEmpty())
- ) {
- if (log.isTraceEnabled()) {
- log.trace("last child execution was removed; unlocking");
- }
- state = STATE_ACTIVE;
- } else if (log.isTraceEnabled()) {
- log.trace("removed "+child+" from "+this);
- }
// invalidate the executionsMap cache
executionsMap = null;
} else {
@@ -815,10 +804,6 @@
}
}
- public void removeExecution(Execution child, Execution parent) {
- ((ExecutionImpl)parent).removeExecution(child);
- }
-
public Map<String, Execution> getExecutionsMap() {
if ( (executionsMap==null)
&& (executions!=null)
@@ -848,7 +833,7 @@
}
protected Set<String> addActiveActivityNames(Set<String> activityNames) {
- if ( (state.equals(STATE_ACTIVE))
+ if ( (state.equals(STATE_ACTIVE_ROOT))
&& (activityName!=null)
) {
activityNames.add(activityName);
@@ -865,7 +850,7 @@
public ExecutionImpl findActiveExecutionIn(String activityName) {
if ( activityName.equals(this.activityName)
- && state.equals(STATE_ACTIVE)) {
+ && isActive()) {
return this;
}
@@ -931,10 +916,38 @@
}
protected void checkActive() {
- if (!Execution.STATE_ACTIVE.equals(state)) {
+ if (!isActive()) {
throw new JbpmException(toString()+" is not active: "+state);
}
}
+
+ public boolean isEnded() {
+ if (Execution.STATE_ENDED.equals(state)) {
+ return true;
+ }
+ if (Execution.STATE_CREATED.equals(state)) {
+ return false;
+ }
+ if (Execution.STATE_ACTIVE_ROOT.equals(state)) {
+ return false;
+ }
+ if (Execution.STATE_ACTIVE_CONCURRENT.equals(state)) {
+ return false;
+ }
+ if (Execution.STATE_INACTIVE_CONCURRENT_ROOT.equals(state)) {
+ return false;
+ }
+ if (Execution.STATE_INACTIVE_SCOPE.equals(state)) {
+ return false;
+ }
+ if (Execution.STATE_SUSPENDED.equals(state)) {
+ return false;
+ }
+ if (Execution.STATE_ASYNC.equals(state)) {
+ return false;
+ }
+ return true;
+ }
////////////////////////////////////////////////////////////////////////////////
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -33,6 +33,8 @@
import org.jbpm.api.Execution;
import org.jbpm.api.JbpmException;
+import org.jbpm.api.client.ClientExecution;
+import org.jbpm.api.client.ClientProcessDefinition;
import org.jbpm.api.env.Environment;
import org.jbpm.api.job.Timer;
import org.jbpm.api.session.TimerSession;
@@ -90,10 +92,6 @@
}
public void createVariable(String key, Object value, String typeName) {
- if (isEnded()) {
- throw new JbpmException("can't create variable '"+key+"' on "+this+": "+state);
- }
-
log.debug("create variable '"+key+"' in '"+this+"' with value '"+value+"'");
Type type = null;
@@ -147,9 +145,6 @@
}
public void setVariable(String key, Object value) {
- if (isEnded()) {
- throw new JbpmException("can't update variable '"+key+"' on "+this+": "+state);
- }
Variable variable = getVariableObject(key);
// if there is already a variable instance and it doesn't support the current type...
if ( (variable!=null)
@@ -250,10 +245,6 @@
}
public boolean removeVariable(String key) {
- if (isEnded()) {
- throw new JbpmException("can't remove variable '"+key+"' on "+this+": "+state);
- }
-
Variable variable = null;
if (hasVariables) {
variable = variables.remove(key);
@@ -429,19 +420,14 @@
/** @see Execution#isActive() */
public boolean isActive() {
- return Execution.STATE_ACTIVE.equals(state);
+ return Execution.STATE_ACTIVE_ROOT.equals(state)
+ || Execution.STATE_ACTIVE_CONCURRENT.equals(state);
}
- /** @see Execution#isSuspended() */
public boolean isSuspended() {
return Execution.STATE_SUSPENDED.equals(state);
}
- /** @see Execution#isEnded() */
- public boolean isEnded() {
- return Execution.STATE_ENDED.equals(state);
- }
-
// customizable methods /////////////////////////////////////////////////////
public ExecutionImpl getProcessInstance() {
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivityMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivityMessage.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivityMessage.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -42,7 +42,7 @@
}
public Object execute(Environment environment) throws Exception {
- execution.setState(Execution.STATE_ACTIVE);
+ execution.setState(Execution.STATE_ACTIVE_ROOT);
execution.performAtomicOperationSync(ExecutionImpl.EXECUTE_ACTIVITY);
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -43,7 +43,7 @@
}
public Object execute(Environment environment) throws Exception {
- execution.setState(Execution.STATE_ACTIVE);
+ execution.setState(Execution.STATE_ACTIVE_ROOT);
execution.performAtomicOperationSync(ExecutionImpl.PROCEED_TO_DESTINATION);
JobDbSession jobDbSession = environment.get(JobDbSession.class);
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/SignalMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/SignalMessage.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/SignalMessage.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -48,7 +48,7 @@
}
public Object execute(Environment environment) throws Exception {
- execution.setState(Execution.STATE_ACTIVE);
+ execution.setState(Execution.STATE_ACTIVE_ROOT);
Signal signal = new Signal(signalName, null, activity);
execution.performAtomicOperationSync(signal);
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -42,7 +42,7 @@
}
public Object execute(Environment environment) throws Exception {
- execution.setState(Execution.STATE_ACTIVE);
+ execution.setState(Execution.STATE_ACTIVE_ROOT);
execution.performAtomicOperationSync(ExecutionImpl.TAKE_TRANSITION);
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/AsyncCommandMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/AsyncCommandMessage.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/AsyncCommandMessage.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -48,7 +48,7 @@
}
public Object execute(Environment environment) throws Exception {
- execution.setState(Execution.STATE_ACTIVE);
+ execution.setState(Execution.STATE_ACTIVE_ROOT);
if (userId!=null) {
environment.setUserId(userId);
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -64,6 +64,9 @@
private static final TaskHandler DEFAULT_TASK_HANDLER = new TaskHandler();
+ public static final String STATE_CREATED = "created";
+ public static final String STATE_ASSIGNED = "assigned";
+ public static final String STATE_COMPLETED = "completed";
public static final String STATE_SUSPENDED = "suspended";
public static final String STATE_ACTIVE = "active";
@@ -210,6 +213,15 @@
getTaskHandler().taskCancel(this, reason);
}
+ // state ////////////////////////////////////////////////////////////////////
+
+ public boolean isCompleted() {
+ if (STATE_COMPLETED.equals(state)) {
+ return true;
+ }
+ return false;
+ }
+
// variables ////////////////////////////////////////////////////////////////
public void setVariable(String key, Object value) {
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExecutionStateTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExecutionStateTest.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ExecutionStateTest.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -60,18 +60,18 @@
public static class AutomaticActivity implements ActivityBehaviour {
private static final long serialVersionUID = 1L;
public void execute(ActivityExecution execution) {
- assertEquals(Execution.STATE_ACTIVE, execution.getState());
+ assertEquals(Execution.STATE_ACTIVE_ROOT, execution.getState());
}
}
public static class WaitState implements ExternalActivityBehaviour {
private static final long serialVersionUID = 1L;
public void execute(ActivityExecution execution) {
- assertEquals(Execution.STATE_ACTIVE, execution.getState());
+ assertEquals(Execution.STATE_ACTIVE_ROOT, execution.getState());
execution.waitForSignal();
}
public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
- assertEquals(Execution.STATE_ACTIVE, execution.getState());
+ assertEquals(Execution.STATE_ACTIVE_ROOT, execution.getState());
execution.take(signalName);
}
}
@@ -95,7 +95,7 @@
processInstance.start();
- assertEquals(Execution.STATE_ACTIVE, processInstance.getState());
+ assertEquals(Execution.STATE_ACTIVE_ROOT, processInstance.getState());
processInstance.signal();
@@ -119,7 +119,7 @@
ClientProcessInstance processInstance = processDefinition.createProcessInstance();
processInstance.start();
- assertEquals(Execution.STATE_INACTIVE, processInstance.getState());
+ assertEquals(Execution.STATE_INACTIVE_SCOPE, processInstance.getState());
try {
processInstance.signal();
@@ -176,39 +176,53 @@
processInstance.start();
try {
- processInstance.end("active");
+ processInstance.end(Execution.STATE_CREATED);
fail("expected exception");
} catch (JbpmException e) {
// OK
- assertTextPresent("invalid end state: active", e.getMessage());
+ assertTextPresent("invalid end state: "+Execution.STATE_CREATED, e.getMessage());
}
try {
- processInstance.end("suspended");
+ processInstance.end(Execution.STATE_ACTIVE_ROOT);
fail("expected exception");
} catch (JbpmException e) {
// OK
- assertTextPresent("invalid end state: suspended", e.getMessage());
+ assertTextPresent("invalid end state: "+Execution.STATE_ACTIVE_ROOT, e.getMessage());
}
try {
- processInstance.end("created");
+ processInstance.end(Execution.STATE_ACTIVE_CONCURRENT);
fail("expected exception");
} catch (JbpmException e) {
// OK
- assertTextPresent("invalid end state: created", e.getMessage());
+ assertTextPresent("invalid end state: "+Execution.STATE_ACTIVE_CONCURRENT, e.getMessage());
}
try {
- processInstance.end("async");
+ processInstance.end(Execution.STATE_INACTIVE_CONCURRENT_ROOT);
fail("expected exception");
} catch (JbpmException e) {
// OK
- assertTextPresent("invalid end state: async", e.getMessage());
+ assertTextPresent("invalid end state: "+Execution.STATE_INACTIVE_CONCURRENT_ROOT, e.getMessage());
}
try {
- processInstance.end("inactive");
+ processInstance.end(Execution.STATE_INACTIVE_SCOPE);
fail("expected exception");
} catch (JbpmException e) {
// OK
- assertTextPresent("invalid end state: inactive", e.getMessage());
+ assertTextPresent("invalid end state: "+Execution.STATE_INACTIVE_SCOPE, e.getMessage());
}
+ try {
+ processInstance.end(Execution.STATE_SUSPENDED);
+ fail("expected exception");
+ } catch (JbpmException e) {
+ // OK
+ assertTextPresent("invalid end state: "+Execution.STATE_SUSPENDED, e.getMessage());
+ }
+ try {
+ processInstance.end(Execution.STATE_ASYNC);
+ fail("expected exception");
+ } catch (JbpmException e) {
+ // OK
+ assertTextPresent("invalid end state: "+Execution.STATE_ASYNC, e.getMessage());
+ }
}
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeStateTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeStateTest.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeStateTest.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -41,18 +41,18 @@
public static class AutomaticActivity implements ActivityBehaviour {
private static final long serialVersionUID = 1L;
public void execute(ActivityExecution execution) {
- assertEquals(Execution.STATE_ACTIVE, execution.getState());
+ assertEquals(Execution.STATE_ACTIVE_ROOT, execution.getState());
}
}
public static class WaitState implements ExternalActivityBehaviour {
private static final long serialVersionUID = 1L;
public void execute(ActivityExecution execution) {
- assertEquals(Execution.STATE_ACTIVE, execution.getState());
+ assertEquals(Execution.STATE_ACTIVE_ROOT, execution.getState());
execution.waitForSignal();
}
public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
- assertEquals(Execution.STATE_ACTIVE, execution.getState());
+ assertEquals(Execution.STATE_ACTIVE_ROOT, execution.getState());
execution.take(signalName);
}
}
@@ -79,12 +79,12 @@
processInstance.start();
Execution scopeExecution = processInstance.getExecutions().iterator().next();
- assertEquals(Execution.STATE_INACTIVE, processInstance.getState());
- assertEquals(Execution.STATE_ACTIVE, scopeExecution.getState());
+ assertEquals(Execution.STATE_INACTIVE_SCOPE, processInstance.getState());
+ assertEquals(Execution.STATE_ACTIVE_ROOT, scopeExecution.getState());
processInstance.signal(scopeExecution);
assertEquals(Execution.STATE_ENDED, scopeExecution.getState());
- assertEquals(Execution.STATE_ACTIVE, processInstance.getState());
+ assertEquals(Execution.STATE_ACTIVE_ROOT, processInstance.getState());
}
}
Modified: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeVariableTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeVariableTest.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/ScopeVariableTest.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -199,14 +199,5 @@
bScope.createVariable("temp", "28C");
processInstance.signal(bScope);
-
- try {
- bScope.setVariable("temp", "21C");
- fail("expected exception");
- } catch (JbpmException e) {
- // OK
- assertTextPresent("can't update variable 'temp' on execution[b]", e.getMessage());
- }
}
-
}
Deleted: jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/TransitionBasedConcurrencyTest.java
===================================================================
--- jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/TransitionBasedConcurrencyTest.java 2009-05-15 19:55:27 UTC (rev 4827)
+++ jbpm4/trunk/modules/test-pojo/src/main/java/org/jbpm/test/activities/TransitionBasedConcurrencyTest.java 2009-05-16 10:33:13 UTC (rev 4828)
@@ -1,187 +0,0 @@
-package org.jbpm.test.activities;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import org.jbpm.api.Execution;
-import org.jbpm.api.activity.ActivityBehaviour;
-import org.jbpm.api.activity.ActivityExecution;
-import org.jbpm.api.activity.ExternalActivityBehaviour;
-import org.jbpm.api.client.ClientExecution;
-import org.jbpm.api.client.ClientProcessDefinition;
-import org.jbpm.api.model.Activity;
-import org.jbpm.api.model.OpenExecution;
-import org.jbpm.api.model.Transition;
-import org.jbpm.pvm.internal.builder.ProcessDefinitionBuilder;
-import org.jbpm.pvm.internal.model.ExecutionImpl;
-import org.jbpm.test.BaseJbpmTestCase;
-
-/**
- * concurrent execution where synchronization is done by checking if the
- * number of expected child executions arrived at the join.
- *
- * @author Tom Baeyens
- */
-public class TransitionBasedConcurrencyTest extends BaseJbpmTestCase {
-
- public static class Fork implements ActivityBehaviour {
- private static final long serialVersionUID = 1L;
- public void execute(ActivityExecution execution) {
- OpenExecution processInstance = execution.getProcessInstance();
-
- Activity activity = execution.getActivity();
- List<Transition> outgoingTransitions = activity.getOutgoingTransitions();
-
- // for each outgoing transition
- for (Transition outgoingTransition: outgoingTransitions) {
- // launch a concurrent path of execution
- String childExecutionName = outgoingTransition.getName();
- // creating the execution will cause the execution to become inactive
- ExecutionImpl executionImpl = (ExecutionImpl) execution;
- Execution childExecution = executionImpl.createExecution(childExecutionName, processInstance);
- execution.take(outgoingTransition, childExecution);
- }
-
- // if this was the first fork
- if (execution.isProcessInstance()) {
- execution.setActivity(null);
- }
- }
- }
-
- public static class Join implements ActivityBehaviour {
- private static final long serialVersionUID = 1L;
- public void execute(ActivityExecution execution) throws Exception {
- // end the child execution execution
- // this will also remove the execution from it's parent
- execution.setState(Execution.STATE_INACTIVE);
- execution.waitForSignal();
-
- Activity join = execution.getActivity();
- List<OpenExecution> joinedExecutions = findJoinedExecutions(execution, join);
-
- if (isComplete(joinedExecutions, join)) {
- endJoinedExecutions(joinedExecutions, execution);
-
- OpenExecution processInstance = execution.getProcessInstance();
-
- Execution outgoingExecution = null;
- if ( processInstance.getExecutions()==null
- || processInstance.getExecutions().isEmpty()
- ) {
- outgoingExecution = processInstance;
- } else {
- ExecutionImpl executionImpl = (ExecutionImpl) execution;
- outgoingExecution = executionImpl.createExecution(processInstance);
- }
-
- execution.setActivity(join, outgoingExecution);
- Transition transition = join.getDefaultOutgoingTransition();
- execution.take(transition, outgoingExecution);
- }
- }
-
- List<OpenExecution> findJoinedExecutions(OpenExecution execution, Activity join) {
- List<OpenExecution> joinedExecutions = new ArrayList<OpenExecution>();
- scanRecursive(execution.getProcessInstance(), join, joinedExecutions);
- return joinedExecutions;
- }
-
- void scanRecursive(OpenExecution execution, Activity join, List<OpenExecution> joinedExecutions) {
- // if the execution is positioned in the join
- if (join.equals(execution.getActivity())) {
- joinedExecutions.add(execution);
- }
- Collection<OpenExecution> childExecutions = (List)execution.getExecutions();
- if (childExecutions!=null) {
- for (OpenExecution childExecution: childExecutions) {
- scanRecursive(childExecution, join, joinedExecutions);
- }
- }
- }
-
- boolean isComplete(List<OpenExecution> joinedExecutions, Activity join) {
- int executionsToJoin = join.getIncomingTransitions().size();
- return (executionsToJoin==joinedExecutions.size());
- }
-
- void endJoinedExecutions(List<OpenExecution> joinedExecutions, ActivityExecution execution) {
- for (OpenExecution joinedExecution: joinedExecutions) {
- execution.end(joinedExecution);
- }
- }
- }
-
- public static class WaitState implements ExternalActivityBehaviour {
- private static final long serialVersionUID = 1L;
- public void execute(ActivityExecution execution) {
- execution.waitForSignal();
- }
- public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) {
- execution.take(signalName);
- }
- }
-
- public void testTransitionBasedConcurrency() {
-
- ClientProcessDefinition processDefinition = ProcessDefinitionBuilder
- .startProcess()
- .startActivity("fork", new Fork())
- .initial()
- .transition("bill", "billing")
- .transition("ship", "shipping")
- .endActivity()
- .startActivity("bill", new WaitState())
- .transition("join")
- .endActivity()
- .startActivity("ship", new WaitState())
- .transition("join")
- .endActivity()
- .startActivity("join", new Join())
- .transition("end")
- .endActivity()
- .startActivity("end", new WaitState())
- .endActivity()
- .endProcess();
-
- ClientExecution main = processDefinition.startProcessInstance();
-
- assertNull("fork", main.getActivity());
- assertEquals(Execution.STATE_INACTIVE, main.getState());
-
- Execution billing = main.getExecution("billing");
- assertNotNull(billing);
- assertEquals("bill", billing.getActivityName());
- assertFalse(billing.isEnded());
-
- Execution shipping = main.getExecution("shipping");
-
- assertNotNull(shipping);
- assertEquals("ship", shipping.getActivityName());
- assertFalse(shipping.isEnded());
- assertTrue(main.getExecutions().contains(billing));
- assertTrue(main.getExecutions().contains(shipping));
-
- main.signal(billing);
-
- assertNull(main.getActivityName());
- assertEquals("join", billing.getActivityName());
- assertEquals("ship", shipping.getActivityName());
- assertEquals(Execution.STATE_ACTIVE, shipping.getState());
- assertEquals(Execution.STATE_INACTIVE, billing.getState());
- assertEquals(Execution.STATE_INACTIVE, main.getState());
-
- main.signal(shipping);
-
- assertEquals(Execution.STATE_ACTIVE, main.getState());
- assertEquals("end", main.getActivityName());
- assertEquals("join", billing.getActivityName());
- assertTrue(billing.isEnded());
- assertEquals("join", shipping.getActivityName());
- assertTrue(shipping.isEnded());
- assertFalse(main.getExecutions().contains(billing));
- assertFalse(main.getExecutions().contains(shipping));
- }
-}
15 years, 5 months
JBoss JBPM SVN: r4827 - in jbpm4/trunk/modules: jpdl/src/main/java/org/jbpm/jpdl/internal/activity and 8 other directories.
by do-not-reply@jboss.org
Author: tom.baeyens(a)jboss.com
Date: 2009-05-15 15:55:27 -0400 (Fri, 15 May 2009)
New Revision: 4827
Modified:
jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Execution.java
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/MessageImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivityMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/SignalMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/AsyncCommandMessage.java
jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java
jbpm4/trunk/modules/pvm/src/main/resources/jbpm.execution.hbm.xml
jbpm4/trunk/modules/pvm/src/main/resources/jbpm.task.hbm.xml
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java
jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/EndProcessInstanceTest.java
Log:
JBPM-2026 removed execution locking, moved suspend and resume to ScopeInstanceImpl and introduced suspendHistoryState all in context of adding super states
Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Execution.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Execution.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/Execution.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -39,8 +39,7 @@
* then it is locked. A locked execution is read only.
* </p>
*
- * <p>When a new execution is created, it is in {@link #STATE_ACTIVE}. To change
- * the state to a locked state, use {@link #lock(String)}.
+ * <p>When a new execution is created, it is in {@link #STATE_ACTIVE}.
* {@link #STATE_ACTIVE Some STATE_* constants} are provided that represent the
* most commonly used locked states. But the state '...' in the picture indicates
* that any string can be provided as the state in the lock method.
@@ -115,15 +114,6 @@
/** indicates that this execution is doing an asynchronous continuation. */
String STATE_ASYNC = "async";
- /** this execution has been cancelled before it came to completion.
- * Only history executions might expose this state. This state can be
- * passed in {@link ExecutionService#endProcessInstance(String, String)}.
- * Make sure that comparisons are
- * done with .equals and not with '==' because if executions are
- * loaded from persistent storage, a new string is created instead
- * of the constants. */
- String STATE_CANCELLED = "cancelled";
-
/** the externally given name or id of this execution. The id of a main
* path of execution is null. Can be used to differentiate concurrent
* paths of execution e.g. the shipping and billing paths. */
@@ -151,9 +141,6 @@
/** is this execution active ? This is the inverse of {@link #isLocked()}. */
boolean isActive();
- /** is this execution {@link #lock(String) locked} ? This is the inverse of {@link #isActive()}. */
- boolean isLocked();
-
/** is this execution ended */
boolean isEnded();
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SuperStateActivity.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -21,6 +21,7 @@
*/
package org.jbpm.jpdl.internal.activity;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -41,18 +42,23 @@
public void execute(ActivityExecution execution) throws Exception {
// find the start activity
Activity activity = execution.getActivity();
- Activity startActivity = findStartActivity(activity);
- execution.execute(startActivity);
+ List<Activity> startActivities = findStartActivities(activity);
+ if (startActivities.size()==1) {
+ execution.execute(startActivities.get(0));
+ }
}
- private Activity findStartActivity(Activity activity) {
+ private List<Activity> findStartActivities(Activity activity) {
+ List<Activity> startActivities = new ArrayList<Activity>();
List nestedActivities = activity.getActivities();
for (ActivityImpl nestedActivity : (List<ActivityImpl>) nestedActivities) {
- if (nestedActivity.getBehaviour() instanceof StartActivity) {
- return nestedActivity;
+ if ( (nestedActivity.getIncomingTransitions()==null)
+ || (nestedActivity.getIncomingTransitions().isEmpty())
+ ) {
+ startActivities.add(nestedActivity);
}
}
- throw new JbpmException("no start activity in "+activity);
+ return startActivities;
}
public void signal(ActivityExecution execution, String signalName, Map<String, Object> parameters) throws Exception {
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/MessageImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/MessageImpl.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/MessageImpl.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -21,7 +21,6 @@
*/
package org.jbpm.pvm.internal.job;
-import org.jbpm.api.JbpmException;
import org.jbpm.api.job.Message;
import org.jbpm.pvm.internal.model.ExecutionImpl;
@@ -43,11 +42,4 @@
this.execution = execution;
this.processInstance = execution.getProcessInstance();
}
-
- protected void unlockExecution() {
- if (execution == null) {
- throw new JbpmException("This message isn't bound to any execution");
- }
- execution.unlock();
- }
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -52,7 +52,6 @@
import org.jbpm.api.model.OpenExecution;
import org.jbpm.api.model.Transition;
import org.jbpm.api.session.MessageSession;
-import org.jbpm.api.session.PvmDbSession;
import org.jbpm.api.session.RepositorySession;
import org.jbpm.internal.log.Log;
import org.jbpm.pvm.internal.hibernate.HibernatePvmDbSession;
@@ -72,7 +71,6 @@
import org.jbpm.pvm.internal.model.op.ProceedToDestination;
import org.jbpm.pvm.internal.model.op.Signal;
import org.jbpm.pvm.internal.model.op.TakeTransition;
-import org.jbpm.pvm.internal.repository.RepositorySessionImpl;
import org.jbpm.pvm.internal.util.EqualsUtil;
import org.jbpm.pvm.internal.util.Priority;
@@ -124,8 +122,6 @@
protected ExecutionImpl parent = null;
protected ExecutionImpl processInstance;
- protected ScopeInstanceImpl scopeInstanceImpl;
-
/** the super process link in case this is a sub process execution */
protected ExecutionImpl superProcessExecution;
@@ -351,32 +347,6 @@
}
- // execution method : suspend and resume ////////////////////////////////////
-
- /** @see Execution#suspend() */
- public void suspend() {
- if (isSuspended()) {
- throw new JbpmException(toString()+" is suspended");
- }
- HibernatePvmDbSession hibernatePvmDbSession = Environment.getFromCurrent(HibernatePvmDbSession.class, false);
- if (hibernatePvmDbSession!=null) {
- hibernatePvmDbSession.cascadeExecutionSuspend(this);
- }
- lock(STATE_SUSPENDED);
- }
-
- /** @see Execution#resume() */
- public void resume() {
- if (! isSuspended()) {
- throw new JbpmException(toString()+" is not suspended");
- }
- HibernatePvmDbSession hibernatePvmDbSession = Environment.getFromCurrent(HibernatePvmDbSession.class, false);
- if (hibernatePvmDbSession!=null) {
- hibernatePvmDbSession.cascadeExecutionResume(this);
- }
- unlock();
- }
-
// execution method : signal ////////////////////////////////////////////////
public void signal() {
@@ -392,7 +362,7 @@
}
public void signal(String signal, Map<String, Object> parameters) {
- checkLock();
+ checkActive();
if (getActivity()!=null) {
performAtomicOperation(new Signal(signal, parameters, getActivity()));
} else if (transition!=null) {
@@ -443,7 +413,7 @@
/** @see Execution#takeDefaultTransition() */
public void take(Transition transition) {
- checkLock();
+ checkActive();
setPropagation(Propagation.EXPLICIT);
setTransition((TransitionImpl) transition);
@@ -478,7 +448,7 @@
if (activity==null) {
throw new JbpmException("activity is null");
}
- checkLock();
+ checkActive();
this.propagation = Propagation.EXPLICIT;
performAtomicOperation(new MoveToChildActivity((ActivityImpl) activity));
@@ -493,7 +463,7 @@
// execution method : proceed ///////////////////////////////////////////////
public void proceed() {
- checkLock();
+ checkActive();
// in graph based processDefinition languages we assume that a
// default transition is available
@@ -583,7 +553,7 @@
throw new JbpmException("no message-session configured to send asynchronous continuation message");
}
MessageImpl<?> asyncMessage = operation.createAsyncMessage(this);
- lock(Execution.STATE_ASYNC);
+ setState(Execution.STATE_ASYNC);
messageSession.send(asyncMessage);
}
@@ -778,7 +748,7 @@
// creating a child execution implies that this execution
// is not a leave any more and therefore, it is inactivated
if (isActive()) {
- lock(STATE_INACTIVE);
+ setState(STATE_INACTIVE);
propagation = Propagation.EXPLICIT;
}
@@ -936,28 +906,31 @@
return subProcessInstance;
}
- // state : internal methods /////////////////////////////////////////////////
+ // state mgmt ///////////////////////////////////////////////////////////////
- /** @see Execution#lock(String) */
- public void lock(String state) {
- if (state==null) {
- throw new JbpmException("given state is null");
+ /** @see Execution#suspend() */
+ public void suspend() {
+ super.suspend();
+ HibernatePvmDbSession hibernatePvmDbSession = Environment.getFromCurrent(HibernatePvmDbSession.class, false);
+ if (hibernatePvmDbSession!=null) {
+ hibernatePvmDbSession.cascadeExecutionSuspend(this);
}
- checkLock();
- log.trace("locking "+this);
- this.state = state;
}
-
- /** @see Execution#unlock() */
- public void unlock() {
- if (Execution.STATE_ACTIVE.equals(state)) {
- throw new JbpmException("state is already active");
+
+ /** @see Execution#resume() */
+ public void resume() {
+ super.resume();
+ HibernatePvmDbSession hibernatePvmDbSession = Environment.getFromCurrent(HibernatePvmDbSession.class, false);
+ if (hibernatePvmDbSession!=null) {
+ hibernatePvmDbSession.cascadeExecutionResume(this);
}
- log.trace("unlocking "+this);
- this.state = Execution.STATE_ACTIVE;
}
- protected void checkLock() {
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ protected void checkActive() {
if (!Execution.STATE_ACTIVE.equals(state)) {
throw new JbpmException(toString()+" is not active: "+state);
}
@@ -1165,9 +1138,6 @@
public void setName(String name) {
this.name = name;
}
- public void setState(String state) {
- this.state = state;
- }
public void setExecutions(Collection<ExecutionImpl> executions) {
this.executions = executions;
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ScopeInstanceImpl.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -37,6 +37,7 @@
import org.jbpm.api.job.Timer;
import org.jbpm.api.session.TimerSession;
import org.jbpm.internal.log.Log;
+import org.jbpm.pvm.internal.hibernate.HibernatePvmDbSession;
import org.jbpm.pvm.internal.job.TimerImpl;
import org.jbpm.pvm.internal.type.Converter;
import org.jbpm.pvm.internal.type.Type;
@@ -63,6 +64,7 @@
protected Set<TimerImpl> timers;
protected String state;
+ protected String suspendHistoryState;
// variables ////////////////////////////////////////////////////////////////
@@ -397,6 +399,29 @@
// state ////////////////////////////////////////////////////////////////////
+ /** @see Execution#suspend() */
+ public void suspend() {
+ if (Execution.STATE_SUSPENDED.equals(state)) {
+ return;
+ }
+ suspendHistoryState = state;
+ state = Execution.STATE_SUSPENDED;
+ }
+
+ /** @see Execution#resume() */
+ public void resume() {
+ if (!Execution.STATE_SUSPENDED.equals(state)) {
+ return;
+ }
+ state = suspendHistoryState;
+ suspendHistoryState = null;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+
/** @see Execution#getState() */
public String getState() {
return state;
@@ -407,11 +432,6 @@
return Execution.STATE_ACTIVE.equals(state);
}
- /** @see Execution#isLocked() */
- public boolean isLocked() {
- return ! isActive();
- }
-
/** @see Execution#isSuspended() */
public boolean isSuspended() {
return Execution.STATE_SUSPENDED.equals(state);
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivityMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivityMessage.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivityMessage.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -21,6 +21,7 @@
*/
package org.jbpm.pvm.internal.model.op;
+import org.jbpm.api.Execution;
import org.jbpm.api.env.Environment;
import org.jbpm.pvm.internal.job.MessageImpl;
import org.jbpm.pvm.internal.jobexecutor.JobDbSession;
@@ -41,7 +42,8 @@
}
public Object execute(Environment environment) throws Exception {
- unlockExecution();
+ execution.setState(Execution.STATE_ACTIVE);
+
execution.performAtomicOperationSync(ExecutionImpl.EXECUTE_ACTIVITY);
JobDbSession jobDbSession = environment.get(JobDbSession.class);
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ProceedToDestinationMessage.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -21,6 +21,7 @@
*/
package org.jbpm.pvm.internal.model.op;
+import org.jbpm.api.Execution;
import org.jbpm.api.env.Environment;
import org.jbpm.pvm.internal.job.MessageImpl;
import org.jbpm.pvm.internal.jobexecutor.JobDbSession;
@@ -42,7 +43,7 @@
}
public Object execute(Environment environment) throws Exception {
- unlockExecution();
+ execution.setState(Execution.STATE_ACTIVE);
execution.performAtomicOperationSync(ExecutionImpl.PROCEED_TO_DESTINATION);
JobDbSession jobDbSession = environment.get(JobDbSession.class);
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/SignalMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/SignalMessage.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/SignalMessage.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -21,6 +21,7 @@
*/
package org.jbpm.pvm.internal.model.op;
+import org.jbpm.api.Execution;
import org.jbpm.api.env.Environment;
import org.jbpm.pvm.internal.job.MessageImpl;
import org.jbpm.pvm.internal.jobexecutor.JobDbSession;
@@ -47,7 +48,7 @@
}
public Object execute(Environment environment) throws Exception {
- unlockExecution();
+ execution.setState(Execution.STATE_ACTIVE);
Signal signal = new Signal(signalName, null, activity);
execution.performAtomicOperationSync(signal);
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/TakeTransitionMessage.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -21,6 +21,7 @@
*/
package org.jbpm.pvm.internal.model.op;
+import org.jbpm.api.Execution;
import org.jbpm.api.env.Environment;
import org.jbpm.pvm.internal.job.MessageImpl;
import org.jbpm.pvm.internal.jobexecutor.JobDbSession;
@@ -41,7 +42,8 @@
}
public Object execute(Environment environment) throws Exception {
- unlockExecution();
+ execution.setState(Execution.STATE_ACTIVE);
+
execution.performAtomicOperationSync(ExecutionImpl.TAKE_TRANSITION);
JobDbSession jobDbSession = environment.get(JobDbSession.class);
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/AsyncCommandMessage.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/AsyncCommandMessage.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/svc/AsyncCommandMessage.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -21,6 +21,7 @@
*/
package org.jbpm.pvm.internal.svc;
+import org.jbpm.api.Execution;
import org.jbpm.api.cmd.Command;
import org.jbpm.api.cmd.CommandService;
import org.jbpm.api.env.Environment;
@@ -47,7 +48,8 @@
}
public Object execute(Environment environment) throws Exception {
- unlockExecution();
+ execution.setState(Execution.STATE_ACTIVE);
+
if (userId!=null) {
environment.setUserId(userId);
}
Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -489,9 +489,4 @@
public void setForm(String form) {
this.form = form;
}
-
- public void suspend() {
- }
- public void resume() {
- }
}
Modified: jbpm4/trunk/modules/pvm/src/main/resources/jbpm.execution.hbm.xml
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/resources/jbpm.execution.hbm.xml 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/pvm/src/main/resources/jbpm.execution.hbm.xml 2009-05-15 19:55:27 UTC (rev 4827)
@@ -53,8 +53,8 @@
<property name="name" column="NAME_" />
<property name="key" column="KEY_" />
<property name="id" column="ID_" unique="true" />
-
<property name="state" column="STATE_" />
+ <property name="suspendHistoryState" column="SUSPHISTSTATE_" />
<property name="priority" column="PRIORITY_" />
<property name="historyActivityInstanceDbid" column="HISACTINST_" />
Modified: jbpm4/trunk/modules/pvm/src/main/resources/jbpm.task.hbm.xml
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/resources/jbpm.task.hbm.xml 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/pvm/src/main/resources/jbpm.task.hbm.xml 2009-05-15 19:55:27 UTC (rev 4827)
@@ -17,6 +17,7 @@
<property name="name" column="NAME_"/>
<property name="description" column="DESCR_"/>
<property name="state" column="STATE_"/>
+ <property name="suspendHistoryState" column="SUSPHISTSTATE_" />
<property name="assignee" column="ASSIGNEE_"/>
<property name="form" column="FORM_"/>
Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activities/SuperStateBasicsTest.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -60,6 +60,30 @@
assertTrue(processInstance.isEnded());
}
+ public void testSuperStateStartActivityWithoutIncomingTransitions() {
+ deployJpdlXmlString(
+ "<process name='Super'>" +
+ " <start>" +
+ " <transition to='super' />" +
+ " </start>" +
+ " <super-state name='super'>" +
+ " <state name='a'>" +
+ " <transition to='done' />" +
+ " </state>" +
+ " <end name='done' />" +
+ " <transition to='end' />" +
+ " </super-state>" +
+ " <end name='end' />" +
+ "</process>"
+ );
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("Super");
+ assertEquals("a", processInstance.getActivityName());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+ assertTrue(processInstance.isEnded());
+ }
+
public void testSuperStateDirectEntry() {
deployJpdlXmlString(
"<process name='Super'>" +
Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/EndProcessInstanceTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/EndProcessInstanceTest.java 2009-05-15 18:29:00 UTC (rev 4826)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/history/EndProcessInstanceTest.java 2009-05-15 19:55:27 UTC (rev 4827)
@@ -48,7 +48,7 @@
Execution execution = executionService.startProcessInstanceByKey("ICL");
String processInstanceId = execution.getId();
- executionService.endProcessInstance(processInstanceId, Execution.STATE_CANCELLED);
+ executionService.endProcessInstance(processInstanceId, "cancel");
List<Execution> executions = executionService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
@@ -60,6 +60,6 @@
.uniqueResult();
assertNotNull(historyProcessInstance.getEndTime());
- assertEquals(Execution.STATE_CANCELLED, historyProcessInstance.getState());
+ assertEquals("cancel", historyProcessInstance.getState());
}
}
15 years, 5 months
JBoss JBPM SVN: r4826 - in projects/gwt-console/trunk: gui/war/src/main/java/org/jboss/bpm/console/client and 1 other directory.
by do-not-reply@jboss.org
Author: heiko.braun(a)jboss.com
Date: 2009-05-15 14:29:00 -0400 (Fri, 15 May 2009)
New Revision: 4826
Modified:
projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/LoginView.java
projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/MainLayout.java
projects/gwt-console/trunk/pom.xml
Log:
Add loading screens
Modified: projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/LoginView.java
===================================================================
--- projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/LoginView.java 2009-05-15 18:28:38 UTC (rev 4825)
+++ projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/LoginView.java 2009-05-15 18:29:00 UTC (rev 4826)
@@ -83,10 +83,10 @@
}
public void display()
- {
+ {
createLayoutWindowPanel();
window.center();
-
+
}
/**
@@ -95,8 +95,8 @@
private void createLayoutWindowPanel() {
window = new WindowPanel("jBPM Management Console");
window.setAnimationEnabled(true);
- window.setSize("320px", "180px");
-
+ window.setSize("320px", "180px");
+
LayoutPanel panel = new LayoutPanel();
createLayoutContent(panel);
window.setWidget(panel);
@@ -145,16 +145,17 @@
window.hide();
// assemble main layout
- DeferredCommand.add( new Command()
- {
- public void execute()
- {
- // move the loading div to foreground
- DOM.getElementById("splash").getStyle().setProperty("z-index", "1000");
- DOM.getElementById("ui_loading").getStyle().setProperty("display", "run-in");
- new MainLayout(controller, auth, urlBuilder, config);
- }
- });
+ DeferredCommand.addCommand(
+ new Command()
+ {
+ public void execute()
+ {
+ // move the loading div to foreground
+ DOM.getElementById("splash").getStyle().setProperty("z-index", "1000");
+ DOM.getElementById("ui_loading").getStyle().setProperty("display", "run-in");
+ new MainLayout(controller, auth, urlBuilder, config);
+ }
+ });
window = null;
}
@@ -195,7 +196,7 @@
grid.setWidget(1,1, passwordInput);
p.add(grid);
-
+
return p;
}
}
Modified: projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/MainLayout.java
===================================================================
--- projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/MainLayout.java 2009-05-15 18:28:38 UTC (rev 4825)
+++ projects/gwt-console/trunk/gui/war/src/main/java/org/jboss/bpm/console/client/MainLayout.java 2009-05-15 18:29:00 UTC (rev 4826)
@@ -83,13 +83,14 @@
public void run()
{
// hide the loading div
- DeferredCommand.add( new Command()
- {
- public void execute()
- {
- DOM.getElementById("splash").getStyle().setProperty("display", "none");
- }
- });
+ DeferredCommand.addCommand(
+ new Command()
+ {
+ public void execute()
+ {
+ DOM.getElementById("splash").getStyle().setProperty("display", "none");
+ }
+ });
}
};
Modified: projects/gwt-console/trunk/pom.xml
===================================================================
--- projects/gwt-console/trunk/pom.xml 2009-05-15 18:28:38 UTC (rev 4825)
+++ projects/gwt-console/trunk/pom.xml 2009-05-15 18:29:00 UTC (rev 4826)
@@ -14,8 +14,7 @@
<version>1.0.0.GA</version>
</parent>
- <properties>
- <bpm.spec.version>1.0.0-Alpha1</bpm.spec.version>
+ <properties>
<commons.fileupload.version>1.2.1</commons.fileupload.version>
<commons.io.version>1.3.2</commons.io.version>
<commons.logging.version>1.1.1</commons.logging.version>
@@ -29,8 +28,7 @@
<jaf.version>1.1</jaf.version>
<javax.ejb.version>3.0</javax.ejb.version>
<javax.jaxb.version>2.1</javax.jaxb.version>
- <jboss.common.version>2.2.7.GA</jboss.common.version>
- <jbpm.version>3.3.1.GA</jbpm.version>
+ <jboss.common.version>2.2.7.GA</jboss.common.version>
<junit.version>3.8.1</junit.version>
<mvc4g.version>1.0.0-jboss</mvc4g.version>
<resteasy.version>1.0.2.GA</resteasy.version>
15 years, 5 months