jbpm深入pvm

流程虛擬機,我們對它的期望是它可以爲所有流程提供一套通用平臺,之後無論我們是需要對原有流程語言進行擴展,或者重新實現一套自定義的流程語言,都可以很簡單的使用pvm實現了。現在我們要來看看pvm到底有沒有這個本領實現我們的期望。

實際上,jBoss已經在PVM的基礎上完成jPDL, BPEL和基於Seam的PageFlow三個實現,對於我們來說最常見的就是jPDL了,它是jBPM-4中默認使用的流程語言的實現。

java源代碼分包詳解

 

org.jbpm.pvm.internal.ant提供使用ant發佈流程,輔助啓動jboss的任務。

org.jbpm.pvm.internal.builder用來構造各種模型,包括活動,活動行爲,事件,事件處理器,流程定義,變量,任務,等等。

org.jbpm.pvm.internal.cal提供日曆,包括日期,時間段,持續時間,節假日。

org.jbpm.pvm.internal.cfg中的JbpmConfiguration和SpringConfiguration實現了org.jbpm.api.Configuration,用來從配置文件構造ProcessEngine。

org.jbpm.api.client這部分包含ClientExecution, ClientProcessDefinition, ClientProcessInstance。ClientExecution繼承了OpenExecution,聲明瞭end(), signal(), suspend(), resume()之類的方法。ClientProcessDefintion繼承了OpenProcessDefintion,其中的功能主要是createProcessInstance和startProcessInstance。

org.jbpm.pvm.internal.cmd包含Command和CommandService,這是命令設計模式的基礎。其中放着所有的命令,所有的流程操作都可以在這裏找到。

org.jbpm.pvm.internal.email下面有兩個子包impl和spi,只要注意spi下的AddressResolver, MailProducer和MailSession就可以實現自定義的實現了。

org.jbpm.pvm.internal.env包含Context, Environment, EnvironmentFactory, Transaction, WireObject。其中Context, Environment和EnvironmentFactory組成了jBPM4裏的IoC系統。Transaction定義了通用事務。WireObject用來做依賴綁定。下面保存着環境有關的實現類。包括Authentication權限認證,Environment與context相關的各個類。

org.jbpm.pvm.internal.hibernate下面的類是專門與hibernate進行交互的類,包含類型轉換,命名策略和最主要的DbSessionImpl,所有與數據庫的操作都來源於此。

org.jbpm.pvm.internal.history下面是歷史操作所需要的部分,其下還包含events和model包。

org.jbpm.pvm.internal.identity包主要負責身份認證的操作。包含三個子包cmd, impl和spi,cmd下定義所用到的命令,impl下是實現類,spi下放着IdentitySession。

org.jbpm.pvm.internal.jms包括JmsMessageSession和JmsMessageUtil,應該是用來處理jms的,JmsMessageSession與org.jbpm.api.job.Message相關聯。說明job下的Message是依靠jms發送異步消息的。

org.jbpm.pvm.internal.job中提供了對job, message和timer的實現

org.jbpm.pvm.internal.jobexecutor提供了任務執行器,包括JobExecutorServlet和對應的線程池,以及一系列的命令和處理器。無論是job, message或是timer,最終都會被這裏執行。

org.jbpm.pvm.internal.lob主要用來處理流程發佈時的文件內容,需要把jpdl.xml文件和圖片,甚至是以後可能把class文件都以附件形式保存到數據庫中,以備後用。

org.jbpm.pvm.internal.model這個模型包中包含了很多很多類,包括Activity, CompositeElement, Condition, ObservableElement, OpenProcessDefinitionTransition。簡單分類一下。最底層的是ObservableElement,它是可以被事件監聽的元素,並且可以繼承,CompositeElement繼承了 ObservableElement,它裏面可以裝填多個活動。再加上Event中定義了多個事件,這些就構成了最基本的事件模型。Activity和ActivityCoordinates分別定義了活動類和活動位置。以這些爲基礎,OpenProcessDefinition繼承了ProcessDefinition和CompositeElement。最終,我們還有一個Condition類,它只有一個evaluate方法,接受OpenExecution作爲參數返回boolean值,Condition和Activity組合成了Transition,這個轉移包含了起點,終點,以及條件判斷。最龐大的模型部分,活動,轉移,流程定義,流程實例的實現類都放在這裏。在它的op子包中包含的是流程進行中的各項操作。

