亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 9655 | 回復(fù): 1
打印 上一主題 下一主題

jbpm入門例子(一) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-06-29 18:00 |只看該作者 |倒序?yàn)g覽

jbpm入門例子
[url=javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();]收藏[/url]
新一篇: windows下svn-1.4.0環(huán)境布置和eclipse集成
1.      jBPM的簡單介紹
jBPM是JBOSS下的一個開源java工作流項(xiàng)目,該項(xiàng)目提供eclipse插件,基于Hibernate實(shí)現(xiàn)數(shù)據(jù)持久化存儲。
   參考
http://www.jboss.com/products/jbpm

2.      jBPM和myeclipse的沖突
當(dāng)eclipse安裝了myeclipse和jBPM時候,可能有沖突,具體表現(xiàn)在jBPM的流程設(shè)計(jì)器不能在eclipse中使用。

3.      Hibernate連接mysql數(shù)據(jù)庫的一般參數(shù)
下面的配置參數(shù),根據(jù)需要可以修改:
jbpmtest是mysql中的schema的名字;
GBK是字符集,可以根據(jù)需要修改;
username=root,mysql數(shù)據(jù)庫的用戶名是root;
password=mysql,mysql數(shù)據(jù)庫的用戶密碼是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數(shù)據(jù)庫的一般參數(shù)
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創(chuàng)建數(shù)據(jù)庫表等內(nèi)容
5.1.             為mysql創(chuàng)建數(shù)據(jù)庫以及數(shù)據(jù)內(nèi)容
JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().dropSchema();
JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().createSchema();
這2個語針對mysq有效.
5.2.             為oralce創(chuàng)建數(shù)據(jù)庫以及數(shù)據(jù)內(nèi)容
JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().dropSchema();
JbpmSessionFactory.buildJbpmSessionFactory().getJbpmSchema().createSchema();
上面的語句對oralce無效。
模型目錄jBPM\jbpm_database\jBPM_oralce10g.pdm 是jBPM的Oralce模型,包含對應(yīng)的Sequence的信息.
需要在數(shù)據(jù)庫中創(chuàng)建 Sequence name=hibernate_sequence
http://wiki.jboss.org/wiki/Wiki.jsp?page=JbpmOnOracle

5.3.             流程信息保存到數(shù)據(jù)庫
JbpmSessionFactory  factory =  JbpmSessionFactory.buildJbpmSessionFactory();
        JbpmSession session = factory.openJbpmSession();
        GraphSession graphSession =  session.getGraphSession();
        session.beginTransaction();
        
        /// new ProcessDefinition 實(shí)例
        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安裝過程中指定相應(yīng)的默認(rèn)字符集是GBK
5.5.             Hibernate.properties文件中的字符集設(shè)置
hibernate.connection.url=jdbc:mysql://localhost/jbpmtest?useUnicode=true&characterEncoding=GBK
5.6.             hibernate.cfg.xml 文件中的字符集設(shè)置
property name="hibernate.connection.url">jdbc:mysql://192.168.1.2/jbpmtest
5.7.             MySQL的配置文件的修改:
   my.ini中 default-character-set=GBK
   注意有2處需要修改

