3.x 遷移到 4.x
1.原3.x存在的問題
Apache Jackrabbit 是 Java Technology API (JCR) 的内容倉庫實現,是管理(lǐ)倉庫内容的綜合性平台。它具(jù)有(yǒu)強大的能(néng)力如結構化和非結構化内容支持、全文(wén)本搜索等,廣泛用(yòng)于 web 内容管理(lǐ)系統、文(wén)檔管理(lǐ)系統和企業内容管理(lǐ)機系統中(zhōng)。
- jackrabbit安(ān)全漏洞
- jackrabbit不支持并發修改存儲庫,JCR規範明确聲明Session不是線(xiàn)程安(ān)全的(JCR 1.0第7.5節和JCR 2.0第4.1.2節),因此,Jackrabbit不支持同時讀取或寫入同一會話的多(duō)個線(xiàn)程,每個會話隻能(néng)從一個線(xiàn)程訪問,如果需要同時寫入同一節點,則需要使用(yòng)多(duō)個會話,并使用(yòng)JCR鎖定以确保不存在沖突。
- 用(yòng)jackrabbit存儲文(wén)件,沒有(yǒu)事務(wù)支持,可(kě)能(néng)會丢失文(wén)件。
- 知識包的tps不夠高
2.升級過程
2.1 概述
URule Pro4.x+版本在規則文(wén)件存儲方法采用(yòng)是直接操作(zuò)數據庫方式實現,不再使用(yòng)基于Jackrabbit的存儲方式,這導緻URule Pro3.x及以往版本上開發的規則項目無法直接遷移到URule Pro4.x+中(zhōng)。為(wèi)了解決這一問題,我們專門提供了一個數據遷移工(gōng)具(jù),它可(kě)以将以往老版本的URule項目直接導入到新(xīn)版本的對應的數據庫表中(zhōng)。 實現将老版本的規則項目遷移到最新(xīn)的URule Pro4.x+中(zhōng)來總體(tǐ)來說可(kě)分(fēn)為(wèi)三步:
- 第一步,搭建好一個基于URule Pro4.x+的項目,并初始化好其依賴的數據庫表;
- 第二步,在老版本URule項目中(zhōng)添加urule-pro-migration包;
- 第三步,在老項目執行‘遷移工(gōng)具(jù)’,規則文(wén)件和知識包将會同步到新(xīn)版數據庫表中(zhōng)。
2.2 初始化uRule 4.x項目
(1)下載代碼到本地
導入到idea中(zhōng),自動構建
在目标數據庫中(zhōng)創建測試庫
在urule-init.properties中(zhōng)指定urule.home為(wèi)一個存在的磁盤路徑
urule.home=/Users/hans/coding/uruleDemoRepo
在logback-spring.xml中(zhōng)指定LOG_HOME為(wèi)某一個地址經
(2)啓動服務(wù)
- 啓動服務(wù),運行Application.java
- 控制台打印如下日志(zhì)片段
[2023-07-19 19:46:30.127] [main] INFO c.b.u.c.c.bootstrap.BootstrapManager : URule Home:/Users/hans/coding/uruleDemoRepo
[2023-07-19 19:46:30.127] [main] ERROR c.b.u.c.c.bootstrap.BootstrapManager : 未能(néng)完成配置文(wén)件加載,需要先進行配置文(wén)件初始化工(gōng)作(zuò).請參考:/resources/doc/4.0/config/2.2setup.html
(3)根據向導提示完成初始化
訪問http://localhost:8081,首次會自動跳轉到數據源配置界面,根據向導提示進行配置,後台會自動過初始化數據庫表
注冊管理(lǐ)員,創建团隊等
2.3 修改urule 3.x項目
(1)在pom中(zhōng)集成遷移工(gōng)具(jù)
打開老版本的URule項目,如果項目是基于Maven結構,那麽可(kě)以直接在pom.xml在添加urule-pro-migration包的依賴信息:
<dependency>
<groupId>com.bstek.urule</groupId>
<artifactId>urule-console-pro</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>com.bstek.urule</groupId>
<artifactId>urule-pro-migration</artifactId>
<version>1.0.2</version>
</dependency>
urule-pro-migration目前的最新(xīn)版本是1.0.2,具(jù)體(tǐ)可(kě)以打開http://search.maven.org 搜索關鍵字urule-pro-migration查看該包的最新(xīn)版本。
可(kě)以看到urule-pro-migration包是依賴于urule-console-pro的3.0.3版本的,所以我們可(kě)以隻依賴urule-pro-migration包即可(kě)。
(2)引入配置文(wén)件
在spring配置中(zhōng)引入uurle-migration.xml文(wén)件:
<import resource="classpath:urule-migration.xml"/>
配置好urule-pro-migration包後,我們還需要将之前搭建的URule Pro4.x項目下classpath裏創建的是名(míng)為(wèi)urule-init.properties的配置文(wén)件複制到當前項目的classpath中(zhōng),文(wén)件複制過來後不需要做任何修改可(kě)直接使用(yòng)。事實上在遷移工(gōng)具(jù)執行時,會自動讀取本地磁盤上urule.home中(zhōng)的配置文(wén)件路徑。
urule.home=/Users/hans/coding/uruleDemoRepo
(3)啓動服務(wù)
(4)執行項目遷移操作(zuò)
在老項目3.x啓動成功後,打開浏覽器訪問urule/migration,就可(kě)以看到如下項目遷移頁(yè)面。
選擇要遷移的項目,再選擇好目标团隊,點擊下面的【開始遷移】按鈕,即可(kě)實現将老項目遷移到URule Pro4.x項目的數據庫當中(zhōng)。
注意事項:
- 遷移時,如果老項目較大,項目中(zhōng)規則文(wén)件很(hěn)多(duō),遷移時可(kě)能(néng)需要較長(cháng)時間,請耐心等待。
- 遷移操作(zuò)會将老項目中(zhōng)所有(yǒu)的文(wén)件以及知識包導入到新(xīn)項目的數據庫中(zhōng),但遷移操作(zuò)不會将老項目中(zhōng)文(wén)件的版本信息以及已發布的知識包信息導入到新(xīn)項目的數據庫中(zhōng)。
- 老項目遷入到新(xīn)版本中(zhōng)後,會創建所有(yǒu)的相關規則文(wén)件及知識包,需要注意的是URule Pro4.x+中(zhōng)知識包需要發布然後才能(néng)使用(yòng),而從老項目中(zhōng)導入的知識包,默認都是未發布的,不能(néng)直接調用(yòng),所以還需要走發布流程才能(néng)調用(yòng)。
2.4 常見問題
- 如果執行項目遷移時報【CODE】字段不能(néng)為(wèi)空,可(kě)暫時将規則引擎數據庫的【urule_packet】表的【CODE】字段設置為(wèi)允許為(wèi)空字段,導入完成後,在URule Pro4中(zhōng)将知識包的【CODE_】編碼補填好。
- 腳本式規則不支持
3.測試驗證
3.1 檢查遷移規則文(wén)件數
(1)在數據庫中(zhōng),可(kě)以看到項目數據和規則文(wén)件數據已存在,但是沒有(yǒu)【腳本式規則文(wén)件】 (2)項目遷移完成後,運行之前搭建的URule Pro4.x+項目,用(yòng)注冊的賬号登錄,進入指定的团隊,就可(kě)以看到從老版本中(zhōng)遷入的項目
3.2 規則檢查
略。