所有图片请到jbpm开源站点去查看。此部分对应着jbpm站点的doc的部署那一部分。这部分的理解应该没有什么太大出入,欢迎各位收藏浏览我的文章。谢谢!
对于一些常用单词或者行业内已经常用的单词我并没有做翻译,例如schedule等,我想这样能够更方便大家的理解。job我译成一次作业了。还有一些是我吃不准的,请见谅!如果有什么疑问或者见地请与我联系!我会尽快更正。
希望能与您共同进步,欢迎交流: yun15291li@hotmail.com
序言:
在经过了jbmp开始入门以及指南两章后,对JBPM有个大概的了解。下面我们来看看JBPM部署方面的知识。
接下来介绍如何把JBPM部署到不同的环境中。
JBPM可以在许多不同的环境进行部署,其中包括ant task(应该算是个附属脚本,不应该算做部署环境吧),swing client,web app,ejb,web services中。
部署jbpm到j2se环境:
这应该算是jbpm可以部署的几种方案中最简单的,把jbpm应用到一个简单java main程序中,一个单元测试中,一个swing应用中。
作为最最基础的,jbpm能够被应用在简单的java程序中。你只要把jbpm.core.jar添至系统classpath中并且配置好数据库。在java程序中你就可以获得jbpm服务org.jbpm.JbpmServiceLocator
下面给出几种部署:
1、 在webapp中:如果一个servlet容器:tomcat、resin等。
2、 在一个ant-task:jbpm包含一个ant-tasks,用来给process archive打包并且部署一个process archive。
3、 JUnite test中:jbpm的默认配置是想开发测试process archives,应用于一个瞬时、内存数据库中,那也就意味着你不用建立一个独立数据库和初始化它。Jbpm检测到没有jbpm表,那么就会自动建好。这里应用的是hibernate框架来实现对象持久层。
4、 在一个定制的app中:当你的应用需要整合一个工作流管理系统,你可以仅仅使用jbpm作为你们应用当中的一个组件,甚至于您系统的用户都没注意到使用jbpm这一点。
部署jbpm到一个web app中:
1、 安装jdbc驱动(一般就是下载相应的jar文件追加classpath或者copy到WEB-INF/lib目录下)
2、 把jbpm.properties放到WEB-INF/classes中
3、 这些jar文件放到WEB-INF/lib目录下
a) jbpm.core.jar
b) hibernate-2.1.1.jar
c) c3p0.jar
d) dom4j.jar
e) cglib2.jar
f) ehcache.jar
g) odmg.jar
h) commons-collections.jar
i) commons-logging.jar
j) commons-beanutils.jar
k) commons-lang.jar
4、 jbpm.war到app下(原文没写,我猜也是应该如此的。)等我测试后在公布正确步骤,会在今后文章中完善。
部署jbpm到一个J2EE服务器中:
简单的部署在J2EE container中,jbpm已经写了一个ejb-wrapper来包裹jbpm api,接下来的大致意思就是:利用ant可以帮助您把jbpm部署到jboss中。这一点我测试过了。其他请参看原文。
配置:
适当的配置jbpm,请遵从下面4种配置机制:
1、 把jbpm.properties放到classloader能够找到的位置,因为它加载的时候使用getResourceAsStream方法。不懂的可以查看jdk。大致就是放到classpath可以找到的位置,如web app中的WEB-INF/classes中,在tomcat启动后就会自动把此目录下文件加载到classpath中。
2、 在调用getInstance方法之前加载配置文件(properties)。
3、 在调用getInstance方法之前调用配置文件(classloader,string)。
4、 对于创建复杂不同的jbpm配置实例在相同的jvm(classloader),你可以用jbpm配置和servicelocator的构造器并且不用做任何静态初始化和配置。
配置参数如下:
|
属性
|
值
|
描述
|
默认值
|
|
hibernate.*
|
@see the hibernate docs
|
在jbpm配置文件中直接完成hibernate的配置
|
默认是一个内存数据库hsqldb。主要是为测试而用的
|
|
jbpm.create.tables
|
{ only-if-not-present | never }
|
方便应用,jbpm在最开始启动时候会检测是否存在表,如果没有则会自动创建。产生ddl语句开始drop表和约束然后创建表和约束
|
only-if-not-present
|
|
jbpm.create.tables.log
|
{ true | false }
|
Ddl语句创建表是否被log输出.
|
false
|
|
jbpm.create.tables.query
|
{ a plain SQL query }
|
简单的sql查询语句,这个属性会检测表是否存在,并且这个属性仅仅用在属性“'jbpm.create.tables'”被设置成’only-if-not-present'的情况。如果执行sql查询语句出现异常,那么jbpm会假定表不存在.
|
SELECT ID FROM JBPM_DEFINITION WHERE ID = 1
|
|
jbpm.apply.transactions
|
{ yes | no }
|
Jbpm如何处理transaction(事务)'yes'意思是对于执行每个更新方法把事务应用到jdbc连接上。其中排除定义在*readservices中的更新方法。'no'意味着将不会应用任何事务处理操作。’no’能够应用在一个容器或者用户自己提供的jdbc连解决中。
|
yes
|
|
jbpm.file.mgr
|
{ database | filesystem | the class-name of a class that implements org. jbpm. persistence. FileMgr }
|
Jbpm如何存储文件(例如在process archive中的类文件)。此配置被添加是因为一些数据库驱动(例如oracle)不能很好的处理二进制文件。
|
database
|
|
jbpm.file.mgr.directory
|
|
Jbpm存储文件的根目录的名字,设置成如:/usr/jbpm或者c:/data/jbpm
|
-no default specified-
|
|
jbpm.validate.xml
|
{ true | false }
|
如果这个属性设置为false的话,Process archive分析将不会有效验证processdefinition.xml文件。
|
true
|
|
jbpm.id.generator
|
{ default | the class-name of a class that implements org. jbpm. persistence. IdGenerator }
|
产生ID方式。用于jbpm持久对象。
|
org. jbpm. persistence. hibernate. SequenceBlockIdGenerator
|
|
jbpm.id.generator.node.id
|
{ an integer between 0 and 65535 }
|
在cluster中这个节点(node)的唯一ID
|
0
|
|
jbpm.id.generator.bocksize
|
{ an integer }
|
(不知道怎么翻译好,下面是原文)大致意思是ID产生模式的区块大小。
|
100
|
|
jbpm.id.generator.configuration
|
{ same | the resource of the id generator hibernate properties }
|
ID产生器需要一个在分离事务中的session。因此session工厂用于产生ID,ID可以不从数据源管理的container中获得。所以如果你不使用datasource(数据源)在其中管理事务的话,你可以使用默认值。'same' 意思是和其他配置参数采用相同配置属性来为ID产生器的session工厂。否则,采用hibernate配置来产生使用ID产生器session工厂。(上面这段话可能翻译有误,大致意思如此。)
|
same
|
|
jbpm.log.stdout
|
{on|off}
|
配置公用(普通)log输出。当设置为off,jbpm不再配置公用(普通)log。
|
on
|
|
jbpm.log.default
|
{ trace | debug | info | warn | error | fatal }
|
默认的log级别。
|
error
|
|
jbpm.log.package.* (whererepresents any package name)
|
{ trace | debug | info | warn | error | fatal }
|
以给定的值覆写jbpm默认的log级别。
|
jbpm. log. package. org. jbpm= debug
|
|
jbpm.scheduler.wait.period
|
long
|
在schduler polls中等待的毫秒数。
|
5000
|
|
jbpm.execute.actions
|
{ true | false }
|
如果设置为true,jbpm将执行指定的action handler。可以设置为false,为了测试目的以免执行业务流程。
|
true
|
JBPM数据库:
概述:
Jbpm存储所有信息在数据库中:
1、 过程定义
2、 流程执行的运行时信息
3、 流程log
Schema generation
默认状态下,第一次访问数据库时候,jbpm将会检测表是否存在。如果不存在那么jbpm数据库表将会被自动创建。这可以在上面配置信息中找到’jbpm.create.tables’
针对一个数据库的schema能够在一个文件中创建,按照下面的步骤:
1、 更新文件:${jbpm.home}/core/schema.generation.properties来反射你选择的数据库。默认的数据库是Hypersonic DB。在这个文件里有样本生成。可以仿照生成自己需要的文件。
2、 在文件夹${jbpm.home}/core用ant generate.dll