1. jBPM的简介
jBPM
是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储。
參考
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
hibernate.connection.username
=
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 hibernate.connection.username=
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
5.3. 流程信息保存到数据库
JbpmSessionFactory
factory =
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);
session.commitTransaction();
session.close
();
jBPM和
Hibernate,MySQL的使用中会遇到字符集的问题.
须要注意几个地方。
5.4. 在Mysql安装过程指定字符集
在
Mysql安装过程中指定对应的默认字符集是GBK
5.5. Hibernate.properties文件里的字符集设置
hibernate.connection.url=jdbc:mysql://localhost/jbpmtest?useUnicode=true&characterEncoding=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. 流程变量的类型
·
java.lang.String
·
java.lang.Boolean
·
java.lang.Character
·
java.lang.Float
·
java.lang.Double
·
java.lang.Long
·
java.lang.Byte
·
java.lang.Short
·
java.lang.Integer
·
java.util.Date
·
byte[]
·
java.io.Serializable
·
classes that are persistable with hibernate
全部基本类型的包裹类型,以及实现了
Serializable
的类型都能够作为流程參数变量使用,注意參数类不能是一个类的内部类或者属性类(除非包括參数类的类实现了Serializable接口)
參考 org.jbpm.context.exe.VariableInstance
6.2. 流程变量的使用
l 变量的定义和获取
void
ContextInstance.setVariable(String variableName, Object value);
void
ContextInstance.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 的源码。
基本的相关方法
public
void deleteTransientVariable(java.lang.String name)
public
void setTransientVariable(java.lang.String name,
java.lang.Object value)
public
java.lang.Object getTransientVariable(
java.lang.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 java
object <---> 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
环境准备
全部 JAVA 开发第一个须要安装的,没什么好说的。记得把系统变量 JAVA_HOME 设上。
Ant 是使用 jBPM 必须的一个工具。 jBPM 中的非常多操作都要用到 Ant 。
安装方法:
( 1 )先下载: http://archive.apache.org/dist/ant/binaries/ ,选一个如: apache-ant-1.6.5-bin.zip 。
( 2 )解压到 D:/ant (当然其它文件夹也能够)。
( 3 )设置例如以下系统变量: ANT_HOME=d:/ant 。
( 4 )把 %ANT_HOME%/bin 增加到系统变量 PATH 中。
Eclipse 不是开发 jBPM 必须的工具,但它是对 jBPM 开发非常有帮助的工具,特别是 jBPM 提供了一个 Eclipse 插件用来辅助开发 jBPM 。关于 Eclipse 的安装不赘述了,本文用的版本号是: Eclipse3.2
安装 jBPM
jBPM 的下载地址: http://www.jboss.com/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 配置文件演示样例,有些还包