JBossjBPM30相關資料綜合概述_第1頁
JBossjBPM30相關資料綜合概述_第2頁
JBossjBPM30相關資料綜合概述_第3頁
JBossjBPM30相關資料綜合概述_第4頁
JBossjBPM30相關資料綜合概述_第5頁
已閱讀5頁,還剩113頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第一章:介紹第一章:介紹JBoss jBPM 是一個復雜的可擴展的工作流管理系統. JBoss jBPM 有直觀的流程語言來表示商業流程圖的術語比如,任務,異步通訊的等待狀態,定時器,自動操作等等.把這些操作綁在一起, JBoss jBPM 就有了最強大和易擴展性的控制流機制. JBoss jBPM 只有最小的倚賴性可以很容易的作為java庫來使用.當然它也可以用在吞吐量極為關鍵的J2EE 群應用服務器環境中. JBoss jBPM 可以同任何數據庫配置可以部署在任何應用服務器上. 1.1.綜述核心工作流和BPM 功能被封狀作為一個簡單的Java庫.這個庫包括在jBPM數據庫中存儲,更新和檢索

2、流程信息的服務 Figure1.1.JBoss jBPM 組件一覽 1.2.JBoss jBPM新手工具箱 新手工具箱是包含了jBPM所有組件包在一個可下載的包里. 這個包包括: jbpm-server , 預先配置的jboss 應用服務器. jbpm-designer , jBPM流程圖形化設計器的eclipse插件 . jbpm-db ,jBPM 數據庫兼容包 (參看下面). jbpm , 核心jbpm組件包括庫和本手冊. jbpm-bpel ,JBoss jBPM BPEL 擴展參考. 預配置的JBoss 應用服務器有下列安裝組件: 核心jBPM 組件 , 打包作為JBoss服務檔案 一

3、個包括所有jBPM 表格的完整數據庫 : 默認的 hypersonic 數據庫包含所有的jBPM表格和已經定義的流程. jBPM 控制臺web應用程序 這個可以用來為jBPM管理員. jBPM調度程序 所有定時器的執行. 調度程序在新手工具箱里配置成了一個servlet.這個Servlet會為產生一個線程來監視每個定時器的執行. 一個流程例子 已經發布進了jBPM 數據庫. 1.3.JBoss jBPM 圖形化流程設計器 JBoss jBPM 也包括一個圖形化的流程設計工具. 這個設計器是用來創作商業流程的 JBoss jBPM 圖形設計器是一個Eclipse插件. 獨立安裝版本的設計器工具已

4、經在開發路線圖里了. 圖形化設計工具最重要的特性是它同時支持業務分析員和技術開發人員. 這樣就可以在業務流程建模和實際執行之間平滑轉換. 插件可用做為本地的update site(Eclipse 純粹的zip文件),用做符合Eclipse軟件更新機制的安裝包. 當然你也可以把它展開到你的Eclipse的安裝目錄. 1.4.JBoss jBPM核心組件 JBoss jBPM 核心組件是純粹的Java(J2SE)軟件,來處理流程定義和運行時的流程實例執行. JBoss jBPM 是一個Java庫. 因此,它可以用在任何java環境比如web 應用程序,Swing應用程序,EJB,Web Servi

5、ce等等. jBPM 庫可以被打包作為sateless session EJB(無狀態會話EJB). 這可以用做集群的發布具有極高的吞吐量可伸縮性. 無狀態會話EJB根據J2EE 1.3規范重新寫過所以可以發布到任何應用服務器上. JBoss jBPM 核心組件被打包成一個簡單的Java庫文件.依賴你所使用的功能性,庫 jbpm-3.0.jar及一些相關的第三方的庫比如 . hibernate, dom4j 等等.這些相關性在有清晰的描述永久性方面, jBPM內部使用hibernate. 除了傳統的O/R 映射外, hibernate也分析不同數據庫系統的SQL方言 ,這使jBPM在當前所有的

6、數據庫上都可以移植. JBoss jBPM API 可以從項目中任意編寫的Java軟件訪問,比如Web應用程序,EJB,或web Service組件,消息bean或其他java組件. 1.5.JBoss jBPM控制臺web應用程序 jBPM 控制臺web應用程序是為兩個目的服務的.首先,它作為流程執行運行時間任務生成的中央用戶接口. 其次, 它也是一個管理和監視控制臺允許檢查和操作運行中的流程實例. 1.6.JBoss jBPM 身份組件 JBoss jBPM可以集成進任何包含公司用戶和組織信息的目錄. 對項目來說從那里得到組織信息組件不是容易得到的, JBoss jBPM就包含這個組件.

