|
所有圖片請到jbpm開源站點去查看。此部分對應著jbpm站點的doc的部署那一部分。這部分的理解應該沒有什么太大出入,歡迎各位收藏瀏覽我的文章。謝謝! 對于一些常用單詞或者行業(yè)內(nèi)已經(jīng)常用的單詞我并沒有做翻譯,例如schedule等,我想這樣能夠更方便大家的理解。job我譯成一次作業(yè)了。還有一些是我吃不準的,請見諒!如果有什么疑問或者見地請與我聯(lián)系!我會盡快更正。 希望能與您共同進步,歡迎交流: yun15291li@hotmail.com
序言: 在經(jīng)過了jbmp開始入門以及指南兩章后,對JBPM有個大概的了解。下面我們來看看JBPM部署方面的知識。 接下來介紹如何把JBPM部署到不同的環(huán)境中。
JBPM可以在許多不同的環(huán)境進行部署,其中包括ant task(應該算是個附屬腳本,不應該算做部署環(huán)境吧),swing client,web app,ejb,web services中。
部署jbpm到j2se環(huán)境: 這應該算是jbpm可以部署的幾種方案中最簡單的,把jbpm應用到一個簡單java main程序中,一個單元測試中,一個swing應用中。 作為最最基礎的,jbpm能夠被應用在簡單的java程序中。你只要把jbpm.core.jar添至系統(tǒng)classpath中并且配置好數(shù)據(jù)庫。在java程序中你就可以獲得jbpm服務org.jbpm.JbpmServiceLocator 下面給出幾種部署: 1、 在webapp中:如果一個servlet容器:tomcat、resin等。 2、 在一個ant-task:jbpm包含一個ant-tasks,用來給process archive打包并且部署一個process archive。 3、 JUnite test中:jbpm的默認配置是想開發(fā)測試process archives,應用于一個瞬時、內(nèi)存數(shù)據(jù)庫中,那也就意味著你不用建立一個獨立數(shù)據(jù)庫和初始化它。Jbpm檢測到?jīng)]有jbpm表,那么就會自動建好。這里應用的是hibernate框架來實現(xiàn)對象持久層。 4、 在一個定制的app中:當你的應用需要整合一個工作流管理系統(tǒng),你可以僅僅使用jbpm作為你們應用當中的一個組件,甚至于您系統(tǒng)的用戶都沒注意到使用jbpm這一點。 部署jbpm到一個web app中: 1、 安裝jdbc驅(qū)動(一般就是下載相應的jar文件追加classpath或者copy到WEB-INF/lib目錄下) 2、 把jbpm.properties放到WEB-INF/classes中 3、 這些jar文件放到WEB-INF/lib目錄下 a) jbpm.core.jar b) hibernate- 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已經(jīng)寫了一個ejb-wrapper來包裹jbpm api,接下來的大致意思就是:利用ant可以幫助您把jbpm部署到jboss中。這一點我測試過了。其他請參看原文。 適當?shù)呐渲?/SPAN>jbpm,請遵從下面4種配置機制:
1、 把jbpm.properties放到classloader能夠找到的位置,因為它加載的時候使用getResourceAsStream方法。不懂的可以查看jdk。大致就是放到classpath可以找到的位置,如web app中的WEB-INF/classes中,在tomcat啟動后就會自動把此目錄下文件加載到classpath中。
2、 在調(diào)用getInstance方法之前加載配置文件(properties)。 3、 在調(diào)用getInstance方法之前調(diào)用配置文件(classloader,string)。 4、 對于創(chuàng)建復雜不同的jbpm配置實例在相同的jvm(classloader),你可以用jbpm配置和servicelocator的構(gòu)造器并且不用做任何靜態(tài)初始化和配置。 配置參數(shù)如下:
屬性
值
描述
默認值
hibernate.*
@see the hibernate docs
在jbpm配置文件中直接完成hibernate的配置
默認是一個內(nèi)存數(shù)據(jù)庫hsqldb。主要是為測試而用的
jbpm.create.tables
{ only-if-not-present | never }
方便應用,jbpm在最開始啟動時候會檢測是否存在表,如果沒有則會自動創(chuàng)建。產(chǎn)生ddl語句開始drop表和約束然后創(chuàng)建表和約束
only-if-not-present
jbpm.create.tables.log
{ true | false }
Ddl語句創(chuàng)建表是否被log輸出.
false
jbpm.create.tables.query
{ a plain SQL query }
簡單的sql查詢語句,這個屬性會檢測表是否存在,并且這個屬性僅僅用在屬性“‘jbpm.create.tables‘”被設置成’only-if-not-present‘的情況。如果執(zhí)行sql查詢語句出現(xiàn)異常,那么jbpm會假定表不存在.
SELECT ID FROM JBPM_DEFINITION WHERE ID = 1
jbpm.apply.transactions
{ yes | no }
Jbpm如何處理transaction(事務)‘yes‘意思是對于執(zhí)行每個更新方法把事務應用到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中的類文件)。此配置被添加是因為一些數(shù)據(jù)庫驅(qū)動(例如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 }
產(chǎn)生ID方式。用于jbpm持久對象。
org. jbpm. persistence. hibernate. SequenceBlockIdGenerator
jbpm.id.generator.node.id
{ an integer between 0 and 65535 }
在cluster中這個節(jié)點(node)的唯一ID
0
jbpm.id.generator.bocksize
{ an integer }
(不知道怎么翻譯好,下面是原文)大致意思是ID產(chǎn)生模式的區(qū)塊大小。
100
jbpm.id.generator.configuration
{ same | the resource of the id generator hibernate properties }
ID產(chǎn)生器需要一個在分離事務中的session。因此session工廠用于產(chǎn)生ID,ID可以不從數(shù)據(jù)源管理的container中獲得。所以如果你不使用datasource(數(shù)據(jù)源)在其中管理事務的話,你可以使用默認值。‘same‘ 意思是和其他配置參數(shù)采用相同配置屬性來為ID產(chǎn)生器的session工廠。否則,采用hibernate配置來產(chǎn)生使用ID產(chǎn)生器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中等待的毫秒數(shù)。
5000
jbpm.execute.actions
{ true | false }
如果設置為true,jbpm將執(zhí)行指定的action handler。可以設置為false,為了測試目的以免執(zhí)行業(yè)務流程。
true
JBPM數(shù)據(jù)庫:
概述:
Jbpm存儲所有信息在數(shù)據(jù)庫中: 1、 過程定義 2、 流程執(zhí)行的運行時信息 3、 流程log Schema generation
默認狀態(tài)下,第一次訪問數(shù)據(jù)庫時候,jbpm將會檢測表是否存在。如果不存在那么jbpm數(shù)據(jù)庫表將會被自動創(chuàng)建。這可以在上面配置信息中找到’jbpm.create.tables’ 針對一個數(shù)據(jù)庫的schema能夠在一個文件中創(chuàng)建,按照下面的步驟: 1、 更新文件:${jbpm.home}/core/schema.generation.properties來反射你選擇的數(shù)據(jù)庫。默認的數(shù)據(jù)庫是Hypersonic DB。在這個文件里有樣本生成??梢苑抡丈勺约盒枰奈募?。 2、 把對應的jdbc驅(qū)動放到lib目錄(classpath能夠找得到) 3、 在dos(命令提示符)下cd到打開core目錄 4、 執(zhí)行ant generate.dll 6、 當運行jbpm時候,確信你提供了正確的hibernate配置。在上面的配置中已經(jīng)介紹。 一些其他注意事項:
1、 有一些數(shù)據(jù)庫想firebird和oracle需要添加如下屬性配置到jbpm.properties:
Hibernate.query.substitutions=true 1,false 0
2、校驗數(shù)據(jù)庫中的text類型的長度,默認一個string類型是255長度。你可以以兩種方式調(diào)整:通過增加長度參數(shù),在hibernate mapping 文件中像這樣: APPSERVER 兼容性:
Scheduler:
Jbpm有一個scheduler。ActionHandler實現(xiàn)器(和其他代理實現(xiàn)類)可以通過schedulerservices來schedule工作。SchedulerService可以在ExecutionContext中的getSchedulerService方法來進行訪問。
Jbpm的scheduler包括4部分:
1、 scheduler service:允許schedule和取消一次作業(yè)。實際上scheduler service僅僅插入schedule和移除jbpm數(shù)據(jù)庫中的一次作業(yè)記錄。在某一個過程執(zhí)行事件actions能被執(zhí)行,在actions里面,你可以schedule和取消一次作業(yè)。
2、 scheduler server:它是一個能夠檢查一次作業(yè)取消還是執(zhí)行的組件。Scheduler server應該比較有規(guī)律(例如每隔 3、 scheduler servlet:響應request的servlet。通知2來檢查工作。
4、 scheduler client:一個非常簡單的java程序,用來一個request給3。時間間隔一般比較?。◣酌耄?/SPAN>
一個關(guān)于如何在過程定義中使用scheduler的例子,請參看scheduler test:
在jboss cluster中的jbpm
這里講的是如何在jboss cluster部署jbpm 企業(yè)bean。前提:你需要有兩個或者更多的計算機,并且預先裝好jvm和ant??蛇x地,你能夠在一個計算機上運行多個jboss實例,但是這種情況,這里并沒有介紹。
安裝: +----------------+
| Node 1 |
| +------------+ |
| | Hypersonic |.|...................................... . . .
| | Database | | : :
| | for jBpm | | +---------:------+ +---------:------+
| +------------+ | | Node 2 : | | Node 3 : |
| : | | : | | : |
| +------------+ | | +------------+ | | +------------+ |
| | jBpm ejb | | | | jBpm ejb | | | | jBpm ejb | |
| | module | | | | module | | | | module | |
| +------------+ | | +------------+ | | +------------+ |
| ! | | ! | | ! |
+-------!--------+ +---------!------+ +---------!------+
! ! !
! ! !
!!!!!!! remote application clients !!!!!!!!!!!!!!
在每個node上做如下操作:
<connection-url>jdbc:hsqldb:hsql://localhost:1701</connection-url>
請使用node1的ip,不要使用localhost(即使是在node1上也是不要使用localhost)。切記!
在node1上執(zhí)行下面操作:
在node2和其他沒有數(shù)據(jù)庫的節(jié)點(如3),做如下操作:
On nodes 2 and higher (=the ones without a database), also do the following :
開啟所有node的服務: ‘{jboss.home}/bin/run.bat -c jbpm‘
這時,所有node 的準備工作就做好了。
|
|
|