要使用jBPM的工作流,必须首先部署工作流定义。就是把工作流定义文件载入到jBPM的数据库中。
jBPM的工作流有多种部署方式。包括:Ant文件部署,Eclipse图形设计器通过JBoss(JBoss上必需运行jbpm.war)部署,以及本文我要介绍的编程部署的方式。
一、Ant文件发布方式
编写Ant文件非常复杂。因为jBPM工作流的部署,需要使用Jbpm数据库。这就必须要进行繁琐的配置。
二、Eclipse图形设计器直接部署
这种方式非常简单。但是,这种部署方式,必须要同时运行JBoss服务器。并且需要在JBoss上运行配置正确的jbpm.war。它会把业务程序定义发布到jbpm.war使用的数据库上。
而jbpm.war的部署和配置非常麻烦。特别是你要更改使用的数据库时。JBoss的一大特点,就是配置方式不标准,与通用的配置方式相差甚多。
因此,我不喜欢配置JBoss下的jbpm.war。我已经创建了新的,可以部署到Tomcat等所有服务器上的jbpm.war文件(我会在有空时推出一篇文章介绍如何制作可以运行在所有JavaEE服务器上的jbpm.war文件,并提供直接下载)。
但是,部署在Tomcat上的jbpm.war,不能支持Eclipse图形设计器部署业务程序定义。
而且,今天我重装Eclipse之后,安装的图形设计器没有了发布功能!汗!可能是需要安装Eclipse的某些插件吧!今天,我无法访问外国网站,所以找不到原因和解决办法。(又是中国特色)
三、编程方式部署Jbpm业务程序(就是常说的“工作流”)定义
因为今天我无法使用Eclipse图形设计器直接部署,所以就写了一个类,通过编程的方式直接部署。
这种方式也是非常简单而直接的。不需要再安装Eclipse图形设计器,也不需要配置和运行支持jBPM的JBoss。
只要你的应用程序中集成并正确配置了jBPM,(可以参考我的Blog上的文章《向应用程序中加入jBPM组件》http://blog.csdn.net/shendl/archive/2006/10/23/1346877.aspx )然后把下面的类加入你的项目,运行JUnit测试或者执行main方法,就可以轻松的部署你的业务程序定义了!
编程方式部署Jbpm工作流定义
一、基本知识
1,JUnit测试和执行main方法,实际上是classpath目标目录下的.class文件的运行。查找资源文件,也是从classpath开始的。
2,我们的Web项目应用程序,classpath是web-inf/classes。我们的业务程序定义文件所在目录processes设为src目录。所以,路径应该是“业务程序定义名字/processdefinition.xml”。
这里,我的业务程序定义的名字是checkShowNews,所以classpath的路径应该是checkShowNews/processdefinition.xml。
二、部署业务程序定义的工具类
下面是这个类的源文件,可以通过Main方法和Junit测试部署业务程序定义。
/**
*
*/
package com.withub.common.util;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.def.ProcessDefinition;
import junit.framework.TestCase;
/**
* @author 沈东良 shendl_s@hotmail.com
* 7:21:19 PM
* DeployJbpmProcessDefinition类,提供了部署JBpm工作流定义到数据库的功能!
*/
public class DeployJbpmProcessDefinition extends TestCase {
static JbpmConfiguration jbpmConfiguration = null;
static {
jbpmConfiguration = JbpmConfiguration.getInstance();
}
public void setUp() {
//创建数据库表
//jbpmConfiguration.createSchema();
}
public void tearDown() {
//删除数据库表
//jbpmConfiguration.dropSchema();
}
/**
* 测试方法
*
*/
public void testSimplePersistence() {
// Between the 3 method calls below, all data is passed via the
// database. Here, in this unit test, these 3 methods are executed
// right after each other because we want to test a complete process
// scenario情节. But in reality, these methods represent different
// requests to a server.
// Since we start with a clean, empty in-memory database, we have to
// deploy the process first. In reality, this is done once by the
// process developer.
/**
* 这个方法把业务处理定义通过Hibernate保存到数据库中。
*/
deployProcessDefinition("checkShowNews/processdefinition.xml");
<process-definition
xmlns="" name="checkShowNews">
<swimlane name="CheckNewsManagers">
<assignment class="com.withub.wcms.manage.publishNews.jbpmHandler.assignmentHandler.CheckNewsAssignmentHandler" config-type="bean"></assignment>
</swimlane>
<swimlane name="EditNewsUser">
<assignment class="com.withub.wcms.manage.publishNews.jbpmHandler.assignmentHandler.EditNewsAssignmentHandler" config-type="bean"></assignment>
</swimlane>
<start-state name="relatingNewsChannel">
<transition name="" to="checkNews"></transition>
</start-state>
<task-node name="checkNews">
<task name="checkNews" swimlane="CheckNewsManagers"></task>
<transition name="rejected" to="editNews"></transition>
<transition name="passed" to="showNews"></transition>
</task-node>
<end-state name="end"></end-state>
<task-node name="editNews">
<task name="editNews" swimlane="EditNewsUser"></task>
<transition name="commited" to="checkNews"></transition>
</task-node>
<node name="showNews">
<action name="showNewsAction" class="com.withub.wcms.manage.publishNews.jbpmHandler.actionHandler.ShowNews" config-type="bean"/>
<transition name="" to="end"></transition>
</node>
</process-definition>
*/
/**
* "checkShowNews/processdefinition.xml"
*/
public void deployProcessDefinition(String filePath) {
// This test shows a process definition and one execution
// of the process definition. The process definition has
// 3 nodes: an unname
d start-state, a state 's' and an
// end-state named 'end'.
ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource(filePath);
// Lookup the pojo persistence context-builder that is configured above
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
// Deploy the process definition in the database
jbpmContext.deployProcessDefinition(processDefinition);
} finally {
// Tear down the pojo persistence context.
// This includes flush the SQL for inserting the process definition
// to the database.
/*
* 关闭jbpm上下文。删除pojo持久化上下文。
* 这包括刷新SQL来真正的把业务处理定义插入到数据库中。
* */
jbpmContext.close();
}
}
/**
*
* @param args
*/
public static void main(String[] args){
DeployJbpmProcessDefinition instance=new DeployJbpmProcessDefinition();
instance.deployProcessDefinition(args[0]);
}
}
三、Eclipse下使用main测试的方法
1,点击Run选项:
2,选中Main方法测试的
1)项目-----需要classpath,所有的.class文件
、jar包和资源文件所在地。
2)main方法所在的类。
3,由于我们的main方法使用了一个参数,所以需要提供一个参数。就是jBPM业务程序定义文件相对于项目的classpath的相对路径。
4,点Run,运行OK
分享到:
相关推荐
【JBPM工作流全套学习资料】是一份详尽的学习资源,涵盖了JBPM工作流系统的基础到高级知识。JBPM(Java Business Process Management)是开源的企业级工作流管理系统,它允许开发者设计、部署和执行业务流程。这个...
2. 流程部署:将定义好的流程模型部署到JBPM工作流引擎中。这一步骤包括为流程中的各种活动分配执行角色或服务。 3. 流程启动:根据业务需求启动工作流实例。当教务管理中的某个流程需要执行时,如调课申请,就可以...
2. **Jbpm工作流编程步骤**: - **安装与配置**:首先需要下载并安装Jbpm,配置相应的数据库连接和其他依赖。 - **设计流程定义**:使用Jbpm提供的建模工具(如BPMN2)设计流程图,定义各个活动、参与者、流转规则...
在jbpm工作流web应用中,Tomcat扮演着应用服务器的角色,负责部署和运行jbpm的应用实例,提供web服务给客户端。 **MySQL** 是一个功能丰富的、开源的关系型数据库管理系统,适用于处理大量数据。在jbpm系统中,...
**JBPM工作流经典例子详解** JBPM,全称Java Business Process Management,是一个开源的工作流管理系统,用于管理和执行业务流程。它提供了强大的流程建模、执行和监控功能,且基于Java,具有良好的跨平台性和可...
**JBPM工作流开发** JBPM(Java Business Process Management)是一种开源的工作流管理系统,它提供了对业务流程的建模、部署、执行和监控的能力。在IT行业中,JBPM被广泛用于自动化企业的业务流程,实现流程的标准...
**Jbpm工作流笔记** **一、Jbpm工作流基本知识** Jbpm是一个基于Java实现的Business Process Management(BPM)框架,它提供了一种方式来管理和执行业务流程。Jbpm不遵循WFMC的xPDL规范,而是使用jPDL(Java ...
JBPM工作流开发涉及以下步骤和概念: 1. **模型设计**:使用BPMN 2.0标准语言绘制流程图,描述业务流程。可以使用专门的工具如JBPMDiagramEditor(在Eclipse插件中)。 2. **流程部署**:将设计好的流程模型打包成...
本示例中的"python调用java,开发jbpm6.0.0工作流Application"就是一个典型的跨语言交互案例,它结合了Python和Java两种语言的优势,以实现对JBPM6.0工作流引擎的高效管理。 首先,我们来了解一下Python调用Java的...
JBPM工作流开发指南.pdf则深入讲解了JBPM的编程模型,包括流程定义、任务管理和事件处理。书中详细阐述了如何使用JPDL(JBoss Process Definition Language)编写流程定义,这是一种XML格式的语言,用于描述流程的...
jbpm工作流可以帮助企业更高效地组织和自动化业务流程,提高工作效率,减少人为错误。 首先,jbpm4helloworld是jbpm入门的一个经典示例,通常用于引导初学者了解如何在实际项目中部署和运行一个简单的流程。在这个...
第一篇 jBPM工作流开发基础 1 第1章 工作流基础 2 1.1 工作流概念 2 1.1.1 工作流管理思想之于企业现代化管理 2 1.1.2 工作流技术在企业中的应用 5 1.1.3 如何从一个开发者的角度看工作流技术 6 1.2 工作流管理系统...
**JBPM** 是一个开源的工作流管理系统,它提供了对业务流程的建模、部署、执行和监控的能力。JBPM支持BPMN 2.0标准,使得业务流程模型可以被业务分析师理解和维护,同时也为开发者提供了强大的API和工具来实现复杂的...
3. **jbpm工作流生命周期**: - **设计**:使用BPMN编辑器创建流程定义。 - **部署**:将流程定义打包成jbpm支持的格式,上传到jbpm服务器。 - **启动**:根据流程定义启动新的流程实例。 - **执行**:执行过程...
jbpm+spring的web简单借款工作流实例项目是一个基于jbpm和Spring框架的示例应用,旨在演示如何在Web环境中实现一个简单的借款流程。这个项目的核心是利用jbpm(Java Business Process Management)作为工作流引擎,...
"JBPM工作流开发指南-v10-20070706.doc"可能是关于jBPM的一个早期版本的开发指南,它可能涵盖了jBPM的核心概念、API使用、集成方法等内容,对于初学者来说是宝贵的资源。 最后,Activiti同样是一个开源的工作流引擎...
JBPM(Java Business Process Management)是一个开源的工作流管理系统,它允许开发者设计、部署和执行业务流程。这个源文件集合提供了一个完整的OA(Office Automation)办公自动化工作流的实现示例,涵盖了JBPM的...
Jbpm(Java Business Process Management)是一个开源的工作流管理系统,主要用于处理业务流程的建模、部署、执行和监控。jbpm4.4是该系统的较早版本,但它仍然是许多开发人员学习工作流管理的基础。在本教程中,...
4. **创建数据库表**:使用修改后的配置文件运行jbpm,它会根据配置自动创建包含jbpm工作流表的数据库。 5. **安装Eclipse图形化插件**:安装jbpm的Eclipse插件,便于图形化设计和管理流程定义。 6. **部署jbpm和...