JBPM4 常用表結構及其說明
本文從表結構、操作時表的變化以及jbpm4.4各個包的作用來介紹jbpm的。
第一部分:表結構說明
Jbpm4 共有18張表,如下,其中紅色的表為經常使用的表
一:資源庫與執行時表結構
1. JBPM4_DEPLOYMENT 流程定義表
2. JBPM4_DEPLOYPROP 流程定義屬性表
3. JBPM4_EXECUTION 流程例項表
4. JBPM4_PROPERTY 流程引擎表
5. JBPM4_TASK 任務表
6. JBPM4_VARIABLE 上下文表
7. JBPM4_JOB 定時表
8. JBPM4_LOB 儲存表
9. JBPM4_SWIMLANE泳道表
10. JBPM4_PARTICIPATION 參與者表
二: 歷史資料表
11. JBPM4_HIST_ACTINST 流程活動(節點)例項表
12. JBPM4_HIST_DETAIL 流程歷史詳細表
13. JBPM4_HIST_PROCINST 流程例項歷史表
14. JBPM4_HIST_TASK 流程任務例項歷史表
15. JBPM4_HIST_VAR 流程變數(上下文)歷史表
三:身份認證表結構
16. JBPM4_ID_GROUP 組表
17. JBPM4_ID_MEMBERSHIP 使用者角色表
18. JBPM4_ID_USER 使用者表
這三張表很常見,基本的許可權控制,關於使用者認證方面建議還是自己開發一套,元件自帶的功能太簡單,使用中有很多需求難以滿足
第二部分:表結構描述
1. JBPM4_DEPLOYMENT 流程定義表
2. JBPM4_DEPLOYPROP 流程定義屬性表
3. JBPM4_EXECUTION 流程例項表
主要是存放JBPM4的執行資訊,Execution機制代替了JBPM3的Token機制。
4. JBPM4_PROPERTY 流程引擎表
5. JBPM4_TASK 任務表
存放需要人來完成的Activities,需要人來參與完成的Activity 被稱為Task
6. JBPM4_VARIABLE 上下文表 存的是進行時的臨時變數
7. JBPM4_JOB 定時表 存放的是Timer的定義
8. JBPM4_LOB 儲存表
9. JBPM4_SWIMLANE泳道表
Swim Lane是一種Runtime Process Role。通過Swim Lane,多個Task可以一次分配到同一Actor身上。
10. JBPM4_PARTICIPATION 參與者表
存放 Participation的資訊,Participation的種類有Candidate、Client、Owner、 Replaced Assignee和Viewer。而具體的Participation既可以是單一使用者,也可以是使用者組。
二: 歷史資料表
11. JBPM4_HIST_ACTINST 流程活動(節點)例項表 存放Activity Instance的歷史記錄
12. JBPM4_HIST_DETAIL 流程歷史詳細表 儲存Variable的變更記錄
13. JBPM4_HIST_PROCINST 流程例項歷史表 存放Process Instance的歷史資訊
14. JBPM4_HIST_TASK 流程任務例項歷史表 Task的歷史資訊。
15. JBPM4_HIST_VAR 流程變數(上下文)歷史表 儲存歷史的變數
第三部分:操作資訊變化
注意:以下操作步驟向表中增加記錄的順序(經過測試)
釋出一個流程deploy後
Ø jbpm4_deployment(流程定義):新增一條記錄
Ø jbpm4_lob(儲存表): 新增一條記錄
Ø jbpm4_deployprop(流程定義屬性表):新增四條記錄
上傳一個zip包(包含png和jpdl.xml)後
Ø JBPM4_DEPLOYMENT多一條記錄
Ø JBPM4_DEPLOYPROP 多三條
Ø JBPM4_LOB多兩條。
開始一個流程startProcessInstanceByKey後
Ø jbpm4_execution(流程例項表):新增一條記錄
Ø jbpm4_hist_procinst(流程例項歷史表):新增一條記錄
Ø jbpm4_variable (上下表):新增一條記錄
Ø jbpm4_task (任務表):新增一條記錄
Ø jbpm4_hist_task(任務歷史表):新增一條記錄
Ø jbpm4_hist_actinst (活動節點例項表):新增一條記錄
填寫申請資訊
Ø jbpm4_variable(上下表) : 新增N條記錄,根據表單資訊決定
Ø jbpm4_task (任務表):新增一條記錄
Ø jbpm4_hist_task(任務歷史表):新增一條記錄
Ø jbpm4_hist_actinst (活動節點例項表):新增一條記錄
審批申請資訊
1.同意:
Ø jbpm4_hist_actinst (活動節點例項表):新增一條記錄
2.駁回:
Ø jbpm4_task (任務表):新增一條記錄
Ø jbpm4_hist_task(任務歷史表):新增一條記錄
Ø jbpm4_hist_actinst (活動節點例項表):新增一條記錄
審批結束
Ø jbpm4_hist_actinst (活動節點例項表):新增一條記錄
第四部分:JBMP4.4包作用
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.pvm.internal.xml
主要用於解析xml的,主要解析jbpm.cfg.xml和流程定義檔案
org.jbpm.pvm.internal.util
包含常用工具
org.jbpm.pvm.internal.wire
用來在ioc裡進行依賴繫結。子包包含binding, descriptor, operation和xml,而且預設的繫結方式是使用field,而不是常見的setter繫結方式。
org.jbpm.pvm.internal.type
用來進行型別轉換,主要是載入jbpm.cfg.xml對流程引擎進行初始化時,還有就是釋出流程的時候進行型別轉換。子包包括converter,matcher和variable,型別轉換器,型別匹配器和變數。
org.jbpm.pvm.internal.tx
其中負責處理事務,JtaTransaction啦,SpringTransationInterceptor 啦,StandardTransaction啦,這些需要根據實際環境具體選擇。jta的實現部分已經單獨放到子包jta中了。希望spring中的事務也能這樣處理就好了。
org.jbpm.pvm.internal.test
包下放了一個JobTestHelper,顯然是可以幫助在測試環境下執行job的,。
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泳道。暫時沒有發現三者之間與任務的聯絡
JBPM4 常用表結構
第一部分:表結構說明
Jbpm4 共有18張表,如下,其中紅色的表為經常使用的表
一:資源庫與執行時表結構
1. JBPM4_DEPLOYMENT 流程定義表
2. JBPM4_DEPLOYPROP 流程定義屬性表
3. JBPM4_EXECUTION 流程例項表
4. JBPM4_PROPERTY 流程引擎表
5. JBPM4_TASK 任務表
6. JBPM4_VARIABLE 上下文表
7. JBPM4_JOB 定時表
8. JBPM4_LOB 儲存表
9. JBPM4_SWIMLANE泳道表
10. JBPM4_PARTICIPATION 參與者表
二: 歷史資料表
11. JBPM4_HIST_ACTINST 流程活動(節點)例項表
12. JBPM4_HIST_DETAIL 流程歷史詳細表
13. JBPM4_HIST_PROCINST 流程例項歷史表
14. JBPM4_HIST_TASK 流程任務例項歷史表
15. JBPM4_HIST_VAR 流程變數(上下文)歷史表
三:身份認證表結構
16. JBPM4_ID_GROUP 組表
17. JBPM4_ID_MEMBERSHIP 使用者角色表
18. JBPM4_ID_USER 使用者表
這三張表很常見,基本的許可權控制,關於使用者認證方面建議還是自己開發一套,元件自帶的功能太簡單,使用中有很多需求難以滿足
第二部分:表結構描述
1. JBPM4_DEPLOYMENT 流程定義表
2. JBPM4_DEPLOYPROP 流程定義屬性表
3. JBPM4_EXECUTION 流程例項表
主要是存放JBPM4的執行資訊,Execution機制代替了JBPM3的Token機制。
4. JBPM4_PROPERTY 流程引擎表
5. JBPM4_TASK 任務表
存放需要人來完成的Activities,需要人來參與完成的Activity 被稱為Task
6. JBPM4_VARIABLE 上下文表 存的是進行時的臨時變數
7. JBPM4_JOB 定時表 存放的是Timer的定義
8. JBPM4_LOB 儲存表
9. JBPM4_SWIMLANE泳道表
Swim Lane是一種Runtime Process Role。通過Swim Lane,多個Task可以一次分配到同一Actor身上。
10. JBPM4_PARTICIPATION 參與者表
存放 Participation的資訊,Participation的種類有Candidate、Client、Owner、 Replaced Assignee和Viewer。而具體的Participation既可以是單一使用者,也可以是使用者組。
二: 歷史資料表
11. JBPM4_HIST_ACTINST 流程活動(節點)例項表 存放Activity Instance的歷史記錄
12. JBPM4_HIST_DETAIL 流程歷史詳細表 儲存Variable的變更記錄
13. JBPM4_HIST_PROCINST 流程例項歷史表 存放Process Instance的歷史資訊
14. JBPM4_HIST_TASK 流程任務例項歷史表 Task的歷史資訊。
15. JBPM4_HIST_VAR 流程變數(上下文)歷史表 儲存歷史的變數
第三部分:操作資訊變化
注意:以下操作步驟向表中增加記錄的順序(經過測試)
釋出一個流程deploy後
Ø jbpm4_deployment(流程定義):新增一條記錄
Ø jbpm4_lob(儲存表): 新增一條記錄
Ø jbpm4_deployprop(流程定義屬性表):新增四條記錄
上傳一個zip包(包含png和jpdl.xml)後
Ø JBPM4_DEPLOYMENT多一條記錄
Ø JBPM4_DEPLOYPROP 多三條
Ø JBPM4_LOB多兩條。
開始一個流程startProcessInstanceByKey後
Ø jbpm4_execution(流程例項表):新增一條記錄
Ø jbpm4_hist_procinst(流程例項歷史表):新增一條記錄
Ø jbpm4_variable (上下表):新增一條記錄
Ø jbpm4_task (任務表):新增一條記錄
Ø jbpm4_hist_task(任務歷史表):新增一條記錄
Ø jbpm4_hist_actinst (活動節點例項表):新增一條記錄
填寫申請資訊
Ø jbpm4_variable(上下表) : 新增N條記錄,根據表單資訊決定
Ø jbpm4_task (任務表):新增一條記錄
Ø jbpm4_hist_task(任務歷史表):新增一條記錄
Ø jbpm4_hist_actinst (活動節點例項表):新增一條記錄
審批申請資訊
1.同意:
Ø jbpm4_hist_actinst (活動節點例項表):新增一條記錄
2.駁回:
Ø jbpm4_task (任務表):新增一條記錄
Ø jbpm4_hist_task(任務歷史表):新增一條記錄
Ø jbpm4_hist_actinst (活動節點例項表):新增一條記錄
審批結束
Ø jbpm4_hist_actinst (活動節點例項表):新增一條記錄
jbpm4.4最核心的包
1.antlr.jar
2.commons-collections.jar
3.commons-logging.jar
4.dom4j.jar
5.hibernate-core.jar
6.javassist.jar
7.jbpm.jar
8.jta.jar
9.mail.jar
10.slf4j-api.jar
11.slf4j-jdk14.jar
12.slf4j-log4j12.jar
配置檔案
jbpm.execution.hbm.xml, jbpm.history.hbm.xml, jbpm.identity.hbm.xml, jbpm.repository.hbm.xml, jbpm.task.hbm.xml五個hibernate對映檔案
jbpm.default.cfg.xml ----> 流程引擎的預設配置檔案
jbpm.identity.cfg.xml ----> 身份驗證配置檔案
jbpm.jbossremote.cfg.xml ----> 遠端呼叫jboss實現命令模式
jbpm.jobexecutor.cfg.xml ----> 任務執行器的配置
jbpm.task.lifecycle.xml ----> 任務生命週期,包括啟動,暫停,繼續,完成,取消之類
jbpm.tx.hibernate.cfg.xml----> 預設的hibernate事務配置
jbpm.tx.jta.cfg.xml ----> jta的事務配置
jbpm.variable.types.xml ----> 配置變數型別對映
jbpm.wire.bindings.xml ----> 依賴繫結對映
jbpm4.4包作用
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.pvm.internal.xml
主要用於解析xml的,主要解析jbpm.cfg.xml和流程定義檔案
org.jbpm.pvm.internal.util
包含常用工具
org.jbpm.pvm.internal.wire
用來在ioc裡進行依賴繫結。子包包含binding, descriptor, operation和xml,而且預設的繫結方式是使用field,而不是常見的setter繫結方式。
org.jbpm.pvm.internal.type
用來進行型別轉換,主要是載入jbpm.cfg.xml對流程引擎進行初始化時,還有就是釋出流程的時候進行型別轉換。子包包括converter,matcher和variable,型別轉換器,型別匹配器和變數。
org.jbpm.pvm.internal.tx
其中負責處理事務,JtaTransaction啦,SpringTransationInterceptor 啦,StandardTransaction啦,這些需要根據實際環境具體選擇。jta的實現部分已經單獨放到子包jta中了。希望spring中的事務也能這樣處理就好了。
org.jbpm.pvm.internal.test
包下放了一個JobTestHelper,顯然是可以幫助在測試環境下執行job的,。
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泳道。暫時沒有發現三者之間與任務的聯絡。