7、身份組件使用的模型比通常的servlet,ejb和門戶模型跟富有. 更多信息可參考1.7.JBoss jBPM調度程序 JBoss jBPM 調度程序是用來監視和運行已經計劃到時執行流程的定時器的組件. 定時器組件被打包在核心jbpm庫中, 但是它需要被發布到下面的任一環境中: 要不你把調度程序Servlet來產生監視線程或者就必須用獨立的JVM來調用調度程序的main方法. 1.8.JBoss jBPM 數據庫兼容包 JBoss jBPM 數據庫兼容包包括所有支持數據庫的相關信息,JDBC驅動程序和數據庫初始化腳本. 1.9.JBoss jBPM BPEL擴展 JBoss jBPM BPEL

8、擴展是獨立的擴展包用來支持BPEL(Business Process Execution Language 商業流程執行語言). BPEL的基本要素是 xml Scripting語言用來寫其他web server的web services. JBoss jBPM 3.0 第二章:開始 第二章 開始第二章 開始本章將帶你如何獲得JBoss jBPM的第一步并且提供立即運行的初始提示 .2.1.下載包一覽下面是當前可用的不同jBPM包清單. 這些包中的每一個都包含一個或多個可下載的文件. 同這些文件一起的包含一個描述它的內容及相關安裝的指示 所有下面下載的描述都可以在.上找到2.1.1.jBPM

9、3這是主要的發行包,包括了主要核心引擎和數個額外的你使用jBPM的時候可能用得上的包.下載這個包的文件從..新手工具箱如果你想盡快開始運行jBPM,那么這就是你想下載的文件.工具箱包含了所有jBPM的模塊以及圖形化的設計工具在一個單獨下載的文件里名字為: jbpm-starters-kit-.zip. 展開這個壓縮文件到目錄下閱讀readme.html 獲取更多信息.有了這個工具箱,你可以立即開始進入..核心引擎和身份組件下載文件名為jbpm-.zip 包含jBPM 核心引擎也包含角色和組管理的身份組件. 開始工作前, 展開文件到一個目錄下,然后 jbpm-文件夾下

10、找到包含重要的參考信息的readme.html文件.數據庫擴展如果你想改變jBPM的默認數據庫( Hypersonic HSQLDB), 你需要下載這個包.文件名為jbpm-db-.zip 包含你改變數據庫需要的各種資源. 包含, 數據庫建立腳本, hibernate 屬性文件及數據庫JDBC驅動程序. 如何操作的步驟包含在 readme.html 文件里,它在你展開這個壓縮包的最上層的目錄下.2.1.2.jBPM 流程設計器The second package contains the downloads related to the jBPM Graphical Proces

11、 Designer. The designer enables you to author your process definitions and to easily deploy them. You can find these downloads.The designer is a plug-in for the Eclipse platform which is available for download either as a zipped Eclipse feature or as a zipped Eclipse update site. There is no differe

12、nce in content, the only difference is in the way you have to do the installation..Eclipse 更新站點If you want to be absolutely sure that the designer installation goes smoothly, we recommend to use the update site mechanism together with a new Eclipse installation. Of cource the Eclipse version

13、should match the downloaded update site archive. To obtain the Process Designer Update Site, you should download the file jbpm-gpd-site-.zip. Then follow the instructions in the readme.html file included in the archives root folder to succesfully install the GPD..Eclipse 特性If you are tired of

14、 each time having to do a fresh Eclipse installation and you are willing to cope with some possible issues, you can try the feature download. In this case installation is as easy as extracting the archive into your Eclipse installation (make sure the included plugins and features folders end up in t

15、he same location of your Eclipse installation) overwriting the files and folders with the same name that are possibly already present. This installation is very easy, but you could run into incompatibility issues when you overwrite plugins already present in your installation because of other featur

16、es that you did install. Though they have the same name it could happen that the versions of these colliding plugins are not equal, hence the possible incompatibilities. Download the file jbpm-gpd-feature-.zip to obtain the GPD feature. The installation instructions are repeated in the readme.html f

