jbpm工作流入门教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
jbpm工作流入门教程
1.jBPM的简单介绍
jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储。
参考
/products/jbpm
2.jBPM和myeclipse的冲突
当eclipse安装了myeclipse和jBPM时候,可能有冲突,具体表现在jBPM 的流程设计器不能在eclipse中使用。
3.Hibernate连接mysql数据库的一般参数
下面的配置参数,根据需要可以修改:
jbpmtest是mysql中的schema的名字;
GBK是字符集,可以根据需要修改;
username=root,mysql数据库的用户名是root;
password=mysql,mysql数据库的用户密码是mysql;
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost/jbpmtest?useUnicode=true&characterEncoding= GBK
ername=root
hibernate.connection.password=mysql
hibernate.show_sql=true
hibernate.c3p0.min_size=1
hibernate.c3p0.max_size=3
4.Hibernate连接Oracle数据库的一般参数
hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
hibernate.connection.url=jdbc:oracle:thin:@localhost:1521:orcl ername =jbpm
hibernate.connection.password=jbpm
5.为jBPM创建数据库表等内容
5.1.为mysql创建数据库以及数据内容
JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().dropSchema();
JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().createSchema();
这2个语针对mysq有效.
5.2.为oralce创建数据库以及数据内容
JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().dropSchema();
JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().createSchema();
上面的语句对oralce无效。
模型目录jBPM\jbpm_database\jBPM_oralce10g.pdm是jBPM的Oralce模型,包含对应的Sequence的信息.
需要在数据库中创建Sequence name=hibernate_sequence
/wiki/Wiki.jsp?page=JbpmOnOracle
5.3.流程信息保存到数据库
JbpmSessionFactoryfactory=JbpmSessionFactory.buildJbpmSessionFactory();
JbpmSession session=factory.openJbpmSession();
GraphSession graphSession=session.getGraphSession();
session.beginTransaction();
///new ProcessDefinition实例
ProcessDefinition myProcessDefinition=null;
ProcessInstance processInstance=new ProcessInstance(processDefinition);
processInstance.getContextInstance().setVariable("myvar","xxx");
///
graphSession.saveProcessDefinition(myProcessDefinition);
mitTransaction();
session.close();
jBPM和Hibernate,MySQL的使用中会遇到字符集的问题.
需要注意几个地方。
5.4.在Mysql安装过程指定字符集
在Mysql安装过程中指定相应的默认字符集是GBK
5.5.Hibernate.properties文件中的字符集设置
hibernate.connection.url=jdbc:mysql://localhost/jbpmtest?useUnicode=true&characterEncodin g=GBK
5.6.hibernate.cfg.xml文件中的字符集设置
<property name="hibernate.connection.url">jdbc:mysql://192.168.1.2/jbpmtest</property>
5.7.MySQL的配置文件的修改:
my.ini中default-character-set=GBK
注意有2处需要修改
6.为流程定义变量
分成3种流程变量
全局变量(全局流程变量)
全局临时变量(全局流程临时变量)
局部变量(流程某个接点内有效的变量)
@see org.jbpm.context.exe.ContextInstance
目前还没有使用过局部变量(流程某个接点内有效的变量)
流程变量的定义
6.1.流程变量的类型
·ng.String
·ng.Boolean
·ng.Character
·ng.Float
·ng.Double
·ng.Long
·ng.Byte
·ng.Short
·ng.Integer
·java.util.Date
·byte[]
·java.io.Serializable
·classes that are persistable with hibernate
所有基本类型的包裹类型,以及实现了Serializable的类型都可以作为流程参数变量使用,注意参数类不能是一个类的内部类或者属性类(除非包含参数类的类实现了Serializable接口)
参考org.jbpm.context.exe.VariableInstance
6.2.流程变量的使用
l变量的定义和获取
voidContextInstance.setVariable(String variableName,Object value); voidContextInstance.setVariable(String variableName,Object value,Token token); Object ContextInstance.getVariable(String variableName);
Object ContextInstance.getVariable(String variableName,Token token);
l Variables can be deleted with
ContextInstance.deleteVariable(String variableName);
ContextInstance.deleteVariable(String variableName,Token token);
6.3.Variable lifetime
一个变量在被定义后,在变量从ContextInstance删除前,都可以被访问。
当变量被删除后,去获取该变量将返回为空。
6.4.自定义类的实例作为流程变量
如果一个类的实例要作为流程变量使用,该类需要实现java.io.Serializable接口,并且定义序列化版本.
//一个可以作为流程变量使用的类
class Wdz implements Serializable{
//为类指定序列化版本号
private static final long serialVersionUID=1L;
private String name="wdz";
private int age=10;
public String toString(){
return"name="+name+",age="+age;
}
}
上面的例子中,如果把类Wdz作为类WdzParent内部类使用,然后当成流程变量使用,那类WdzParent必须也实现Serializable接口,否则会有问题.
6.5.Transient variables
流程的历史变量是不能持久化的,作用范围是对整个流程全局有效的。
在ContextInstance类内部,采用的是一个Map来存储TransientVariable的信息
参考代码
org.jbpm.context.exe.ContextInstance的源代码。
主要的相关方法
publicvoid deleteTransientVariable(ng.String name)
publicvoid setTransientVariable(ng.String name,
ng.Object value)
public ng.Object getTransientVariable(ng.String name)
6.6.Variables overloading
当一个变量和流实例关联(变量名字=”wdz”,value=”test”),如果在设置一个变量
(变量名字=”wdz”,value=new Integer(10)),那最后变量(变量名字=”wdz)的值是Integer(10)。
这称之为overload.
6.7.Variables overriding
如果父流程有变量A(值=”value1”),子流程又定义了变量A值=”value2”,那在子流程范围内,获取变量A的值,那结果是值=”value2”。
这是遵循一般语言的局部变量在它的局部范围内override上级变量。
6.8.流程变量的持久化
它依赖于流程实例的持久化,非TransientVariable随流程实例的持久化一起被保存。
保存在数据表jbpm_variableinstance
参考org.jbpm.context.exe.VariableInstance
6.9.Customizing variable persistence(可以进一步了解)
User javaobject<--->converter<--->variable instance
也就是自定义类的持久化需要定义自己的converter和变量实例类
converter和变量实例类需要继承org.jbpm.context.exe.VariableInstance converter需要实现org.jbpm.context.exe.Converter接口
一
工作流虽然还在不成熟的发展阶段,甚至还没有一个公认的规范标准。
但其应用却已经在快速展开,这说明市场对工作流框架的需求是急迫而巨大的。
我们公司的后台短信管理系统涉及短信编发、领导层层审核等操作,这是一个比较典型的工作流系统。
过去我们用的工作流引擎是shark,然后在使用后发现其过于庞大,后台数据库操作频繁而未进行优化,直接导致的后果就是前台操作缓慢。
于是经研究决定,将工作流引擎由shark换成jBPM。
jBPM之前是一个开源软件,后加入JBoss组织。
正好我们公司也是用JBoss 的。
不过jBPM并没有绑定在JBOSS上,Tomcat等也可以使用它。
jBPM的正处在不断发展中,做为开源软件的特点,其设计变化往往很大。
所以一些过去的资料可能已经不适用了。
于是作者根据自己的使用经验,重新整理出这份文档,以备学习参考。
注:本文使用的jBPM版本为3.1.1
环境准备
1、安装JDK
所有JAVA开发第一个需要安装的,没什么好说的。
记得把系统变量JAV A_HOME设上。
2、安装Ant
Ant是使用jBPM必须的一个工具。
jBPM中的很多操作都要用到Ant。
安装方法:
(1)先下载:/dist/ant/binaries/,选一个如:apache-ant-1.6.5-bin.zip。
(2)解压到D:\ant(当然其他目录也可以)。
(3)设置如下系统变量:ANT_HOME=d:\ant。
(4)把%ANT_HOME%\bin加入到系统变量PATH中。
3、安装Eclipse
Eclipse不是开发jBPM必须的工具,但它是对jBPM开发很有帮助的工具,特别是jBPM提供了一个Eclipse插件用来辅助开发jBPM。
关于Eclipse的安装不赘述了,本文用的版本是:Eclipse3.2
安装jBPM
jBPM的下载地址:/products/jbpm/downloads
l JBoss jBPM是jBPM的软件包
l JBoss jBPM Starters Kit是一个综合包,它包括了jBPM软件包、开发插件、一个配置好了的基于JBoss的jBPM示例、一些数据库配置文件示例。
l JBoss jBPM Process Designer Plugin是辅助开发jBPM的Eclipse插件。
l JBoss jBPM BPEL Extension jBPM关于BPEL的扩展包
本指南选择下载:JBoss jBPM Starters Kit。
下载后解压到D:\jbpm-starters-kit-3.1,目录下含有五个子目录:
l jbpm jBPM的软件包
l jbpm-bpel只含有一个网页
l jbpm-db各种数据库hibernate配置文件示例,有些还包含了相应的jdbc驱动程序。
l jbpm-designer辅助开发jBPM的Eclipse插件,具体在jbpm-gpd-feature子目录中
l jbpm-server一个已经配置好了的基于JBoss的jBPM示例.
感觉下工作流
前面我们说了,在JBoss jBPM Starters Kit的jbpm-server目录是一个已经配置好的了jBPM示例,那么让我们来感觉一下jBPM做出的东西吧。
双击jbpm-server目录下的start.bat文件,启动JBoss服务。
这时会打开一个DOS窗口,启动完成后,日志会不断输出,其中最后一句是“13:55:39,937 DEBUG[StaticNotifier]going to wait for(CMD_EXECUTOR, ng.Object@1df59bd)”,这表示jBPM在开始工作了,它不断进行轮询。
打开网页:http://localhost:8080/jbpm/得到如下画。