基于JBPM的简朴报销实例
副标题#e#
方才开始进修JBPM简朴的入门实例:
观念:
ProcessDefinition
界说了流程的业务逻辑,包括业务节点和流转。是有向图布局
ProcessInstance
ProcessDefinition 执行期间的浮现.包括了流程界说被表明之后的一些信息,诸如开始时间,竣事时间和其他相关联的信息
Task
是ProcessDefinition的构成部门,界说了勾当的详细内容
TaskInstance
Task被表明执行时的信息,有开始时间,竣事时间,参加者等
有create start end 三种状态
Actor
勾当的参加者
jBPM今朝只需要actor的Id,对actor的详细表明是由业务应用层认真
任务建设时可以指定任务的参加者,也可以不指定
Token
是一个指针(运行期的观念),代表着一条执行路径,指向当前流程中正在执行的节点
在实例的运行期间,tokens 大概是一树形布局同一时刻,大概存在多个token,
可是只有一个root token
我用的是MySQL数据库,首先修改 hibernate.cfg.xml
要留意引入数据库驱动时用mysql-connector-java-3.2.0-alpha-bin版本的jar包在测试时回有问题,我用的是mysql-connector-java-5.1.5-bin版本的jar包
Java代码
<!-- JDBC connection properties (begin) -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///jbpm</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<!-- JDBC connection properties (end) -->
#p#副标题#e#
流程界说文件:processdefinition.xml
Java代码
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="test">
<start-state name="start">
<transition to="fillForm"></transition>
</start-state>
<task-node name="fillForm">
<task name="填写报销单">
<assignment actor-id="employee"></assignment>
</task>
<transition to="managerDecide"></transition>
</task-node>
<task-node name="managerDecide">
<task name="司理审批">
<assignment actor-id="manager"></assignment>
</task>
<transition to="finaceAudit"></transition>
</task-node>
<task-node name="finaceAudit">
<task name="财政审批">
<assignment actor-id="finace"></assignment>
</task>
<transition to="end"></transition>
</task-node>
<end-state name="end"></end-state>
</process-definition>
编程步调
1.建设流程界说
2.陈设流程界说
3.启动流程实例
4.获取任务列表
5.执行任务
6.竣事任务
在Junit中举办测试:
Java代码
package cn.senta.test;
import java.util.List;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.db.GraphSession;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.taskmgmt.exe.TaskInstance;
import junit.framework.TestCase;
public class TestJBPM extends TestCase {
/**
* 建设表布局
*/
public void testCreateSchema() {
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
jbpmConfiguration.createSchema();
System.out.println("the database is created successfully!");
}
/**
* 陈设流程界说
*/
public void testDeployProcessDifinition() {
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
ProcessDefinition pd = ProcessDefinition
.parseXmlResource("cn/senta/bx/processdefinition.xml");
jbpmContext.deployProcessDefinition(pd);
} finally {
if (jbpmContext != null) {
jbpmContext.close();
}
}
System.out.println("the deploy is successful!");
}
/**
* 启动流程实例
*/
public void testStartProcessInstance() {
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
GraphSession graphSession = jbpmContext.getGraphSession();
ProcessDefinition processDefinition = graphSession
.findLatestProcessDefinition("test");
ProcessInstance processInstance = new ProcessInstance(
processDefinition);
jbpmContext.save(processInstance);
processInstance.signal();
} finally {
if (jbpmContext != null) {
jbpmContext.close();
}
}
System.out.println("the startProcess is successful !");
}
/**
* 获取任务列表
*/
@SuppressWarnings("unchecked")
public void testGetTaskList() {
String actorId = "employee";
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
List<TaskInstance> tasks = jbpmContext.getTaskList(actorId);
for (TaskInstance ti : tasks) {
System.out.println("id=" + ti.getId() + ", name="
+ ti.getName() + ", create=" + ti.getCreate()
+ ", start=" + ti.getStart() + ", end=" + ti.getEnd());
}
} finally {
if (jbpmContext != null) {
jbpmContext.close();
}
}
System.out.println("you get the tasklist successfully!");
}
/**
* 执行任务
*/
public void testStartTask() {
long taskInstanceId = 1;
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
TaskInstance taskInstance = jbpmContext
.getTaskInstance(taskInstanceId);
taskInstance.start();
jbpmContext.save(taskInstance);
} finally {
if (jbpmContext != null) {
jbpmContext.close();
}
}
System.out.println("the task is started successfully!");
}
/**
* 竣事任务
*/
public void testEndTask(){
long taskInstanceId=1;
JbpmConfiguration jbpmConfiguration=JbpmConfiguration.getInstance();
JbpmContext jbpmContext=jbpmConfiguration.createJbpmContext();
try{
TaskInstance taskInstance=jbpmContext.getTaskInstance(taskInstanceId);
taskInstance.end();
jbpmContext.save(taskInstance);
}finally{
if(jbpmContext!=null){
jbpmContext.close();
}
}
System.out.println("the task is ended successfully!");
}
}
工程目次布局