jbpm入門樣例

1.      jBPM的簡介
jBPM 是JBOSS下的一個開源java工做流項目,該項目提供eclipse插件,基於Hibernate實現數據持久化存儲。
   參考
2.      jBPMmyeclipse的衝突
當eclipse安裝了myeclipsejBPM時候,可能有衝突,詳細表現在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 是 jBPMOralce模型,包括相應的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 ();
jBPMHibernate,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

1、安裝JDK 框架

所有 JAVA 開發第一個需要安裝的,沒什麼好說的。記得把系統變量 JAVA_HOME 設上。 eclipse

2、安裝Ant jsp

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 中。

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 配置文件演示樣例,有些還包

相關文章
相關標籤/搜索