欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

第六章 永久化

系統 1608 0


圖6.1. 不同形態的轉換

流程定義可以用三種不同的形式表現 ml, java objects 或jBPM數據庫記錄. 執行信息 (= 運行時間) 和日志信息可表現為2種形式 : java objects 和jBPM數據庫記錄.

有關XML表示流程定義和流程檔案可以參看 第13章, jBPM 流程定義語言 (JPDL).

本章討論java Object和jBPM數據庫之間的轉換.jBPM內部hibernate 保存java objects到數據庫并且重現他們 . 當然不是嚴格限定使用jBPM必須有hibernate 的相關知識,這只是推薦使用hibernate.

更多的有關如何發布流程檔案到數據庫親參看 13.1.1節, “發布流程檔案”

6.1. 永久化API

圖 6.2. The jBPM 數據庫class

jBPM永久化操作可以根據名字類似 GraphSession, TaskMgmtSession 和 ContextSession等來找到 .從 JbpmSession可以獲得命名的會話 .? JbpmSession 可以從 JbpmSessionFactory獲得.

JbpmSessionFactory 對你的應用程序來說是threadsafe保證的, 你需要一個 JbpmSessionFactory . 單件模式(Singleton)的延遲初始化(Lazy Initialization)(當心 issues延遲載入和double-check locking的問題 ).

在生成時間,? JbpmSessionFactory預備了能讓JbpmSession可以飛快建立的所有信息 .

作為一個用戶, 你可以為每個thread或每個請求建立一個 JbpmSession .? JbpmSession有一個JDBC? connection 連接到數據庫

JbpmSession 和 JbpmSessionFactory僅僅是包裝它們的 hibernate副本. 高級的特性比如獨立的數據For advanced features such as 脫管對象(detached objects)或樂觀鎖定, 參看hibernate文檔.

public class PersistenceApiTest extends TestCase {

? static JbpmSessionFactory jbpmSessionFactory = JbpmSessionFactory.buildJbpmSessionFactory();

? public void testStartProcessInstance() {
??? // obtain a session
??? JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession();
??? try {
????? // start a user managed transaction
????? jbpmSession.beginTransaction();

????? // load information from the database
????? // (note that process definitions will be cached in memory
????? // in the second level cache of hibernate)
????? ProcessDefinition auctionProcess =
??????? jbpmSession.getGraphSession().findLatestProcessDefinition("auction");

????? // perform a POJO workflow operation on the plain object model.
????? ProcessInstance auctionInstance = new ProcessInstance(auctionProcess);
????? auctionInstance.signal();
?????
????? // store the result in the database
????? jbpmSession.getGraphSession().saveProcessInstance(auctionInstance);
?????
????? // commit the user transaction
????? jbpmSession.commitTransaction();

??? } finally {
????? // close the session.
????? jbpmSession.close();?????
??? }
? }
}
6.2. 數據庫配置
最容易的配置the hibernate SessionFactory 的方式是把 hibernate.cfg.xml 放到根classpath里.? hibernate.cfg.xml 包含了如何獲得jdbc jdbc connections 和定位hibernate mapping 文件. 你可以在目錄test/java發現比如mapping文件的例子.

更多關于配置hibernate的信息可以參看 hibernate 參考手冊l, 配置章節.

6.3. 管理事務
jBPM 基本方式是平衡 hibernate 關于事務分界的能力. 這有兩個最常見的場景來解釋:

用戶事務管理, JbpmSession 有方法

JbpmSession.beginTransaction()
JbpmSession.commitTransaction()
JbpmSession.rollbackTransaction()
這些方法的行為依賴hibernate的有關事務的配置.

如果你配置了hibernate 管理她自己的JDBC connections (比如 C3P0連接池), 那么事務操作的結果同JDBC connection一致. hibernate配置文件中(hibernate.cfg.xml) 配置要求你指明JDBC connection屬性. 可選的, 你可以通過c3p0連接池的屬性來配置連接池.

當你配置了hibernate 獲得connection從應用服務器中的DataSource,那么事務的方法將同包容器中的UserTransaction object的方法保持一致.

更多有關配置事務的細節參看? hibernate 參考手冊, 事務策略章節.