17、ile.2.1.3.jBPM BPEL 擴展第三個也是最后一個包包含jBPM BPEL 擴展. 它只包含一個文件: jbpm-bpel-.zip. 你可以找到這個包.要開始BPEL擴展,在doc目錄下找到Users Guide .2.2.JBoss jBPM 項目號碼簿 : JBoss is the company that backs this project with professional support, training and consultancy services. user guide: is the document youre reading and serves as

18、 the main entry point into the project. : description of the downloadables : sourceforge download page for jBPM : get in contact with the community, ask questions and discuss jBPM : extra information, mostly provided by the community : for submitting bugs and feature requests : shows what to expect

19、in the next versions : mailing lists are used for announcements javadocs: part of the download in the doc/javadoc directory. : the details of how to get the jBPM sources from CVS2.3.公開的CVS訪問另外,你可以通過JBoss jBPM cvs服務器 得到jBPM服務器的信息如下 Connection type: pserver User: anonymous Password: Host: Port: 2401 (

20、which is the default) Repository path: /cvsroot/jbpm Label: :pserver:anonymous:/cvsroot/jbpm第三章.講座第三章.講座這個講座將展示如何建造一個jpdl和如何使用API的方法來管理運行時的執行.這個講座的方式是解釋一系列的例子. 每個例子將集中關注特別的主題和額外的說明. 這些例子可以在jBPM包的examples目錄下找到.最好的方法就是學著來建立一個Project實驗所給的例子.eclipse 用戶注意:下載jbpm-3.0-version.zip并且解壓縮到系統.然后從菜單 File - Impor

21、t. - Existing Project into Workspace.點 Next 然后瀏覽jBPM根目錄然后點擊 Finish. 現在你的有了jbpm 3 project了. 你可以發現這個講座目錄在目錄 src/java.examples/. . 你打開這些例子后,可以運行它們Run - Run As. - JUnit TestjBPM 包括一個圖形設計器來產生例子中的XML. 你可以從這里下載和學習有關圖形設計器的說明3.1.Hello World 例子一個流程 是有一個定向圖(directed graph)來定義,由節點和變換組成. hello world流程有3個節點.如下看如何

22、組合起來, 我們先開始一個簡單的流程不使用圖形設計器. 下面的圖形表示hello world 流程: Figure3.1. hello world 流程圖public void testHelloWorldProcess() / 這個方法展現流程定義和流程執行的定義 / 流程定義有3個節點. / 一個未命名的開始狀態start-state,一個狀態 s / 一個結束狀態名字為end. / 下面行解析一個xml text為一個ProcessDefinition對象(流程定義) / ProcessDefinition 把流程定義形式描述為java對象 ProcessDefinition proce

23、ssDefinition = ProcessDefinition.parseXmlString( + + + + + + + + ); / 下一行建立了一個流程執行定義. /在構造后,流程執行有一個主要的執行路徑 / (= root token 根令牌) 此時位置在start-state處 ProcessInstance processInstance = new ProcessInstance(processDefinition); / 在構造后流程執行有一個主要的執行路徑 / (= roottoken 根令牌) . Token token = processInstance.getRoot