6.      為流程定義變量
分成3種流程變量
全局變量(全局流程變量)
全局臨時變量(全局流程臨時變量)
局部變量(流程某個接點(diǎn)內(nèi)有效的變量)
@see org.jbpm.context.exe.ContextInstance
目前還沒有使用過局部變量(流程某個接點(diǎn)內(nèi)有效的變量)
流程變量的定義
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
所有基本類型的包裹類型,以及實(shí)現(xiàn)了Serializable的類型都可以作為流程參數(shù)變量使用,注意參數(shù)類不能是一個類的內(nèi)部類或者屬性類(除非包含參數(shù)類的類實(shí)現(xiàn)了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刪除前,都可以被訪問。當(dāng)變量被刪除后,去獲取該變量將返回為空。
6.4.             自定義類的實(shí)例作為流程變量
   如果一個類的實(shí)例要作為流程變量使用,該類需要實(shí)現(xiàn)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內(nèi)部類使用,然后當(dāng)成流程變量使用,那類WdzParent必須 也實(shí)現(xiàn)Serializable接口,否則會有問題.
6.5.             Transient variables
流程的歷史變量是不能持久化的,作用范圍是對整個流程全局有效的。
在ContextInstance類內(nèi)部,采用的是一個Map來存儲TransientVariable的信息
參考代碼
org.jbpm.context.exe.ContextInstance 的源代碼。
主要的相關(guān)方法
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
當(dāng)一個變量和流實(shí)例關(guān)聯(lián)(變量名字=”wdz”,value=”test”),如果在設(shè)置一個變量
(變量名字=”wdz”,value= new Integer(10)) ,那最后變量(變量名字=”wdz)的值是Integer(10)。
這稱之為overload.

6.7.             Variables overriding
如果父流程有變量A(值=”value1”),子流程又定義了變量A值=”value2”,那在子流程范圍內(nèi),獲取變量A的值,那結(jié)果是值=”value2”。這是遵循一般語言的局部變量在它的局部范圍內(nèi)override上級變量。

6.8.             流程變量的持久化
它依賴于流程實(shí)例的持久化,非TransientVariable隨流程實(shí)例的持久化一起被保存。
保存在數(shù)據(jù)表jbpm_variableinstance
參考 org.jbpm.context.exe.VariableInstance
6.9.             Customizing variable persistence (可以進(jìn)一步了解)
User java object  converter   variable instance
也就是自定義類的持久化需要定義自己的converter和變量實(shí)例類
converter和變量實(shí)例類需要繼承org.jbpm.context.exe.VariableInstance
converter需要實(shí)現(xiàn)org.jbpm.context.exe.Converter接口


工作流雖然還在不成熟的發(fā)展階段,甚至還沒有一個公認(rèn)的規(guī)范標(biāo)準(zhǔn)。但其應(yīng)用卻已經(jīng)在快速展開,這說明市場對工作流框架的需求是急迫而巨大的。
    我們公司的后臺短信管理系統(tǒng)涉及短信編發(fā)、領(lǐng)導(dǎo)層層審核等操作,這是一個比較典型的工作流系統(tǒng)。過去我們用的工作流引擎是 shark ,然后在使用后發(fā)現(xiàn)其過于龐大,后臺數(shù)據(jù)庫操作頻繁而未進(jìn)行優(yōu)化,直接導(dǎo)致的后果就是前臺操作緩慢。于是經(jīng)研究決定,將工作流引擎由 shark 換成 jBPM 。
    jBPM 之前是一個開源軟件,后加入 JBoss 組織。正好我們公司也是用 JBoss 的。不過 jBPM 并沒有綁定在 JBOSS 上, Tomcat 等也可以使用它。
    jBPM 的正處在不斷發(fā)展中,做為開源軟件的特點(diǎn),其設(shè)計(jì)變化往往很大。所以一些過去的資料可能已經(jīng)不適用了。于是作者根據(jù)自己的使用經(jīng)驗(yàn),重新整理出這份文檔,以備學(xué)習(xí)參考。
注:本文使用的 jBPM 版本為 3.1.1
環(huán)境準(zhǔn)備
1、安裝JDK
所有 JAVA 開發(fā)第一個需要安裝的,沒什么好說的。記得把系統(tǒng)變量 JAVA_HOME 設(shè)上。
2、安裝Ant
Ant 是使用 jBPM 必須的一個工具。 jBPM 中的很多操作都要用到 Ant 。
安裝方法:
( 1 )先下載:
http://archive.apache.org/dist/ant/binaries/
,選一個如: apache-ant-1.6.5-bin.zip 。
( 2 )解壓到 D:\ant (當(dāng)然其他目錄也可以)。
( 3 )設(shè)置如下系統(tǒng)變量: ANT_HOME=d:\ant 。
( 4 )把 %ANT_HOME%\bin 加入到系統(tǒng)變量 PATH 中。
3、安裝Eclipse
Eclipse 不是開發(fā) jBPM 必須的工具,但它是對 jBPM 開發(fā)很有幫助的工具,特別是 jBPM 提供了一個 Eclipse 插件用來輔助開發(fā) jBPM 。關(guān)于 Eclipse 的安裝不贅述了,本文用的版本是: Eclipse3.2

安裝 jBPM
jBPM 的下載地址:
http://www.jboss.com/products/jbpm/downloads
 
l           JBoss jBPM 是 jBPM 的軟件包
l           JBoss jBPM Starters Kit  是一個綜合包,它包括了 jBPM 軟件包、開發(fā)插件、一個配置好了的基于 JBoss 的 jBPM 示例、一些數(shù)據(jù)庫配置文件示例。
l           JBoss jBPM Process Designer Plugin  是輔助開發(fā) jBPM 的 Eclipse 插件。
l           JBoss jBPM BPEL Extension jBPM 關(guān)于 BPEL 的擴(kuò)展包
本指南選擇下載: JBoss jBPM Starters Kit 。下載后解壓到 D:\jbpm-starters-kit-3.1 ,目錄下含有五個子目錄:
l           jbpm   jBPM 的軟件包
l           jbpm-bpel 只含有一個網(wǎng)頁
l           jbpm-db 各種數(shù)據(jù)庫 hibernate 配置文件示例,有些還包含了相應(yīng)的 jdbc 驅(qū)動程序。
l           jbpm-designer  輔助開發(fā) jBPM 的 Eclipse 插件,具體在 jbpm-gpd-feature 子目錄中
l           jbpm-server  一個已經(jīng)配置好了的基于 JBoss 的 jBPM 示例 .

感覺下工作流
前面我們說了,在 JBoss jBPM Starters Kit 的 jbpm-server 目錄是一個已經(jīng)配置好的了 jBPM 示例,那么讓我們來感覺一下 jBPM 做出的東西吧。

雙擊 jbpm-server 目錄下的 start.bat 文件,啟動 JBoss 服務(wù)。這時會打開一個 DOS 窗口,啟動完成后,日志會不斷輸出,其中最后一句是“ 13:55:39,937 DEBUG [StaticNotifier] going to wait for (CMD_EXECUTOR, java.lang.Object@1df59bd) ”,這表示 jBPM 在開始工作了,它不斷進(jìn)行輪詢。
打開網(wǎng)頁:
http://localhost:8080/jbpm/
 得到如下畫面

  
這是一個已經(jīng)用 jBPM 開發(fā)好的用戶定單流程,具有下單、審核、估價等流程。它所用的數(shù)據(jù)庫是一個內(nèi)置的數(shù)據(jù)庫。
以 cookie monster 用戶登錄,選擇“ create new web sale order ”可以創(chuàng)建一個定單。如下圖所示,在圖左邊是填寫的定單情況,右邊一整個定貨流程的示意圖,紅色框表示流程進(jìn)行到哪一步了。填寫好定單好,選擇“ Save and Close Task ”,完成定單提交。


選擇右上角的“ Login as another user ”以另外一個用戶名 ernie 登錄。這時可以看到 ernie 用戶的任務(wù)列表中多了一項(xiàng)。


點(diǎn)進(jìn)去后,顯示如下畫面。這個示例對中文的支持不好,全都顯示成了 unicode 碼了。不管這什么多,反正知道是這么回事就行了。在 comment 項(xiàng)填寫意見,選 OK 按鈕,進(jìn)入到下一步。如果選擇 more info needed 按鈕,則打回給 cookie monster 用戶修改定單。


下面的流程,這里就不再贅述了。在這個很標(biāo)準(zhǔn)的工作流示例中,我們基本可以看到 jBPM 的應(yīng)用范圍還是比較廣的。而且從這個示例,我們是看不出有 jBPM 的,也就是說 jBPM 在后臺起著作用。
從這個例子,還看不出 jBPM 的優(yōu)勢。不過,如果在一個流程不確定,經(jīng)常需要變動的項(xiàng)目中, jBPM 的好處將會顯然出來。應(yīng)用 jBPM 后,改變流程只需改變流程描述文件,這將在后面的內(nèi)容提到。
這是一個已做好的示例,接下來我們將仿造這個實(shí)例來開發(fā)一個請假流程。

4 數(shù)據(jù)庫初始化
jBPM 需要數(shù)據(jù)庫支持, jBPM 會把自己的一個初始化數(shù)據(jù)存儲到數(shù)據(jù)庫,同時工作流的數(shù)據(jù)也是存儲到數(shù)據(jù)庫中的。 jBPM 使用 Hibernate 來做為自己的存儲層,因此只要是 Hibernate 支持的數(shù)據(jù)庫, jBPM 也就支持。

本文先以 MySQL 為例,然后再以 Oracle 為例,來談?wù)?jBPM 的數(shù)據(jù)庫初始化操作。

