1、介绍一下什么是工作流?
JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。
举个例子:
表达了一个抽象的流程定义,之所以说是抽象,因为她没有表示确切的执行者,比如某借款人被具体化为张三,部门主管成为张三的部门经理李四,而财务明确为王五的时候,这个流程定义就被具体化,成为一个流程实例。此外过程中的相关人员我们称之为参与者Actor,过程需要参与者介入的环节称之为Task,每—个任务在流程实例中的具体化称之为任务实例,从一个任务结点到另一个任务结点转为叫做流转(Transition),在流程中,由程序预先设定的行为如发邮件,我们称之为活动Action。
2、废话不多说了,直接进入正题
a、给myeclipse安装插件(jbpm)
注意,整个安装过程中,请断网。
(1)、在myeclipse中的help-->myeclipse configuration center-->software-->add site
(2)、添加jbpm-->install-->src-->gpd-->jbpm-gpd-site.zip,命名jbpm
(3)、personal sites工作区间 ,找jbpm ,打开,add除source的所有文件。如图:
package com.wangpan.jbpm;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.RepositoryService;public class JbpmServlet extends HttpServlet {
ProcessEngine processEngine = null;
RepositoryService repositoryService = null;
public void init(){
//工作流引擎
processEngine = Configuration.getProcessEngine();
//存储流程定义
repositoryService = processEngine.getRepositoryService();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {this.process(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {this.process(request, response);
//System.out.println("111111111111111111111111");
}
/***模仿struts1的ActionServlet
*/
private void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String command = request.getParameter("command");
//System.out.println(command);
String path = "";
if("deployPd".equals(command)) {
path = this.deployPd(request,response);
//System.out.println(path);
} else if("deletePd".equals(command)) {
path = this.deletePd(request,response);
} else if("startInstance".equals(command)) {
path = this.startInstance(request, response);
} else if("deleteInstance".equals(command)){
path = this.deleteInstance(request, response);
}
request.getRequestDispatcher(path).forward(request, response);
}
//直接发布
private String deployPd(HttpServletRequest request, HttpServletResponse response) {
repositoryService.createDeployment().addResourceFromClasspath("hello.jpdl.xml").deploy();
this.queryPd(request, response);
return "index.jsp";
}
//查看流程定义
private void queryPd(HttpServletRequest request, HttpServletResponse response) {
List<ProcessDefinition> pds = repositoryService.createProcessDefinitionQuery().list();
request.setAttribute("pds", pds);
//System.out.println(pds.size());
}
//删除流程定义
private String deletePd(HttpServletRequest request, HttpServletResponse response) {
String deploymentId = request.getParameter("deploymentId");
System.out.println(deploymentId);/**
* //注意,这里用的是deploymentId,所以,jsp中*deploymentId=${pd.deploymentId}
*/
repositoryService.deleteDeploymentCascade(deploymentId);this.queryPd(request, response);
return "index.jsp";
}
/**
* 开启一个流程实例
* 当一个流程定义开启实例后,就不能删除
*/
private String startInstance(HttpServletRequest request, HttpServletResponse response) {
String processDefinitionId = request.getParameter("pdId");
//System.out.println(processDefinitionId);/**
*//注意,这里用processDefinitionId,所以,中pdId=${pd.id}
*/
executionService.startProcessInstanceById(processDefinitionId);this.queryInstance(request, response);
return "leave.jsp";
}
//查看流程实例
private void queryInstance(HttpServletRequest request, HttpServletResponse response) {
List<ProcessInstance> pis = executionService.createProcessInstanceQuery().list();
request.setAttribute("pis", pis);
}
//结束流程实例
private String deleteInstance(HttpServletRequest request, HttpServletResponse response) {
ProcessInstance pi = null;
String piId = request.getParameter("piId");/**
* //注意,这里用processInstanceId,jsp中piId=${pi.id}
*/
executionService.deleteProcessInstance(piId);this.queryInstance(request, response);
return "leave.jsp";
}
}