在学习了jbpm流程的基本流程定义部署,流程实例发起,管理等基本操作后,我们以一个请假流程为例来进一步学习jbpm。
我们首先设计一个流程定义,然后将所设计的流程定义集成到web工程中,然后实现请假流程定义的发布,查看和删除操作。
闲话少叙,具体的操作如下:
1、新建web工程
在eclipse中file->new->other然后选择Dynamic web project新建web工程。工程取名为jbpm4webchuang。创建工程后其文件结构如图4-1。
图4-1 新建web工程
2、创建请假流程定义leave.jpdl.xml
在我们所创建的项目中新建jpdl文件,保存在Java Resources/src目录下,同时拷贝jbpm4.4目录中examples中的相应注册文件到 Java Resources/src目录。此时工程文件结构如下图4-2。
图4-2 创建请假流程定义文件
此时我们设计待发布的请假流程,具体leave.jpdl.xml文件的代码如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <process name="leave" xmlns="http://jbpm.org/4.4/jpdl">
- <start name="start1" g="136,49,48,48">
- <transition name="to 申请" to="申请" g="-45,-22"/>
- </start>
- <task name="申请" g="112,146,92,52" assignee="lingo">
- <transition name="to 经理审批" to="经理审批" g="-69,-22"/>
- </task>
- <task name="经理审批" g="107,250,92,52" assignee="manager">
- <transition name="to exclusive1" to="exclusive1" g="-79,-22"/>
- </task>
- <decision name="exclusive1" g="125,322,48,48" expr="#{day > 3 ? 'to老板审批 ' : 'to end1'}">
- <transition name="to 老板审批" to="老板审批" g="265,344:-69,-22"/>
- <transition name="to end1" to="end1" g="-50,-22"/>
- </decision>
- <task name="老板审批" g="216,394,92,52" assignee="boss">
- <transition name="to end1" to="end1" g="261,473:-50,-22"/>
- </task>
- <end name="end1" g="127,449,48,48"/>
- </process>
其设计后的图形界面如图4-3(注意:我们可以通过图形界面直接设计流程定义):
图4-3 流程定义的图形显示
3、添加java依赖库
在eclipse中右键点击工程Build path->Configure Build Path出现如图4-4对话框。
图4-4 添加java依赖库
如上图所示,我添加的依赖库文件是之前将jbpm4的所有第三方类库放到一个文件夹中然后通过Add Library的方式添加jbpm依赖库(另一种方法也可以通过直接添加即Add External JARs来实现)。此处需要说明的是,此时添加的依赖库只是在eclipse编译时使用,即eclipse编译是可以通过,但是运行的时候,我们还需要将所需要的所有第三方jar文件添加到工程的WebContent/WEB-INF/lib目录下,即运行时依赖库。
4、将流程定义集成到web应用中
在工程的WebContent目录下创建Index.jsp文件,其代码如下:
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%@page import="java.util.*,org.jbpm.api.*"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Insert title here</title>
- </head>
- <body>
- <!-- 部署流程定义对应连接 -->
- <a href="index.jsp?action=deploy">deploy</a><br>
- <%
- //获得processEngine流程引擎
- ProcessEngine processEngine=Configuration.getProcessEngine();
- //获得RepositoryService对象
- //三个作用:1、流程发布定义 2、管理流程定义 3、删除流程定义
- RepositoryService repositoryService=processEngine.getRepositoryService();
- //获得触发连接并处理
- String action=request.getParameter("action");
- if("deploy".equals(action))
- {
- //部署流程定义
- repositoryService.createDeployment().addResourceFromClasspath("leave.jpdl.xml").deploy();
- }else if("remove".equals(action))
- {
- //删除已部署的流程定义
- repositoryService.deleteDeploymentCascade(request.getParameter("id"));
- }
- //获得流程定义
- List<ProcessDefinition> list =repositoryService.createProcessDefinitionQuery().list();
- for (ProcessDefinition pd: list)
- {
- %>
- <%=pd.getId() %>, <%=pd.getName() %>, <%=pd.getVersion() %>, <a href="index.jsp?action=remove&id=<%=pd.getDeploymentId()%>">remove</a><br>
- <%
- }
- %>
- </body>
- </html>
5、编辑web.xml文件
编辑web.xml文件主要是为了实现web服务的文件映射和服务注册,为了使用户能够通过web服务访问到index.jsp我们编写如下web.xml文件(否则会出现HTTP Status 404 报错):
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
- version="3.0">
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.htm</welcome-file>
- <welcome-file>index.jsp</welcome-file>
- <welcome-file>default.html</welcome-file>
- <welcome-file>default.htm</welcome-file>
- <welcome-file>default.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
此时别忘了添加运行时依赖库。
6、程序运行效果
到此为止,整个web程序已经可以运行了,我们的运行环境是java JDK1.6+Apache Tomcat 7.0+jbpm 4.4。右键工程,点击Run As-> Run on Server即可弹出浏览器如图4-6:
图4-6 程序运行效果
如上图所示,点击deploy连接程序将会在后台部署一个新的流程定义同时显示出流程定义的id,名称和版本。点击remove,将会删除掉相应的流程定义。
7、总结语
这一节没有太多的新东西,只是在原来的操作上将流程定义的部署集成到web工程上,但是这是我们后面程序的基础,呵呵继续努力中,come on!。