jbpm入门样例

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

环境准备

1、安装JDK

全部 JAVA 开发第一个须要安装的,没什么好说的。记得把系统变量 JAVA_HOME 设上。

2、安装Ant

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 中。

3、安装Eclipse

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 配置文件演示样例,有些还包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值