`
xvm03
  • 浏览: 144334 次
  • 来自: ...
社区版块
存档分类
最新评论

jbpm工作流入门教程

阅读更多

jbpm工作流入门教程 

原帖:http://blog.csdn.net/huxin1/archive/2008/04/25/2329365.aspx
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>
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 。
安装方法:
( 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
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 配置文件示例,有些还包含了相应的 jdbc 驱动程序。
l            jbpm-designer  辅助开发 jBPM Eclipse 插件,具体在 jbpm-gpd-feature 子目录中
l            jbpm-server  一个已经配置好了的基于 JBoss jBPM 示例 .
 
感觉下工作流
前面我们说了,在 JBoss jBPM Starters Kit 的 jbpm-server 目录是一个已经配置好的了 jBPM 示例,那么让我们来感觉一下 jBPM 做出的东西吧。
 
双 击 jbpm-server 目录下的 start.bat 文件,启动 JBoss 服务。这时会打开一个 DOS 窗口,启动完成后,日志会不断输出,其中最后一句是“ 13:55:39,937 DEBUG [StaticNotifier] going to wait for (CMD_EXECUTOR, java.lang.Object@1df59bd) ”,这表示 jBPM 在开始工作了,它不断进行轮询。
分享到:
评论

相关推荐

    JBPM教程 第一部分、(工作流开发基础-为什么学习工作流)

    本教程将带你深入理解JBPM的核心概念,以及为何在IT行业中学习和应用工作流至关重要。 首先,让我们了解工作流的基本概念。工作流是指一系列相互关联的任务,这些任务按照一定的顺序执行,以完成一个业务过程。在...

    jBPM工作流入门例程

    工作流入门必经的四个简单例子。 vacate主要说明基本使用。 UserModel说明如何同用户模型相结合。 ForkJoin主要说明Fork结点和Join结点的使用。 countersignature主要说明如何持久化和实现较复杂的task node控制,...

    jbpm工作流程

    - **jbpm工作流入门教程.pdf**:这可能是关于jbpm基础知识和实践操作的指南,包括流程设计、部署、执行等。 - **jb51.net.txt**:可能包含jb51网站上的相关文章链接或教程摘要,jb51.net是一个技术分享平台。 - *...

    jbpm3.2.2工作流入门例子

    jbpm是一款开源的工作流管理系统,它提供了一整套解决方案,用于设计、执行和管理业务流程。jbpm3.2.2是jbpm的一个版本,它在当时提供了许多关键功能,如流程定义、流程实例管理、任务管理和事件处理等。本入门例子...

    工作流入门jbpm开发指南

    jbPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了全面的业务流程管理和工作流解决方案。对于希望深入了解和应用工作流技术的初学者来说,jbPM是一个理想的学习平台。本指南将带你一...

    jbpm Java工作流 教程

    ### jbpm Java工作流 教程 #### 一、jbpm简介 JBPM(Java Business Process Model)是Red Hat提供的一款开源的工作流引擎,用于在Java应用程序中实现业务流程管理(BPM)。它基于规范化的BPMN 2.0标准,支持图形化...

    jbpm工作流整合

    jbpm工作流整合是一个关键的主题,它涉及到企业级业务流程管理(BPM)系统的实施与集成。jbpm是一个开源的工作流管理系统,它提供了一套全面的工具和框架,用于设计、执行、监控和优化业务流程。这个压缩包可能包含...

    jbpm详细实例教程

    本教程将带你深入理解JBPM,并通过一个具体的请假实例来展示其基本操作和配置。 首先,要开始使用JBPM,你需要创建一个动态的Web项目。在项目结构中,你需要在`lib`目录下添加必要的JAR包。这些包包括jbpm的核心库`...

    jbpm工作流 基础视频

    总的来说,这套jbpm工作流基础视频教程旨在帮助初学者快速上手,掌握jbpm的基本操作和应用。通过观看jbpm-overview.swf文件,学习者可以直观地了解jbpm的全貌,为进一步深入学习和实践打下坚实基础。在实际工作中,...

    jbpm工作流引擎总结文档

    jbpm工作流引擎基于J2EE的轻量级,纯java,开源的工作流管理系统。

    jBPM工作流详解

    **jBPM工作流详解** jBPM,全称Java Business Process Management,是Red Hat公司开发的一款开源的工作流管理系统,它提供了对业务流程的建模、执行和监控能力。jBPM不仅支持传统的工作流标准,如BPMN 2.0,还集成...

    JBPM工作流全套学习资料

    【JBPM工作流全套学习资料】是一份详尽的学习资源,涵盖了JBPM工作流系统的基础到高级知识。JBPM(Java Business Process Management)是开源的企业级工作流管理系统,它允许开发者设计、部署和执行业务流程。这个...

    jbpm3.1.4经典学习教程

    "JBPM工作流开发指南v10-20070706.rar"这份文档可能是较新的指南,虽然版本号与标题不符,但依然能提供关于jbpm更广泛和深入的信息,包括最佳实践、优化技巧以及可能存在的问题和解决方案。 总的来说,通过这个教程...

    jbpm4.4学习教程

    jbpm4.4学习教程是一套专为初学者设计的教育资源,旨在帮助用户掌握jbpm这一业务流程管理(Business Process Management)框架的第4.4版本。jbpm是一款开源的Java平台工具,它允许开发者设计、执行和管理业务流程,...

    关于jbpm工作流的一些常用的问题

    jbpm工作流是一种开源的工作流管理系统,由JBoss组织开发,用于帮助企业自动化业务流程。jbpm提供了丰富的功能,包括流程定义、执行、监控和集成,适用于各种业务场景,如人力资源管理、采购流程、客户服务等。 在...

    JBPM工作流详解

    ### JBPM工作流详解 #### 一、工作流基础与概念 **工作流**(Workflow)是指业务过程的部分或整体在计算机应用环境下的自动化。它主要用于实现文档、信息或任务在多个参与者之间的自动传递,以达成某个特定的业务...

    jbpm4新手教程

    jbpm4新手教程

    activiti工作流入门教程.docx

    - **jBPM 5**:jBPM是另一个流行的工作流引擎,它同样遵循BPMN 2.0标准。jBPM强调的是完整的企业级BPM解决方案,包括流程建模、执行、监控和规则集成等。 - **Activiti的优势**:相比于jBPM,Activiti的API更加...

    JBPM4.4中文教程

    JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。 此文档为JBPM4.4的中文教程。

Global site tag (gtag.js) - Google Analytics