- 浏览: 140971 次
- 来自: ...
文章分类
最新评论
-
nocb:
太感谢了, 我调了2天,始终找不到原因,
DataOutputStream writeBytes(String s) 中文乱码--ZT -
jbeduhai:
发贴能成功吗,我执行的怎么是说没有登录呢,前面登录是正常的,发 ...
ZT---httpclient如何保持session会话模拟登录后的操作 -
chwanga:
很详细啊,廓然开朗,感谢楼主
filter servlet 区别--ZT -
JMS_Exception:
xvm03 写道promzaid 写道.net 还是 java ...
Java的字符流和字节流 -
xvm03:
promzaid 写道.net 还是 java java
Java的字符流和字节流
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)+'&u='+escape(d.location.href)+'&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
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
在开始工作了,它不断进行轮询。
发表评论
-
页面弹出登录框如何通过httpclient进行登录
2011-01-04 16:17 1324页面弹出登录框如何通过httpclient进行登录 h ... -
转贴--在Struts2的Action中取得请求参数值的几种方法
2010-10-27 18:33 1183在Struts2的Action中取得请求参数值的几 ... -
jdbc连接
2010-08-02 17:43 710Connection conn = null; ResultS ... -
几个需要仔细阅读的源码
2010-05-19 23:20 693OSGI spring jboss -
listener,filter区别--ZT
2010-04-28 16:05 1661web.xml里面可以配置Filter和Listen ... -
JDK 1.4中存在一个有关编--ZT
2010-04-23 21:30 1015在JDK 1.4中存在一个有关编码的问题。简要描述如下: ... -
Servlet不是单例的--ZT
2010-04-22 20:59 1868Servlet不是单例的.不过一般来说一个servlet只会有 ... -
java 多态的理解--ZT
2010-04-18 00:43 1051如何理解Java多态性?通过类型转换,把一个对 ... -
JAVA 深入学习
2010-04-17 14:37 786java 设计模式:策略模式(内部类的使用),装饰模式(IO) ... -
JAVA和JAVAC 命令行--ZZ
2009-09-27 15:45 829JAVA和JAVAC 命令行 ... -
工作流学习-JBPM(一)
2009-09-27 11:25 779展翅飞翔 致力于J2EE与中间件整合方面的研 ... -
详细解析Java中抽象类和接口的区别
2009-03-03 20:38 654详细解析Java中抽象类和 ... -
比较Vector和ArrayList的不同
2009-03-03 20:35 1187――比较Vector和ArrayLi ... -
string,stringbuffer,stringbuilder比较
2009-03-03 20:33 1202出于方便的考虑,我们在进行字符串的内容处理的时候往往会 ... -
java面向对象浅析系列2
2009-03-03 20:21 674java面向对象浅析系列2——抽象类、接口与多继承 有时 ... -
java面向对象浅析系列1
2009-03-03 20:21 701java面向对象浅析系列1 ... -
java1.5线程池简单介绍
2009-03-03 20:17 2236JDK1.5中的线程池使用简介 在多线程大师Doug L ... -
一个JDBC简单连接
2009-03-03 20:04 694一个最基本的JDBC连接: Conn ... -
为什么要使用泛型?
2009-03-03 19:59 1456类型安全的List Java的一 ... -
泛型的注意事项
2009-03-03 19:58 9341、不可以用一个本地类 ...
相关推荐
第一部分、(工作流开发基础-为什么学习工作流)
工作流入门必经的四个简单例子。 vacate主要说明基本使用。 UserModel说明如何同用户模型相结合。 ForkJoin主要说明Fork结点和Join结点的使用。 countersignature主要说明如何持久化和实现较复杂的task node控制,...
jbpm工作流教程,4.1版本的Java工作流
jbpm入门例子,用Myeclipse6.0打开可以直接运行本例子。
以例子讲解jbpm的应用过程,很好的教材,对于初学者来说,是必备的教材
JBPM工作流入门经典例子,其实JBPM没有想象中那边难!只需要看懂这个例子。。。就差不多了!而且JBPM是可视化工作流框架,更容易上手。
jBPM工作流详解,jBPM工作流详解 jBPM工作流详解,jBPM工作流详解 jBPM工作流详解,jBPM工作流详解
工作流程 JBPM工作流管理工作流程 JBPM工作流管理工作流程 JBPM工作流管理工作流程 JBPM工作流管理
jbpm工作流引擎基于J2EE的轻量级,纯java,开源的工作流管理系统。
关于jbpm工作流的一些常用的问题jbpm工作流的一些常用的问题
jbpm工作流程jbpm工作流程jbpm工作流程jbpm工作流程jbpm工作流程
本文件从JBPM的原理、实现方法、实例等方面详细讲解了JBPM的原理,包括以下内容: 1、JBPM特色: 3 2、流程图的组成: 3 2.1流转 (TRANSITION) 3 2.2活动 (ACTIVITY) 3 3、所用到的表: 4 3.1资源库与运行时表结构:...
详细讲解了JBPM工作流的概念以及使用,可以让大家更加轻松把jbpm工作流应用到自己的项目中。
jbpm教程和实例,并详细讲述了相关配置,是新手上手的最好资料。
jbpm4新手教程
JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。 此文档为JBPM4.4的中文教程。
jbpm工作流详解
jbpm3.1.4的学习教程,里面有jbpm开发指南,学完这个教程你就能够看懂jbpm的项目了。然后我还做了个小的例子,把详细的不走都记录下来了。
jbpm开发指南 jbpm开发指南 jbpm 工作流 自定义
jbpm工作流基础视频,讲解工作流流程定义的整个过程,适合于jbpm的初学者学习