24、Token(); / 構造后, 位置處于流程定義執行路徑start-state的位置 assertSame(processDefinition.getStartState(), token.getNode(); / 現在開始流程執行,離開start-state 結束默認的轉換(transition) token.signal(); / 這個signal方法將會阻塞直到流程執行進入 wait 狀態 / 流程執行在狀態s 進入第一個 等待狀態 / 因此執行主路徑現在位置在 狀態s assertSame(processDefinition.getNode(s), token.getNode(); /

25、 我們再送另外一個信號signal. 這將繼續執行離開狀態s 結束默認的轉換(transition) token.signal(); / 現在信號signal方法將返回,因為流程實例到達了end-state 結束狀態 assertSame(processDefinition.getNode(end), token.getNode();3.2.數據庫例子jBPM一個基本的特性是當流程處于等待狀態時候可以把流程執行 永久化到數據庫中 . 下一個例子想你展示了如何存儲一個流程實例到jBPM數據庫中. 例子給出一個將會發生的上下文.分開的方法用來建立不同部分的用戶代碼. 比如一部分用戶代碼在web 應

26、用程序中開始一個流程并永久化執行到數據庫中.然后,message drive bean從數據庫中載入流程實例并繼續它的執行 jBPM 永久化的更多內容可以參看.public class HelloWorldDbTest extends TestCase / 我們在每個應用程序中需要一個JbpmSessionFactory. 因此我們把它放在一個靜態變量中 / JbpmSessionFactory 在test 方法中來建立一個 JbpmSessions. static JbpmSessionFactory jbpmSessionFactory = JbpmSessionFactory.build

27、JbpmSessionFactory(); static / 因為HSQLDBin-memory數據庫是干凈的數據庫, / 在我們開始測試前,我們需要建立table. / The next line creates the database tables and foreign key / constraints. jbpmSessionFactory.getJbpmSchema().createSchema(); public void testSimplePersistence() / 在3個方法調用下面方法中間,所有數據被寫入數據庫 / 在單元測試中,這3個方法被正確執行在每個方法之后

28、/ 因為我們想完成測試流程場景 / 但在實際中這些方法代表著server不同的請求 / 因為我們開始的數據庫是個干凈的數據庫,我們需要首先發布流程在里面 / 在真實中,這個是由流程開發人員完成的 deployProcessDefinition(); / 假定我們想開始流程實例(= 流程執行) / 當用戶提交一個Web表單的時候. processInstanceIsCreatedWhenUserSubmitsWebappForm(); / 然后,到達的異步消息將繼續執行 theProcessInstanceContinuesWhenAnAsyncMessageIsReceived(); publ

29、ic void deployProcessDefinition() /定義一個流程,包括三個及點,一個未命名的start-state,一個狀態s /一個結束狀態 end-state名字end. ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( + + + + + + + + ); / 打開新的永久層會話 JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession(); / 并且在永久層會話上開啟事務 jbpmSession.beginTra

30、nsaction(); / 保存流程定義到數據庫中 jbpmSession .getGraphSession() .saveProcessDefinition(processDefinition); / 提交事務 jbpmSmitTransaction(); / 關閉會話. jbpmSession.close(); public void processInstanceIsCreatedWhenUserSubmitsWebappForm() / 這個方法里的代碼可以放在structs action或JSF管理bean 里 / 打開一個新的永久層會話 JbpmSession jbpmSessio

31、n = jbpmSessionFactory.openJbpmSession(); / 啟動事務. jbpmSession.beginTransaction(); / 查詢數據庫得到我們在上面步驟發布的流程定義 ProcessDefinition processDefinition = jbpmSession .getGraphSession() .findLatestProcessDefinition(hello world); / 有了從數據庫中的得到的processDefinition, /我們就可以建立流程執行定義比如hello world 例子(它沒有永久化). ProcessIns

32、tance processInstance = new ProcessInstance(processDefinition); Token token = processInstance.getRootToken(); assertEquals(start, token.getNode().getName(); / 開始流程執行 token.signal(); / 流程在狀態s. assertEquals(s, token.getNode().getName(); / 流程實例被保存在數據庫 / 所以當前流程執行的狀態被保存進數據庫 . jbpmSession .getGraphSession

33、() .saveProcessInstance(processInstance); / The method below will get the process instance back out / of the database and resume execution by providing another / external signal. / web應用程序動作結束出,事務被提交. jbpmSmitTransaction(); / 關閉jbpmSession. jbpmSession.close(); public void theProcessInstanceContinue

34、sWhenAnAsyncMessageIsReceived() / 這個代碼可以包含在message driven bean中. / 打開新的永久性的會話. JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession(); / 永久化會話上開始事務 / 說明它也可能使用應用服務器的DataSource的JDBC連接 jbpmSession.beginTransaction(); GraphSession graphSession = jbpmSession.getGraphSession(); / First, we need to

35、 get the process instance back out of the database. / There are several options to know what process instance we are dealing / with here. The easiest in this simple test case is just to look for / the full list of process instances. That should give us only one / result. So lets look up the process

36、definition. ProcessDefinition processDefinition = graphSession.findLatestProcessDefinition(hello world); / 現在,我們搜索這個流程定義的所有流程實例. List processInstances = graphSession.findProcessInstances(processDefinition.getId(); / We know that in the context of this unit test there is / only one execution. In real

37、 life, the processInstanceId can be / extracted from the content of the message that arrived or from / the user making a choice. ProcessInstance processInstance = (ProcessInstance) processInstances.get(0); / 我們可以繼續執行. 說明流程實例委托信號到執行主路徑(= the root token) processInstance.signal(); / 在singal后, 我們知道流程執行應

38、該到 end-state assertTrue(processInstance.hasEnded(); / 現在我們可以更新執行狀態到數據庫中 graphSession.saveProcessInstance(processInstance); / MDB結束, 事務被提交. jbpmSmitTransaction(); / jbpmSession被關閉. jbpmSession.close(); 3.3.上下文例子: 流程變量在流程執行時候流程變量包含上下文信息. 流程變量同java.util.Map相似映射名字到值,值可能是個java對象 . 流程變量被永久化作為流程實例的一部分. 為了讓

39、事情簡單,這個例子中我們僅僅展示使用變量的API而沒有永久化.關于變量的更多信息可以參看 / 這個例子也是從hello world 流程開始. / 甚至沒有修改.ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( + + + + + + + + );ProcessInstance processInstance = new ProcessInstance(processDefinition); / 從流程實例中為流程變量獲得上下文實例 ContextInstance contextInstance =

40、processInstance.getContextInstance(); / 在開始之前流程離開了start-state, / 我們準備設置一些流程變量在流程實例上下文中 .contextInstance.setVariable(amount, new Integer(500);contextInstance.setVariable(reason, i met my deadline); / 從現在開始,這些變量同流程實例關聯 / 流程變量可以從用戶代碼中通過下面展示的API來訪問 / 可可以在動作Action和節點的實現中訪問 / 流程變量也作為流程實例的一部分保存進數據庫 .proces

41、sInstance.signal(); / 訪問變量通過contextInstance. assertEquals(new Integer(500), contextInstance.getVariable(amount);assertEquals(i met my deadline, contextInstance.getVariable(reason);3.4.任務分派例子在下個例子里我們將要展示你怎么才能分派一個任務給一個用戶.因為jBPM工作流引擎和組織模型是分開的,一種用來計算參與者表達語言總是受限的. 因此,你不得不指定AssignmentHandler的實現來計算任務的參與者.

42、public void testTaskAssignment() / 這個流程展示基于hello world 流程. / 狀態節點被task-node代替.task-node在JPDL中是表示一個等待狀態并且 / 產生一個在流程繼續執行前要完成的任務 ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( + + + + + + + + + + + ); / 產生一個流程執行定義. ProcessInstance processInstance = new ProcessInstance(processDe

43、finition); Token token = processInstance.getRootToken(); / 開始流程執行,完整默認的轉換后離開start-state . token.signal(); / signal 方法將被阻塞知道流程執行進入等待狀態. / 在這個case中是指task-node. assertSame(processDefinition.getNode(t), token.getNode(); / 當執行到達task-node, 任務change nappy / 被建立并且NappyAssignmentHandler 被調用來決定任務將分派給睡 /NappyA

44、ssignmentHandler 返回papa / 在真實環境中, 任務將會從數據庫中獲取,通過or g.jbpm.db.TaskMgmtSession. / 因此這個例子中我們不想包括復雜的永久化 / 我們只是得到這個流程實例的第一個task-實例 (we know there is only one in this test / 我們知道在這個測試場景中這里只有一個). TaskInstance taskInstance = (TaskInstance) processInstance .getTaskMgmtInstance() .getTaskInstances() .iterator

45、().next(); / 現在,我們檢查taskInstance實際分配給了papa. assertEquals(papa, taskInstance.getActorId() ); /現在,我們期望papa完成了他的任務并且標記任務是完成的 taskInstance.end(); / 因為這是最后(唯一的)要做的任務,這個任務的完成觸發 / 流程實例的繼續執行. assertSame(processDefinition.getNode(end), token.getNode();3.5.客戶化動作例子動作action是綁定你自己的定制java代碼和jBPM流程的一種機制. 動作可以同它自己的

46、節點關聯起來 (如果它們在流程圖表示中相關).動作也可以放在事件event上比如. taking a transition, leaving a node或者 entering a node.在這個case,動作不是圖表的一部分,但是它們在流程執行產生事件的時候,也會被執行.我們將用一個例子: MyActionHandler 來觀察動作的實現.這個動作handler實現不是什么非常特別的事情.它只是設置boolean變量 isExecuted為 true . 變量 isExecuted 是靜態的因此它可以在action handler內部被訪問. 關于動作action的內容可以參看 / MyActionHandler 就是一個class可以在jBPM流程執行時候在某些用戶代碼里被執行 public class MyActionHandler implements ActionHan

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論