6.4. jBPM 數據庫
jBPM 數據庫包含流程定義,流程執行和日志數據. 流程定義數據是靜態的不能改變(參看 章節13.1.2, “流程版本 . 流程執行是流程定義的參考數據. 流程日志包含了所有在流程執行中的變化信息.

6.4.1. Hibernate 整合
jBPM 使用 hibernate 3.0? 作為它的 O/R映射. 這就意味著hibernate 有負責jBPM java object和這些對象在關系數據庫中永久化對象的變換. 注意你開始使用jBPM不必了解Hibernate . Hibernate用于jBPM內部. 但是理解基本的hibernate, 會幫助你更好理解jBPM API的語義.

讓我們看看一些例子和得到一些hibernate的功能了解:

發布流程檔案 : 發布流程檔案按照幾個步驟, 在第一個步驟, 檔案被解析并且相應的java object模型也被建立. 對象圖將被hibernate處理. Hibernate將產生必要的相關SQL數據庫插入語句 .
更新流程實例 : 另外一個功能是hibernate 臟數據檢查功能. hibernate 在兩個對象圖中間計算不同并產生必要的對應數據庫的update語句 (和插入及刪除) 使java object和數據庫保持一致. 因此當你想繼續流程執行實例, 你使用 ProcessInstance JbpmSession.getGraphSession().loadProcessInstance(Long pid) , jBPM將委托這個調用到 hibernate. Hibernate將從數據庫載入這個流程實例數據并且結構化成jBPM java objects. 在這之后,你可以自由的修改流程實例java objects就好象其他java objects一樣.當你完成 (比如在在執行進入等待狀態之后)后 你可以保存修改過的流程實例到數據庫,通過調用 JbpmSession.getGraphSession().saveProcessInstance(ProcessInstance processInstance) . jBPM 同樣委過這個任務到hibernate , hibernate 將計算給頂的processInstance和 原始從數據庫中載入的processInstance .這叫做臟數據檢查. Hibernate 會計算所有的不同并且產生必要的SQL語句來保證數據庫和java object的同步.
執行這個任務, hibernate 需要一組mapping文件和配置文件. mapping 文件說明了java object 同數據庫table之間的映射. jBPM 包括所有的jBPMdomain class的 mapping 文件.

hibernate配置文件中的主要信息是描述數據庫連接的配置屬性. 包括jdbc連接和數據庫方言. SQL方言是重要的hibernate特性 : 數據庫無關. 數據庫每個類型一般說來都有同樣的SQL, 但不同的數據庫有稍微不同的SQL語法. Hibernate 知道這些區別并通過方言屬性來建立正確的SQL. 可以參考hibernate文檔查看支持的數據庫清單.

6.4.2. 開發數據庫是hsqldb
hypersonic數據庫是理想的包含關系數據庫的java軟件的數據庫. 尤其是 hypersonic in-memory 模型是非常便于編寫包含數據操作的test unit . hypersonic in-memory 數據庫保持所有的數據在內存中而不是保存在磁盤里. jBPM的單元測試將開始一個干凈的空的in-memory數據庫. 然后hibernate schema 生成工具將建立jBPM table. 我們提供的jBPM類mapping文件作為hibernate schema生成器的輸入. 然后hibernate schema 生成器根據信息生成數據庫schema (DDL)腳本. 這些DDL 語句將在hypersonic in-memory數據庫上執行用來建立新的,空的jBPM 數據庫.

6.4.3. 其他數據庫支持
為了支持除了hypersonic in-memory 數據庫而提供了jbpm 數據庫擴展包: jbpm-<version>-db.zip . 參看 章節2.1, “可下載一覽” . 這個包報案ant 腳本來測試jBPM是否為支持的不同的數據庫產生數據庫的DDL腳本 (create, drop和clean)

在展開 jbpm-<version>-db.zip , 更新 build.properties并且設置 jbpm.3.location 到安裝jbpm的主目錄(相對路徑或絕對路徑)

數據包擴展包包括一個ant建造script (build.xml ) 在根目錄下. 這個腳本包括建立jBPM支持的數據庫生成腳本和測試腳本.運行 ant -p 得到關于建造目標更多的信息.? readme.html文件介紹了更多的有關不同數據庫實現的信息及狀態.

生成的腳本是默認的腳本.如果想為特定的使用定制或優化 , 你必須詢問你的DBA 先查看數據庫腳本. 通常的定制是額外的索引或增加text字段的最大值.

如果你的數據庫不被支持,你可以用我們介紹的方法在你的數據庫上來測試jBPM . 我們希望支持所有的數據庫,所以可以把你的數據庫的下列信息讓我們知道.:

jbpm.test.hibernate.properties 配置文件
那里可以下載數據庫驅動和數據庫版本
你碰到的任何問題

第六章 永久化


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日日操日日舔 | 国产欧美日韩在线不卡第一页 | 精品国产日韩一区三区 | 一级淫片免费 | 婷婷久久综合网 | 欧美日本中文字幕 | 久久久91| 不卡一区二区三区四区 | 久久免费福利 | 成人国产在线 | a级片在线视频 | 欧美成人h版在线观看 | 妞干网免费在线观看 | 久久亚洲国产精品 | 天天射天天干 | 国产福利资源在线 | 国内精品久久久久久99蜜桃 | 日韩一区二区三区四区五区 | 精品国产一区二区三区四 | 国产一区在线免费观看 | 久久月 | 久草视频在线资源站 | 快射视频欧美 | 国产视频在线免费观看 | 99久久精品费精品国产一区二区 | 青娱乐久草 | av免费不卡国产观看 | 99re6热视频精品免费观看 | 久福利| 国产精品亚洲一区二区三区在线 | 国产成人a | 欧美aⅴ片 | 波多野衣结在线精品二区 | 日本久久精品 | 国产在线中文字幕 | 日本高清一区二区三区不卡免费 | 九九视频这里只有精品99 | 九九亚洲视频 | 国产精品成人在线播放 | 99热精品在线 | 午夜影库|