jBPM 是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储。 当eclipse安装了myeclipse和jBPM时候,可能有冲突,详细表如今jBPM的流程设计器不能在eclipse中使用。 3. Hibernate连接mysql数据库的一般參数 jbpmtest 是mysql中的schema的名字; 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 JbpmSessionFactory.buildJbpmSessionFactory (). getJbpmSchema().dropSchema();
JbpmSessionFactory.buildJbpmSessionFactory (). getJbpmSchema().createSchema();
JbpmSessionFactory.buildJbpmSessionFactory (). getJbpmSchema().dropSchema();
JbpmSessionFactory.buildJbpmSessionFactory (). getJbpmSchema().createSchema();
模型文件夹jBPM/jbpm_database/jBPM_oralce10g.pdm 是 jBPM的 Oralce模型,包括相应的Sequence的信息.
须要在数据库中创建 Sequence name= hibernate_sequence
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();
jBPM和 Hibernate,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>
my.ini中 default-character-set=GBK
@see org.jbpm.context.exe.ContextInstance
眼下还没有使用过局部变量(流程某个接点内有效的变量)
· classes that are persistable with hibernate 全部基本类型的包裹类型,以及实现了
Serializable 的类型都能够作为流程參数变量使用,注意參数类不能是一个类的内部类或者属性类(除非包括參数类的类实现了Serializable接口) 參考 org.jbpm.context.exe.VariableInstance
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); 一个变量在被定义后,在变量从
ContextInstance 删除前,都能够被訪问。当变量被删除后,去获取该变量将返回为空。 假设一个类的实例要作为流程变量使用,该类须要实现
java.io.Serializable 接口,而且定义序列化版本号. class Wdz implements Serializable{
private static final long serialVersionUID = 1L;
private String name="wdz";
public String toString(){
return "name="+name+",age="+age;
上面的样例中,假设把类 Wdz作为类 WdzParent内部类使用,然后当成流程变量使用,那类 WdzParent必须 也实现 Serializable接口,否则会有问题.
流程的历史变量是不能持久化的,作用范围是对整个流程全局有效的。
在 ContextInstance类内部,採用的是一个Map来存储
TransientVariable的信息 org.jbpm.context.exe.ContextInstance 的源码。
public void deleteTransientVariable(java.lang.String name) public void setTransientVariable(java.lang.String name, public java.lang.Object getTransientVariable( java.lang.String name) 6.6. Variables overloading 当一个变量和流实例关联(变量名字= ”wdz”,value=”test”),假设在设置一个变量
(变量名字= ”wdz”,value= new Integer(10)) ,那最后变量(变量名字= ”wdz)的值是Integer(10)。
6.7. Variables overriding 假设父流程有变量A(值= ”value1”),子流程又定义了变量A值= ”value2”,那在子流程范围内,获取变量A的值,那结果是值= ”value2”。这是遵循一般语言的局部变量在它的局部范围内override上级变量。
它依赖于流程实例的持久化,非
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 )先下载: ,选一个如: 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 的下载地址:
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 配置文件演示样例,有些还包