a minimal deployment of JBPM needs the following jars:
- jbpm-jpdl-3.3.0.GA.jar
- commons-logging.jar
- dom4j.jar
<process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="simple">
<start-state name="Start">
<transition name="trHelloWorld" to="HelloWorld"></transition>
</start-state>
<state name="HelloWorld">
<event type="node-enter">
<action class="HelloWorldActionHandler" name="recharge"></action>
</event>
<transition name="trEnd" to="End"></transition>
</state>
<end-state name="End"></end-state>
</process-definition>
The state with name HelloWorld executes an action when the node-enter event is fired by the process executuion engine. The Action is implemented as Java code:
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
public class HelloWorldActionHandler implements ActionHandler {
private static final long serialVersionUID = 1L;
public void execute(ExecutionContext context) throws Exception {
System.out.println("Hello World!");
}
}
For the definition of the process nothing more is needed. It can be run outside of containers and does not need a database for non persistent processes. To start the process you have to load the definition and create a concrete ProcessInstance:
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
public class SimpleProcess {
public static void main(String[] args) {
ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("process-def.xml");
ProcessInstance instance = new ProcessInstance(processDefinition);
displayStatus(instance);
instance.signal();
displayStatus(instance);
instance.signal();
displayStatus(instance);
}
private static void displayStatus(ProcessInstance instance) {
String nodeName = instance.getRootToken().getNode().getName();
System.out.println("You are now in node: " + nodeName);
}
}
To trigger a transition the method signal() is called on the process instance. An action handler can leave the state by calling context.leaveNode().
No comments:
Post a Comment