3.x 迁移到 4.x

1.原3.x存在的问题

Apache Jackrabbit 是 Java Technology API (JCR) 的内容仓库实现,是管理仓库内容的综合性平台。它具有强大的能力如结构化和非结构化内容支持、全文本搜索等,广泛用于 web 内容管理系统、文档管理系统和企业内容管理机系统中。

  • jackrabbit安全漏洞
  • jackrabbit不支持并发修改存储库,JCR规范明确声明Session不是线程安全的(JCR 1.0第7.5节和JCR 2.0第4.1.2节),因此,Jackrabbit不支持同时读取或写入同一会话的多个线程,每个会话只能从一个线程访问,如果需要同时写入同一节点,则需要使用多个会话,并使用JCR锁定以确保不存在冲突。
  • 用jackrabbit存储文件,没有事务支持,可能会丢失文件。
  • 知识包的tps不够高

2.升级过程

2.1 概述

URule Pro4.x+版本在规则文件存储方法采用是直接操作数据库方式实现,不再使用基于Jackrabbit的存储方式,这导致URule Pro3.x及以往版本上开发的规则项目无法直接迁移到URule Pro4.x+中。为了解决这一问题,我们专门提供了一个数据迁移工具,它可以将以往老版本的URule项目直接导入到新版本的对应的数据库表中。 实现将老版本的规则项目迁移到最新的URule Pro4.x+中来总体来说可分为三步:

  • 第一步,搭建好一个基于URule Pro4.x+的项目,并初始化好其依赖的数据库表;
  • 第二步,在老版本URule项目中添加urule-pro-migration包;
  • 第三步,在老项目执行‘迁移工具’,规则文件和知识包将会同步到新版数据库表中。

2.2 初始化uRule 4.x项目

(1)下载代码到本地

  • 下载示例程序https://gitee.com/BSTEK-BEIJING/uRule-boot

  • 导入到idea中,自动构建

  • 在目标数据库中创建测试库

  • 在urule-init.properties中指定urule.home为一个存在的磁盘路径

    urule.home=/Users/hans/coding/uruleDemoRepo
    
  • 在logback-spring.xml中指定LOG_HOME为某一个地址经

(2)启动服务

  • 启动服务,运行Application.java
  • 控制台打印如下日志片段
[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 : 未能完成配置文件加载,需要先进行配置文件初始化工作.请参考:http://www.bstek.com/resources/doc/4.0/config/2.2setup.html

(3)根据向导提示完成初始化

2.3 修改urule 3.x项目

(1)在pom中集成迁移工具

​ 打开老版本的URule项目,如果项目是基于Maven结构,那么可以直接在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,具体可以打开http://search.maven.org 搜索关键字urule-pro-migration查看该包的最新版本。

​ 可以看到urule-pro-migration包是依赖于urule-console-pro的3.0.3版本的,所以我们可以只依赖urule-pro-migration包即可。

(2)引入配置文件

​ 在spring配置中引入uurle-migration.xml文件:

<import resource="classpath:urule-migration.xml"/>

​ 配置好urule-pro-migration包后,我们还需要将之前搭建的URule Pro4.x项目下classpath里创建的是名为urule-init.properties的配置文件复制到当前项目的classpath中,文件复制过来后不需要做任何修改可直接使用。事实上在迁移工具执行时,会自动读取本地磁盘上urule.home中的配置文件路径。

urule.home=/Users/hans/coding/uruleDemoRepo

(3)启动服务

(4)执行项目迁移操作

​ 在老项目3.x启动成功后,打开浏览器访问urule/migration,就可以看到如下项目迁移页面。

img

​ 选择要迁移的项目,再选择好目标团队,点击下面的【开始迁移】按钮,即可实现将老项目迁移到URule Pro4.x项目的数据库当中。

注意事项:

  • 迁移时,如果老项目较大,项目中规则文件很多,迁移时可能需要较长时间,请耐心等待。
  • 迁移操作会将老项目中所有的文件以及知识包导入到新项目的数据库中,但迁移操作不会将老项目中文件的版本信息以及已发布的知识包信息导入到新项目的数据库中。
  • 老项目迁入到新版本中后,会创建所有的相关规则文件及知识包,需要注意的是URule Pro4.x+中知识包需要发布然后才能使用,而从老项目中导入的知识包,默认都是未发布的,不能直接调用,所以还需要走发布流程才能调用。

2.4 常见问题

  • 如果执行项目迁移时报【CODE】字段不能为空,可暂时将规则引擎数据库的【urule_packet】表的【CODE】字段设置为允许为空字段,导入完成后,在URule Pro4中将知识包的【CODE_】编码补填好。
  • 脚本式规则不支持

3.测试验证

3.1 检查迁移规则文件数

(1)在数据库中,可以看到项目数据和规则文件数据已存在,但是没有【脚本式规则文件】 (2)项目迁移完成后,运行之前搭建的URule Pro4.x+项目,用注册的账号登录,进入指定的团队,就可以看到从老版本中迁入的项目

3.2 规则检查

略。

results matching ""

    No results matching ""