注:在上面的 JBoss 自帶的示例中,并沒有設(shè)置數(shù)據(jù)庫,那是因?yàn)?jBPM 默認(rèn)使用的是內(nèi)存數(shù)據(jù)庫 hsqldb 。
4.1  MySQL

1 、首先安裝 MySQL 。
MySQL 的安裝比較簡單,網(wǎng)上也有很多文章,本文不再贅述。本指南所用 MySQL 版本為 MySQL 4.1 ( for windows )。再找一個 MySQL 客戶端,目的是方便查看數(shù)據(jù)庫中的數(shù)據(jù),本文推薦使用 MySQL 網(wǎng)站上免費(fèi)提供的“ MySQL Query Brower ”,當(dāng)然你用其他的客戶端也行,比如 MySQL-Front 。

2 、建庫
MySQL 中創(chuàng)建一個庫,庫名: jbpm

3 、生成建表的 SQL 語句并建表
將 jbpm-starters-kit-3.1.1 下的子目錄 jbpm 改名為 jbpm.3 ,否則在執(zhí)行下面的 ant 命令時會報如 jbpm.3 目錄不存在的錯誤:
D:\jbpm-starters-kit-3.1.1\jbpm-db\build.xml:361: The following error occurred while executing this line:
D:\jbpm-starters-kit-3.1.1\jbpm-db\build.xml:68: Basedir D:\jbpm-starters-kit-3.1.1\jbpm.3 does not exist

