博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jbpm入门样例
阅读量:7137 次
发布时间:2019-06-28

本文共 6245 字,大约阅读时间需要 20 分钟。

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 )先下载: ,选一个如: 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 的下载地址:  

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

转载地址:http://zeprl.baihongyu.com/

你可能感兴趣的文章
个人项目博客----移山小分队----02
查看>>
完成构建之法第二章后面的小实践~
查看>>
java中的继承(二)
查看>>
课后作业-阅读任务-阅读提问-3
查看>>
坑爹的 ld: symbol(s) not found for architecture armv7
查看>>
Help Jimmy 递推动规
查看>>
Kali渗透测试——netdiscover
查看>>
数据结构之拓扑排序
查看>>
Java基本语法(一)
查看>>
zedboard 初使用 -- 工具篇
查看>>
关于Spring出现"COMMIT/AUTO or remove 'readOnly' marker from transaction definition."的解决办法...
查看>>
web请求报出 “超过了最大请求长度”
查看>>
Java中构造方法、实例方法、类方法的区别
查看>>
字节流转换为对象的方法
查看>>
2018-2019-1 20165226 《信息安全系统设计基础》第1周学习总结
查看>>
BZOJ2743:[HEOI2012]采花——题解
查看>>
android webview 视频相关
查看>>
oracle数据集合的操作
查看>>
[转] word2vec
查看>>
欧洲大陆
查看>>