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
接口
一java
工做流盡管還在不成熟的發展階段,甚至尚未一個公認的規範標準。但其應用卻已經在高速展開,這說明市場對工做流框架的需求是急迫而巨大的。
mysql
咱們公司的後臺短信管理系統涉及短信編髮、領導層層審覈等操做,這是一個比較典型的工做流系統。過去咱們用的工做流引擎是 shark ,而後在使用後發現其過於龐大,後臺數據庫操做頻繁而未進行優化,直接致使的後果就是前臺操做緩慢。因而經研究決定,將工做流引擎由 shark 換成 jBPM 。
sql
jBPM 以前是一個開源軟件,後增長 JBoss 組織。正好咱們公司也是用 JBoss 的。只是 jBPM 並無綁定在 JBOSS 上, Tomcat 等也可以使用它。
數據庫
jBPM 的正處在不斷髮展中,作爲開源軟件的特色,其設計變化每每很是大。因此一些過去的資料可能已經不適用了。因而做者依據本身的使用經驗,又一次整理出這份文檔,以備學習參考。
apache
注:本文使用的 jBPM 版本號爲
3.1.1
session
環境準備
oracle
所有 JAVA 開發第一個需要安裝的,沒什麼好說的。記得把系統變量 JAVA_HOME 設上。
eclipse
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 中。
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 配置文件演示樣例,有些還包