在 DOS 窗下,進(jìn)入 D:\jbpm-starters-kit-3.1.1\jbpm-db 目錄,執(zhí)行如下命令:
ant mysql.scripts

執(zhí)行成功后,在 D:\jbpm-starters-kit-3.1.1\jbpm-db\build\mysql\scripts 目錄里生成了四個 sql 文件,它們做什么用的一看名字就知道了。在 MySQL 客戶端中執(zhí)行“ mysql.create.sql ”腳本,這樣將在 jbpm 庫中創(chuàng)建一個個的數(shù)據(jù)表。


4.2  Oracle
先安裝好 Oracle 服務(wù)器。我們公司有現(xiàn)存的 Oracle 服務(wù)器,也提供給了我一個屬于我自己的用戶名,一登錄就可以任意在我的庫之下創(chuàng)建表了。所以這一步就省了,沒有的自個先裝好吧。
訪問 Oracle 推薦用“ PLSQL Developer ”。不過要連接 Oracle 還要在本機(jī)上裝上 Oracle 自己的客戶端程序,里面提供了 JDBC 包和一些配置。要連接服務(wù)器還得配置一下,我一般都是不用 GUI 而直接改 tnsnames.ora 文件,在我的電腦里此文件的目錄地址是: D:\oracle\ora92\network\ADMIN\tnsnames.ora ,內(nèi)容如下 ( 兩面有兩個配置了 ) :
# TNSNAMES.ORA Network Configuration File: E:\oracle\ora92\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

WXXRDB_192.168.3.2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = wxxrDB)
      (SERVER = DEDICATED)
    )
  )

WXXRDB_192.168.4.2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.4.2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = wxxrDB)
      (SERVER = DEDICATED)
    )
  )

前面都是 Oracle 的一些知識,不會的 Google 一下吧。最后配置好后,用 PLSQL Developer 輸入你的用戶名和密碼聯(lián)接到 Oracle ,就算 OK 了。

參考上面 MySQL 的步驟,基本一樣:
(1)       將 jbpm 改名為 jbpm.3 (或者修改jbpm-db目錄下的build.properties文件)
(2)       再執(zhí)行 ant oracle.scripts
(3)       用 jbpm-db\build\oracle\scripts 目錄的 oracle.create.sql 腳本,在 Oracle 中生成 jBPM 的所有表。在“ PLSQL Developer ”中可以新建一個 Command Windows 窗口然后輸入命令: @D:\jbpm-starters-kit-3.1.1\jbpm-db\build\oracle\scripts\oracle.create.sql
(如果報錯,就將報錯的地方注釋掉)


本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u1/50157/showart_1019604.html

論壇徽章:
0
2 [報告]
發(fā)表于 2008-07-04 07:04 |只看該作者
dddddddddddd
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP