一些资料是从他处转载或者整理后的,未注明转载或出处, 向耕耘者说声抱歉了。 希望大家能够共同学习,共同提高!!!

jbpm

上一篇 / 下一篇  2007-12-26 16:42:12 / 个人分类:资料

1. jBPM的简单介绍
jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储。
2.      jBPMmyeclipse的冲突
当eclipse安装了myeclipsejBPM时候,可能有冲突,具体表现在jBPM的流程设计器不能在eclipse中使用。
 
3.      Hibernate连接mysql数据库的一般参数
下面的配置参数,根据需要可以修改:
jbpmtestmysql中的schema的名字;
GBK是字符集,可以根据需要修改;
username=rootmysql数据库的用户名是root
password=mysqlmysql数据库的用户密码是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接口

+KNM J ` k0 

8r:N9T\%{I#aB!|Qomx0 领测软件测试网a][&hr%_0~

领测软件测试网 ['d \a!q| zz