org.jbpm.pvm.internal.query中放的是History, Job, ProcessDefintion, ProcessInstance這四個query類的實現,還提供了一個Page類,但是其中只有firstResult和maxResults,所以沒啥大用。

org.jbpm.pvm.internal.repository負責的是流程的發佈,主要有Deployment和Repository對應的service, session和cache,這裏使用的緩存,所以每次使用流程定義的時候可以利用緩存提高效率。

org.jbpm.pvm.internal.script包含對腳本的支持,默認支持了JuelScriptEngine。

org.jbpm.pvm.internal.session中支持各種會話,DbSession, MessageSession, RepositorySession和TimerSession。

org.jbpm.pvm.internal.spring這裏只有一個CommandTransactionCallback用來實現從spring中獲得事務,並用其執行jbpm中定義的各種命令。

org.jbpm.pvm.internal.stream用於從各種途徑讀取資源,無論是jbpm配置文件和流程資源都要通過這些來轉換成流的形式,以供給jbpm處理。

org.jbpm.pvm.internal.svc其中svc或許是service的縮寫。這個包中除了包括org.jbpm.api包下定義的所有service接口的實現,還包括commandService的實現和認證攔截器。

org.jbpm.pvm.internal.task這裏代表了所有與任務,任務參與者相關的信息,包括Assignable, AssignmentHandler, OpenTask, Participation, Swimlane, Task, TaskDefinition。簡單劃分後,主要有任務,任務定義任務處理。剩下的都是與任務分配有關了。TaskDefinition從字面上來看是指任務定義,裏邊只有一個getName()。Task中保存了任務相關的一些內容,OpenTask主要用來處理歷史事件。參與者部分基本分成三個部分,以Assignable和AssignmentHandler組成的自定義分配部分,Participation參與者和swimlane泳道。暫時沒有發現三者之間與任務的聯繫。

org.jbpm.pvm.internal.test包下放了一個JobTestHelper,顯然是可以幫助在測試環境下運行job的,個人認爲它放在pvm中似乎有點兒不妥。

org.jbpm.pvm.internal.tx其中負責處理事務,JtaTransaction啦,SpringTransationInterceptor啦,StandardTransaction啦,這些需要根據實際環境具體選擇。jta的實現部分已經單獨放到子包jta中了。希望spring中的事務也能這樣處理就好了。

org.jbpm.pvm.internal.type用來進行類型轉換,主要是加載jbpm.cfg.xml對流程引擎進行初始化時,還有就是發佈流程的時候進行類型轉換。子包包括converter,matcher和variable,類型轉換器,類型匹配器和變量。

org.jbpm.pvm.internal.util包含常用工具。

org.jbpm.pvm.internal.wire用來在ioc裏進行依賴綁定。子包包含binding, descriptor, operation和xml,個人認爲這是很麻煩的綁定方式,而且默認的綁定方式是使用field,而不是常見的setter綁定方式。

org.jbpm.pvm.internal.xml包主要用於解析xml的,主要解析jbpm.cfg.xml和流程定義文件。

配置文件

 

jbpm配置jbpm.default.cfg.xml,流程引擎的默認配置文件。jbpm.identity.cfg.xml, jbpm.jboss.idm.cfg.xml身份驗證配置文件。jbpm.jbossremote.cfg.xml遠程調用jboss實現命令模式。jbpm.jobexecutor.cfg.xml任務執行器的配置。

hibernate映射jbpm.execution.hbm.xml, jbpm.history.hbm.xml, jbpm.identity.hbm.xml, jbpm.repository.hbm.xml, jbpm.task.hbm.xml這五個是hibernate映射文件。

任務生命週期jbpm.task.lifecycle.xml任務的生命週期,包括啓動,暫停,繼續,完成,取消之類。

事務配置jbpm.tx.hibernate.cfg.xml默認的hibernate事務配置。jbpm.tx.jta.cfg.xml使用jta的事務配置。

IoC配置jbpm.variable.types.xml變量類型映射。jbpm.wire.bindings.xml依賴綁定映射。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章