jBPM 工作流入门教程


jbpm jbpm jbpm jbpm 工 作流 入门 教程 1.1.1.1. jBPM jBPM jBPM jBPM 的简单介绍 jBPM 是JBOSS 下 的一 个开 源 java 工 作流 项目 ,该 项目 提供 eclipse 插 件, 基于 Hibernate 实现数据持久化存储。 参考 http://www.jboss.com/products/jbpm 2.2.2.2. jBPM 和myeclipse myeclipse myeclipse myeclipse 的冲突 当eclipse 安装了 myeclipse 和jBPM 时候,可能有冲突,具体表现在 jBPM 的流程设计器不能在 eclipse 中使用。 3.3.3.3. Hibernate Hibernate Hibernate Hibernate 连接mysql mysql mysql 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.4.4.4. Hibernate Hibernate Hibernate Hibernate 连接Oracle Oracle Oracle 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.5.5.5. 为jBPM jBPM jBPM jBPM 创建数据库表等内容 5.1.5.1.5.1.5.1. 为mysql mysql mysql mysql 创 建数据 库以及 数据内 容 JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().dropSchema(); JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().createSchema(); 这2个语针对 mysq 有效 . 5.2.5.2.5.2.5.2. 为oralce oralce oralce oralce 创 建数据 库以及 数据内 容 JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().dropSchema(); JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().createSchema(); 上 面的 语句 对 oralce 无 效。 模型目录jBPM\jbpm_database\jBPM_oralce10g.pdm 是jBPM 的Oralce 模型,包含对应的 Sequence 的 信息 . 需 要在 数据 库中 创建 Sequence name=hibernate_sequence http://wiki.jboss.org/wiki/Wiki.jsp?page=JbpmOnOracle 5.3.5.3.5.3.5.3. 流 程信息 保存到 数据库 JbpmSessionFactoryfactory = 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.5.4.5.4.5.4. 在Mysql Mysql Mysql Mysql 安 装过程 指定字 符集 在Mysql 安 装过 程中 指定 相应 的默 认字 符集 是 GBK 5.5.5.5.5.5.5.5. Hibernate.properties Hibernate.properties Hibernate.properties Hibernate.properties 文 件中的 字符集 设置 hibernate.connection.url=jdbc:mysql://localhost/jbpmtest?useUnicode=true&characterEncodin g=GBK 5.6.5.6.5.6.5.6. hibernate.cfg.xmlhibernate.cfg.xmlhibernate.cfg.xmlhibernate.cfg.xml 文 件中的 字符集 设置 jdbc:mysql://192.168.1.2/jbpmtest 5.7.5.7.5.7.5.7. MySQL MySQL MySQL MySQL 的 配置文 件的修 改 :::: my.ini 中default-character-set=GBK 注 意有 2处 需要 修改 6.6.6.6. 为流程定义变量 分成3种 流程 变量 全 局变 量( 全局 流程 变量 ) 全 局临 时变 量( 全局 流程 临时 变量 ) 局 部变 量( 流程 某个 接点 内有 效的 变量 ) @see org.jbpm.context.exe.ContextInstanceorg.jbpm.context.exe.ContextInstanceorg.jbpm.context.exe.ContextInstanceorg.jbpm.context.exe.ContextInstance 目 前还 没有 使用 过局 部变 量( 流程 某个 接点 内有 效的 变量 ) 流 程变 量的 定义 6.1.6.1.6.1.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.VariableInstanceorg.jbpm.context.exe.VariableInstanceorg.jbpm.context.exe.VariableInstanceorg.jbpm.context.exe.VariableInstance 6.2.6.2.6.2.6.2. 流 程变量 的使用 l 变 量的 定义 和获 取 voidContextInstance.setVariable(String variableName, Object value); voidContextInstance.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.6.3.6.3.6.3. VariableVariableVariableVariable lifetimelifetimelifetimelifetime 一个变量在被定义后,在变量从ContextInstance 删除前,都可以被访问。当变量被 删除后,去获取该变量将返回为空。 6.4.6.4.6.4.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.6.5.6.5.6.5. TransientTransientTransientTransient variablesvariablesvariablesvariables 流 程的 历史 变量 是不 能持 久化 的, 作用 范围 是对 整个 流程 全局 有效 的。 在ContextInstance 类 内部 ,采 用的 是一 个 Map 来 存储 TransientVariableTransientVariableTransientVariableTransientVariable 的 信息 参 考代 码 org.jbpm.context.exe.ContextInstance 的 源代 码。 主 要的 相关 方法 publicvoid deleteTransientVariabledeleteTransientVariabledeleteTransientVariabledeleteTransientVariable (java.lang.String name) publicvoid setTransientVariablesetTransientVariablesetTransientVariablesetTransientVariable (java.lang.String name, java.lang.Object value) publicjava.lang.Objectjava.lang.Objectjava.lang.Objectjava.lang.Object getTransientVariable(getTransientVariable(getTransientVariable(getTransientVariable(java.lang.String name)))) 6.6.6.6.6.6.6.6. VariablesVariablesVariablesVariables overloadingoverloadingoverloadingoverloading 当 一个 变量 和流 实例 关联 (变 量名 字 =”wdz”,value=”test”), 如果 在设 置一 个变 量 (变 量名 字 =”wdz”,value= new Integer(10)) , 那 最后 变量 (变 量名 字 =”wdz)的 值是 Integer(10)。 这 称之 为 overload. 6.7.6.7.6.7.6.7. VariablesVariablesVariablesVariables overridingoverridingoverridingoverriding 如果父流程有变量A(值=”value1”),子流程又定义了变量A值=”value2”,那在子流程范围 内,获取变量A的值,那结果是值=”value2”。这是遵循一般语言的局部变量在它的局部范 围内override 上 级变 量。 6.8.6.8.6.8.6.8. 流 程变量 的持久 化 它 依赖 于流 程实 例的 持久 化, 非 TransientVariableTransientVariableTransientVariableTransientVariable 随流 程实 例的 持久 化一 起被 保存 。 保 存在 数据 表 jbpm_variableinstance 参考org.jbpm.context.exe.VariableInstanceorg.jbpm.context.exe.VariableInstanceorg.jbpm.context.exe.VariableInstanceorg.jbpm.context.exe.VariableInstance 6.9.6.9.6.9.6.9. CustomizingCustomizingCustomizingCustomizing variablevariablevariablevariable persistencepersistencepersistencepersistence ((((可 以进一 步了解 )))) User javaobject <---> converter <---> variable instance 也就是自定义类的持久化需要定义自己的 converter 和变量实例类 converter 和变量实例类需要继承 org.jbpm.context.exe.VariableInstanceorg.jbpm.context.exe.VariableInstanceorg.jbpm.context.exe.VariableInstanceorg.jbpm.context.exe.VariableInstance converter 需要实现 org.jbpm.context.exe.Converter 接口 一 工 作流 虽然 还在 不成 熟的 发展 阶段 ,甚 至还 没有 一个 公认 的规 范标 准。 但其 应用却已经在快速展开,这说明市场对工作流框架的需求是急迫而巨大的。 我们公司的后台短信管理系统涉及短信编发 、领导层层审核等操作 ,这是一个比 较典型的工作流系统。过去我们用的工作流引擎是shark ,然后在使用后发现 其过于庞大 ,后台数据库操作频繁而未进行优化 ,直接导致的后果就是前台操作 缓慢。于是经研究决定,将工作流引擎由 shark 换成 jBPM 。 jBPM 之前是一个开源软件,后加入JBoss 组织。正好我们公司也是用JBoss 的。不过 jBPM 并没有绑定在 JBOSS 上, Tomcat 等也可以使用它。 jBPM 的正处在不断发展中 ,做为开源软件的特点 ,其设计变化往往很大 。所以 一些过去的资料可能已经不适用了 。于是作者根据自己的使用经验 ,重新整理出 这份文档,以备学习参考。 注:本文使用的 jBPM 版本为 3.1.1 环 境准 备 1111、 安装 JDKJDKJDKJDK 所有JAVA 开发第一个需要安装的,没什么好说的。记得把系统变量 JAVA_HOME 设上。 2222、 安装 AntAntAntAnt 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 中。 3333、 安装 EclipseEclipseEclipseEclipse Eclipse 不是开发 jBPM 必须的工具,但它是对 jBPM 开发很有帮助的工具 ,特 别是 jBPM 提供了一个 Eclipse 插件用来辅助开发 jBPM 。关于 Eclipse 的安 装不赘述了,本文用的版本是: Eclipse3.2 安装jBPMjBPMjBPMjBPM 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 配 置文 件示 例, 有些 还包 含了 相应 的 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 在开始工作了,它不断进行轮询。 打开网页: http://localhost:8080/jbpm/ 得到如下画
还剩10页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

gangzi186

贡献于2015-08-10

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf