准备工作
1.Eclipse(3.3)&MyEclipse(6.6)关联Jbpm
----安装根目录下创建links文件夹->建立xxx.link文件->写入path=c:/jbpm/designer->完成
2.新建工程
目录结构
----|jBPM
--------|src
------------|cn.dzdd.jbpm.deploy ---->部署代码
----------------|Deploy_API
------------|helloworld ---->Process Definition
----------------|gpd.xml ---->图片坐标(可有可无)
----------------|processdefinition.xml ---->流程定义(必须有且名称相同)
----------------|processimage.jpg ---->流程定义相关联图片(可有可无)
------------|hibernate.cfg.xml ---->直接复制jbpm根目录下
------------|jbpm.cfg.xml config目录下的文件
------------|log4j.properties jbpm.cfg.xml默认配置
……
--------|Referenced Libraries ---->导入所需JAR包
------------|activation.jar 复制jbpm根目录下以及lib目录下的jar
------------|antlr-2.7.6.jar
------------|asm.jar
------------|bsh.jar
------------|cglib.jar
------------|commons-collections.jar
------------|commons-logging.jar
------------|dom4j.jar
------------|hibernate3.jar
------------|jboss-backport-concurrent.jar
------------|jboss-j2ee.jar
------------|jboss-retor-1.1.0-rt.jar
------------|jbpm-identity.jar
------------|jbpm-jpdl.jar
------------|jcr-1.0.jar
------------|log4j.jar
---------------------------------------------processdefinition.xml-------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="" name="helloworld">
<start-state name="start-state1">
<transition to="task-node1"></transition>
</start-state>
<task-node name="task-node1">
<task name="订单">>
<assignment actor-id="客户"></assignment>
</task>
<transition to="task-node2"></transition>
</task-node>
<task-node name="task-node2">
<task name="发货">
<assignment actor-id="厂家"></assignment>
</task>
<transition to="task-node3"></transition>
</task-node>
<task-node name="task-node3">
<task name="收货">
<assignment actor-id="客户"></assignment>
</task>
<transition to="end-state1"></transition>
</task-node>
<end-state name="end-state1"></end-state>
</process-definition>
--------------------------------------------hibernate.cfg.xml------------------------------------------
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!— 修改数据库连接的配置 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- JDBC connection properties (begin) -->
<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">1234</property>
<!-- 添加一个hbm2ddl.auto属性为update创建所需要的表 -->
<property name="hbm2ddl.auto">update</property>
<!-- JDBC connection properties (end) -->
......
部署代码
package cn.dzdd.jbpm.deploy;
import java.util.List;
import org.hibernate.cfg.Configuration;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.taskmgmt.exe.TaskInstance;
import org.junit.Test;
public class Deploy_API {
//准备数据、读取hibernate.cfg.xml创建所需要表
@Test
public void createSchema(){
new Configuration().configure().buildSessionFactory();
}
//部署流程定义
@Test
public void deploy(){
ProcessDefinition pd = null;
pd = ProcessDefinition.parseXmlResource("HelloWorld/processdefinition.xml");
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
jbpmContext.deployProcessDefinition(pd);
} catch (RuntimeException e) {
jbpmContext.setRollbackOnly();
throw e;
}finally{
jbpmContext.close();
}
}
//启动流程实例
@Test
public void startProcessInstance(){
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
ProcessDefinition processDefinition =
jbpmContext.getGraphSession().findLatestProcessDefinition("helloworld");
ProcessInstance processInstance = processDefinition.createProcessInstance();
processInstance.getRootToken().signal();
jbpmContext.close();
}
//获取任务实例列表
@Test
public void getTaskList() {
String actorId = "客户"; //指定的任务实例名
// String actorId = "厂家";
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
List<TaskInstance> list = jbpmContext.getTaskList(actorId);
System.out.println("------------>");
for (TaskInstance taskInstance : list) {
System.out.println("id="+taskInstance.getId()+"/r/n"//
+"name="+taskInstance.getName()+"/r/n"//
+"actorId="+taskInstance.getActorId()+"/r/n"//
+"create="+taskInstance.getCreate()+"/r/n"//
+"start="+taskInstance.getStart()+"/r/n"//
+"end="+taskInstance.getEnd());
}
jbpmContext.close();
}
private long taskInstanceId = 1; //指定的流程标记
// 开始任务
@Test
public void startTask() {
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
TaskInstance taskInstance = jbpmContext.getTaskInstance(taskInstanceId);
taskInstance.start();
jbpmContext.close();
}
// 结束任务
@Test
public void endTask() {
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
TaskInstance taskInstance = jbpmContext.getTaskInstance(taskInstanceId);
taskInstance.end();
jbpmContext.close();
}
}