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