当前位置:天才代写 > tutorial > JAVA 教程 > 基于JBPM的简朴报销实例

基于JBPM的简朴报销实例

2017-11-10 08:00 星期五 所属: JAVA 教程 浏览:306

副标题#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.竣事任务

#p#副标题#e#

在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!");
  }

}

工程目次布局

基于JBPM的简单报销实例

 

    关键字:

天才代写-代写联系方式