`

一次部署多个jbpm 流程定义文件

    博客分类:
  • jBPM
阅读更多
通常我们在部署流程定义文件都需要借助jbpm的eclipse plugin,但是该插件有一个问题,就是每次打开一个流程文件非常的慢,而且一次只能deploy一个流程定义文件,如果有多个流程的话,就需要我们在插件中同时打开多个流程定义文件,这让人感觉非常麻烦.于是我们对流程部署进行了一下改进.
在插件中部署一个流程定义,其实就是将processdefinition.xml文件上传到一个指定的servlet,这个servlet就是org.jbpm.web.ProcessUploadServlet, 而对应的url地址是web.xml中定义的:
<servlet>
	<servlet-name>UploadServlet</servlet-name>
	<servlet-class>
		org.jbpm.web.ProcessUploadServlet
	</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>UploadServlet</servlet-name>
	<url-pattern>/upload</url-pattern>
</servlet-mapping>

因此我们只需要自己写一个jsp页面,将要上传的文件提交到该url(http://myhost:myport/myapp/upload)即可.
通过参看ProcessUploadServlet的源代码,我们发现,它要求上传的文件必须是经过压缩的:
    if (fileItem.getContentType().indexOf("application/x-zip-compressed") == -1) {
	log.debug("Not a process archive");
	return "Not a process archive";
    }
    try {
	log.debug("Deploying process archive " + fileItem.getName());
	ZipInputStream zipInputStream = new ZipInputStream(fileItem.getInputStream());
	JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
	log.debug("Preparing to parse process archive");
	ProcessDefinition processDefinition = ProcessDefinition.parseParZipInputStream(zipInputStream);
	log.debug("Created a processdefinition : " + processDefinition.getName());
	jbpmContext.deployProcessDefinition(processDefinition);
	zipInputStream.close();
	return "Deployed archive " + processDefinition.getName() + " successfully";
    } catch (IOException e) {
	return "IOException";
    }

也就是说,我们在上传流程定义文件之间必须将其压缩成zip文件(而且还不能嵌套其他的文件夹,zip里只能包含processdefinition.xml), 因此我们需要对其进行改造一下,能让我们直接上传流程定义xml文件:
private String handleRequest(HttpServletRequest request) {
        //check if request is multipart content
        log.debug("Handling upload request");
        if (!FileUpload.isMultipartContent(request)) {
            log.debug("Not a multipart request");
            return "Not a multipart request";
        }
        String result = "";
        try {
            DiskFileUpload fileUpload = new DiskFileUpload();
            List list = fileUpload.parseRequest(request);
            log.debug("Upload from GPD");
           
            for (Iterator it = list.iterator(); it.hasNext();) {
				FileItem fileItem = (FileItem) it.next();

	            if (fileItem.getContentType() == null || fileItem.getContentType().indexOf("text/xml") == -1) {
	                log.debug("Not a process archive");
	                continue;
	            }
	            try {
	                log.debug("Deploying process archive " + fileItem.getName());
	                InputStream is = fileItem.getInputStream();
	                JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
	                log.debug("Preparing to parse process archive");
	                ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream(is);
	                log.debug("Created a processdefinition : " + processDefinition.getName());
	                jbpmContext.deployProcessDefinition(processDefinition);
	                is.close();
	                if (StringUtils.isNotEmpty(result)) {
	                	result += ",";
	                }
	                result += processDefinition.getName();
	            } catch (IOException e) {
	                return "IOException";
	            }
			}
        } catch (FileUploadException e) {
            e.printStackTrace();
            return "FileUploadException";
        }
        
        if (StringUtils.isEmpty(result)) {
        	log.debug("No process file in the request");
            return "No process file in the request";
        }
        
		return "Deployed process [" + result + "] successfully";
    }


接下来是写jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!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>Upload Process Definition Xml files</title>
		<script src="upload.js" type="text/javascript"></script>
		<style>
fieldset {
	border: 1px solid #eee;
	padding: 5px 10px;
	margin: 0;
}

fieldset ul {
	list-style: none;
	margin: 0 0 1.5em 0;
	padding: 0;
}

fieldset ul li {
	list-style: none;
	margin: 0 0 0.5em 0;
	padding: 0;
}
</style>
	</head>
	<body>
	<body>
		<form action="<%=request.getContextPath()%>/upload" enctype="multipart/form-data"
			id="process_form" method="post">
			<fieldset>
				<ul>
					<li>
						<label>
							新增流程定义文件
						</label>
						<input type="file" id="process_upload" />
					</li>
					<li style="text-align: center">
						<input class="submit" id="submit_button" name="commit"
							type="submit" value="提交" />
					</li>
				</ul>
			</fieldset>
		</form>
		<script type="text/javascript">
  var multiple_upload_process_counter = 0;	
  multiple_upload_process($("process_upload"));
</script>
	</body>
</html>

这里我借鉴了一下javaeye的application.js来添加多个上传文件:)
5
1
分享到:
评论
6 楼 taga 2009-04-11  
”在上传流程定义文件之间必须将其压缩成zip文件(而且还不能嵌套其他的文件夹,zip里只能包含processdefinition.xml), “

这段话好像不确切,文件压缩包只要是zip格式就可以,不一定要是zip扩展名的,比如压缩成zip改扩展名为jpdl也可以,另外,里面可以有其他的文件或者文件夹,jbpm的suite包下有一个websale的example,有兴趣可以看看
5 楼 shappy1978 2008-12-12  
实际上jbpm发布时会把上传的zip文件中的文件解析并保存到jbpm_bytearray,jbpm_byteblock中,但没有显示读取gpd.xml,而是直接全部保存,当读取流程定义时自动把这些文件解析到临时目录下。
4 楼 shappy1978 2008-12-12  
大概看懂了,有2个问题
1 gpd.xml和processimage.jgp是什么时候上传的,我看了源代码好像只从zip文件中解析了定义文件和类文件,没有这几个文件是无法查看流程状态
2 如何配置hibernate,只要配置数据库连接就可以吗?还是把jbpm-console的配置复制过来
3 楼 yqjava 2008-07-17  
为什么我一个都部署不了!
2 楼 macrochen 2008-06-02  
恩,通过jbpm-spring-module来做更好,我的做法算抛砖引玉了
1 楼 ppig 2008-06-01  
还有几种方法来一次性deploy多个流程定义:
1.
<bean id="jbpmConfiguration"
class="xxx.xxx.jbpm.JbpmConfigurationFactoryBean"> -spring-modules的jbpm包里有
<property name="sessionFactory" ref="jbpmSessionFactory" />
<property name="configuration"
value="classpath:jbpm.cfg.xml" />
<property name="processDefinitions">
<list>
<ref local="flow1" />
<ref local="flow2" />
<ref local="flow3" />
</list>
</property>
<property name="createSchema" value="false" />
</bean>
<bean id="flow1"
class="org.springmodules.workflow.jbpm31.definition.ProcessDefinitionFactoryBean">
<property name="definitionLocation"
value="classpath:/flow1/processdefinition.xml" />

2.用ant - DeployProcessTask

相关推荐

    eclipse3.4解压版带jbpm流程定义插件

    综上所述,这个压缩包提供了一个便捷的方式,让用户能够快速进入业务流程开发环境,利用Eclipse 3.4的强大力量和JBPM的流程定义功能。同时,EditPlus 3的加入,进一步丰富了开发工具的选择,使得文本编辑更为灵活。...

    JBPM工作流实战_流程定义文件的上传处理视频 03

    "JBPM工作流实战_流程定义文件的上传处理视频 03"这一主题主要关注如何在实际操作中处理JBPM流程定义文件的上传,这在构建业务流程自动化系统时是非常关键的步骤。 首先,流程定义文件是JBPM工作流的核心组成部分,...

    jBPM教学视频(02管理流程定义.zip)

    9. **异常处理和流程版本控制**:阐述如何处理流程执行过程中的异常,以及如何管理流程定义的多个版本,确保平滑的升级和回滚。 10. **API使用**:可能会介绍如何使用jBPM的Java API或REST API进行程序化地操作流程...

    JBPM流程框架源码

    - **流程实例**:每个流程定义在运行时都会产生一个或多个实例,代表实际的流程执行过程。 - **工作项(Task)**:任务节点在流程实例中的具体表现,可能分配给个人或角色执行。 - **变量**:用于存储流程运行...

    jbpm流程监控的实现

    总之,jbpm流程监控的实现涉及到流程定义、实例启动、数据收集、界面展示、分析优化等多个环节。理解并掌握这些要点,将有助于我们更好地利用jbpm来管理和优化企业的业务流程。通过持续的监控和改进,企业能够确保其...

    jbpm工作流程

    - **流程实例**:当流程定义被执行时,会产生一个或多个实例,每个实例代表一次流程运行。 - **任务**:流程中的各个活动,等待用户或系统执行。 - **节点**:流程图中的元素,如开始节点、结束节点、用户任务、...

    我写的一个jbpm实例

    综上所述,"我写的一个jbpm实例"是一个全面展示jbpm功能和SSH框架集成的应用案例,涵盖了流程设计、部署、执行、监控等多个方面。通过学习这个实例,读者可以加深对jbpm的理解,为实际项目开发提供参考。

    JBPM Web流程设计器

    - **流程实例**: 部署的模型可以触发生成流程实例,每个实例代表一次流程执行的过程。 - **监控与跟踪**: JBPM提供了监控工具,可以追踪流程实例的状态,分析性能,帮助优化流程。 综上所述,【JBPM Web流程设计器...

    流程开发java插件jbpm 使用说明 个人总结

    JBPM的内核模型包括工作流引擎、流程定义、流程实例等核心元素,而其内核架构则涉及流程加载、启动、任务处理和流程监控等多个层面。 【基本处理步骤】 1. **加载(发布)流程定义**:通过Eclipse Designer或其他...

    jbpm4.4 简单请假流程

    - **任务(Task)**:流程中的一个步骤,可以分配给一个或多个参与者执行。 - **节点(Node)**:流程图中的活动,如开始节点、结束节点、用户任务、服务任务等。 - **变量(Variable)**:存储流程运行时数据的...

    JBPM3.2 表初始化,流程发布第一课

    4. 版本管理:每个流程可以有多个版本,新版本发布时不会影响已运行的旧版本实例。通过版本管理,可以灵活地升级和回滚流程。 5. 部署与激活:发布流程后,需要将其部署到特定的环境,如服务器或集群。部署成功后,...

    jbpm-3.1.4部署jbpm的jar包和moudle的jar包

    解压缩后,你会看到一个包含多个jar文件的目录结构。 3. **集成到项目**:将必要的jar文件添加到你的Java项目类路径中。这可能包括jbpm-core.jar、持久化相关的jar、以及你需要的模块jar。 4. **配置持久化**:...

    jBPM-JPDL流程引擎

    jBPM提供了一个图形化的工作流设计器,使得开发者可以通过拖拽的方式来创建流程定义,极大地简化了流程设计过程。此外,jBPM还提供了命令行工具和API,方便开发者进行流程部署、实例管理和监控。 **四、jBPM集成** ...

    jbpm4.4 流程运转+驳回+分配组任务+ssh2

    jbpm4.4是JBoss Business Process Management Suite的第4.4版本,它是一个开源的工作流和业务流程管理系统,用于构建、部署和管理业务流程。本教程将深入探讨jbpm4.4中的核心功能,包括流程运转、驳回、分配组任务...

    简单的jbpm请假流程

    在请假流程中,我们需要定义一个流程模型,包括请假申请、审批等节点。这些节点可以用图形化工具如jBPM Designer进行绘制,然后导出为XML流程定义文件(.bpmn或.bpmn2)。 3. **请假实体类** 创建请假申请的实体类...

    JBPM案例详解(一)

    总之,【JBPM案例详解(一)】涵盖了JBPM的基本概念、流程设计、部署执行、监控和系统集成等多个方面,旨在通过一个具体的业务场景,使读者深入理解和应用JBPM这一强大的工作流管理工具。通过学习和实践,读者不仅能...

    jbpm简介\jbpm简介

    4. **支持多种流程定义语言**:除了默认支持的jPDL、WS-BPEL和Seam框架的Pageflow外,jBPM还计划支持更多流程定义语言,以适应不同的业务场景需求。 5. **严格的流程版本控制**:jBPM提供了严格的版本控制机制,...

    JBPM4介绍开发步骤简介

    JBPM4提供了多个服务接口,每个接口负责特定的流程管理功能,包括: 1. **RepositoryService**:流程资源服务接口,用于管理流程定义的生命周期,包括部署、查询和删除流程定义。 2. **ExecutionService**:流程...

    jBPM-jPDL学习笔记——流程设计与控制(转载)

    总结来说,jBPM-jPDL的学习涵盖了流程建模、控制逻辑、数据库集成等多个方面。通过深入理解jPDL和实践项目配置,开发者可以有效地利用jBPM实现业务流程自动化,提高工作效率,同时保持流程的灵活性和可扩展性。这篇...

    jbpm详细介绍,有关jbpm的功能、流程图、以及特殊功能

    总之,jbPM作为一个全面的业务流程管理框架,不仅提供了直观的流程定义方式,还具备优秀的数据库管理和灵活的API,是开发高效工作流应用的理想选择。通过深入理解和熟练运用jbPM,开发者可以构建出更加智能化和自动...

Global site tag (gtag.js) - Google Analytics