将JBPM4整合到web工程

1.在eclipse里面创建一个动态的web项目。

2.在lib目录下加入依赖库(由于我们在jsp中需要用到jstl标签,所以这里我们还必须加入jstl的依赖库)
[quote]
*JBPM4_HOME/jbpm.jar
*JBPM4_HOME/lib/*.jar
*jakarta-taglibs-standard-1.1.2_HOME/lib/jstl.jar
*jakarta-taglibs-standard-1.1.2_HOME/lib/standard.jar
[/quote]

3.在项目的Java Resources目录下创建一个resources目录,并且把“JBPM4初探---HelloWorld”项目中src目录下的所有配置文件拷到resources目录下。

4.在项目的src目录一个java文件(servlet),用来编写我们发布流程并获取最新发布的流程定义

package zzg;

import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletConfig;
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.ProcessDefinitionQuery;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.RepositoryService;

public class JbpmServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private ProcessEngine processEngine = null;
private RepositoryService repositoryService = null;

/* 初始化ProcessEngine. */
public void init(ServletConfig config) throws ServletException {
processEngine = new Configuration().buildProcessEngine();
repositoryService = processEngine.getRepositoryService();
}

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}

protected void process(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String zzg = request.getParameter("zzg");
if (zzg.equals("deploy")) {
deployProcessDefinition(request, response);
} else {
removeProcessDefinitionById(request, response);
}
List list = getLatestProcessDefinition(request, response);
request.setAttribute("process", list);
request.getRequestDispatcher("/index.jsp").forward(request, response);
}

/**
* 发布流程方法
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void deployProcessDefinition(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String xml = request.getParameter("xml");
repositoryService.createDeployment().addResourceFromString(
"hello.jpdl.xml", xml).deploy();
}

/* 获取所有最新流程. */
protected List<ProcessDefinition> getLatestProcessDefinition(
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取全部的流程定义
List<ProcessDefinition> processDefinitions = repositoryService
.createProcessDefinitionQuery().orderAsc(
ProcessDefinitionQuery.PROPERTY_NAME).list();

Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
for (ProcessDefinition pd : processDefinitions) {
String key = pd.getKey();
ProcessDefinition definition = map.get(key);
if ((definition == null)
|| (definition.getVersion() < pd.getVersion())) {
map.put(key, pd);
}
}
return new ArrayList(map.values());
}

/* 删除流程定义. */
protected void removeProcessDefinitionById(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
//根据流程ID获取流程定义实例
//注意:jbpm4是不允许直接根据流程定义的ID来直接删除流程定义的
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(id).uniqueResult();

repositoryService.deleteDeploymentCascade(pd.getDeploymentId());
}
}


5.在项目的webapp目录建立一个index.jsp,主要用来发布流程并显示最新发布的流程

<%@page contentType="text/html;charset=UTF-8" %>
<%@page import="org.jbpm.api.*" %>
<%@page import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html>
<head>
<title>jbpm学习</title>
</head>
<body>
<form action="jbpm?zzg=deploy" method="post">
<textarea name="xml" cols=50 rows=15></textarea>
<input type="submit" value="发布"/>
<input type="reset" value="取消"/>
</form>
<table width=430 border=1>
<tr>
<td>ID</td>
<td>Key</td>
<td>名称</td>
<td>版本</td>
<td>操作</td>
</tr>
<c:forEach var="process" items="${process}">
<tr>
<td>${process.id}</td>
<td>${process.key}</td>
<td>${process.name}</td>
<td>${process.version}</td>
<td><a href="jbpm?zzg=delete&id=${process.id }">删除</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>


6.修改项目下的web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>WebJbpm</display-name>
<servlet>
<description />
<display-name>JbpmServlet</display-name>
<servlet-name>JbpmServlet</servlet-name>
<servlet-class>zzg.JbpmServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JbpmServlet</servlet-name>
<url-pattern>/jbpm</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


7.为项目创建一个服务器,我这里使用的是Tomcat v5.5 Server(Tomcat v6.0下测试不成功)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值