jbpm入门样例

1.      jBPM的简介
jBPM 是JBOSS下的一个开源java工做流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储。
   參考
2.      jBPMmyeclipse的冲突
当eclipse安装了myeclipsejBPM时候,可能有冲突,详细表现在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 是 jBPMOralce模型,包括相应的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 ();
jBPMHibernate,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 接口

 

java

工做流尽管还在不成熟的发展阶段,甚至尚未一个公认的规范标准。但其应用却已经在高速展开,这说明市场对工做流框架的需求是急迫而巨大的。 mysql

    咱们公司的后台短信管理系统涉及短信编发、领导层层审核等操做,这是一个比較典型的工做流系统。过去咱们用的工做流引擎是 shark ,而后在使用后发现其过于庞大,后台数据库操做频繁而未进行优化,直接致使的后果就是前台操做缓慢。因而经研究决定,将工做流引擎由 shark 换成 jBPM sql

    jBPM 以前是一个开源软件,后增长 JBoss 组织。正好咱们公司也是用 JBoss 的。只是 jBPM 并无绑定在 JBOSS 上, Tomcat 等也可以使用它。 数据库

    jBPM 的正处在不断发展中,作为开源软件的特色,其设计变化每每很是大。因此一些过去的资料可能已经不适用了。因而做者依据本身的使用经验,又一次整理出这份文档,以备学习參考。 apache

注:本文使用的 jBPM 版本号为 3.1.1 session

环境准备 oracle

1、安装JDK 框架

所有 JAVA 开发第一个需要安装的,没什么好说的。记得把系统变量 JAVA_HOME 设上。 eclipse

2、安装Ant jsp

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

相关文章
相关标签/搜索