在學習了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!。