jackrabbit mysql_14.数据库中存储知识库

14.在数据库中存储知识库

概述

在介绍安装与配置一节时,很重要一点那就是需要设置好规则相关文件库的存储方式。URule Pro规则引擎中规则相关资源文件存储机制采用的是jackrabbit实现,默认情况下,我们只需要通过urule.repository.dir属性来指定资源库目录,这样就会在这个目录下以文件形式存储规则相关文件。

如果我想将让资源库存储放到当前项目所在目录,比如WEB-INF下的repo目录中,那么我们可以在当前项目的WEB-INF目录中创建一个名为repo的目录,然后设置urule.repository.dir属性值为“/WEB-INF/repo”,这样urule在启动的时候会自动将这个目录作为repository的工作目录。

将知识文件存储到本地文件系统中,对于多人开发的项目来说,就有些不方便,对于这种情况,我们可以将知识库存储于数据库中,这样就可以解决上述问题。

在数据库中存储知识库有两种方式,一种是采用Spring中配置数据源连接数据库;另一种就是用户自定义jackrabbit的存储xml配置文件,通过这个文件来自定义数据库连接信息。当然这里肯定推荐第一种采用Spring中配置数据源连接数据库方式。

这里需要强调的是,当采用xml配置方式来连接数据库,那么就需要手工配置集群信息,如果不配置使用过程中就可能会出现文件丢失的情况,就是说在未配置集群的情况下,一个应用在保存规则时会覆盖整个知识库,从而产生另一个应用配置的规则丢失的情况,这点一定要注意;如果采用spring配置方式的话,那么引擎会自动配置好集群信息。

采用Spring中配置数据源连接数据库

这种配置数据库存储的方式是我们强烈推荐的方法。具体做法是删除属性文件中对urule.repository.dir属性的配置信息(当然注释也可以),然后添加在properties文件中添加一面两个属性即可:

属性名

含义

urule.repository.datasourcename

当前在标准spring context中已配置的数据源的bean id

urule.repository.databasetype

当前采用数据源对应的数据库类型,目前支持的类型有6种,分别是:mysql、mssql、oracle、db2、derby以及postgresql

下面这段是配置在Spring中的一个连接到Mysql数据库的数据源连接配置,它的Bean的Id为"mysqlDatasource",如下所示:

value="jdbc:mysql://localhost:3306/urule_test?useUnicode=true&characterEncoding=UTF-8" />

要让我们的知识库使用这个数据源,我们只需要在properties文件中添加一个名为urule.repository.datasourcename属性,值为mysqlDatasource,同时该连接是一个mysql数据库,所以还需要设置urule.repository.databasetype属性值为mysql,这样就可以使用这个配置在Spring中的数据源来作为URule Pro中知识库相关文件的存储库。

当采用Spring中配置的数据源连接数据库时,引擎会自动添加集群功能,所以这种配置方式是我们推荐的。

如果我们采用后面的配置XML的方式连接数据库则需要手动配置集群,如果不添加集群配置的话,那么在使用中如有一个以上应用连接同一个存储知识库的数据库,在规则编写定义时则可能会出现文件丢失情况。

用户自定义jackrabbit的存储xml配置文件

对于有过jackrabbit使用经验的用户来说,可能需要进一步控制资源文件的存储方式,对于这种情况,URule Pro提供了一个名为“urule.repository.xml”的属性,通过设置这个属性的值,指定一个定义好的jackrabbit配置文件的位置,这样URule Pro中的jackrabbit就可以按这个配置文件配置方式运行,采用这种方式,需要我们将属性文件中配置的urule.repository.dir属性以及urule.repository.datasourcename和urule.repository.databasetype属性删除或注释。

如:urule.repository.xml=/WEB-INF/test.xml,那就表示系统将采用当前应用根下的WEB-INF目录下的text.xml文件来运行jackrabbit;urule.repository.xml=classpath:com/bstek/app/test.xml,则表示系统将采用当前应用classpath下com/bstek/app目录下的test.xml文件来运行jackrabbit。

下面是几种常见的用数据库来作为repository的xml配置文件,实际使用时我们只需要修改其中的数据库连接即可。

连接数据库的配置方式有两种,分别是连接池方式以及JNDI方式,我们先来看看连接池方式的XML配置。

连接池方式配置

MySQL连接配置文件

Oracle连接配置文件

如果当前Oracle的版本Oracle9,那么上述配置中的"org.apache.jackrabbit.core.fs.db.OracleFileSystem"类要改成“org.apache.jackrabbit.core.fs.db.Oracle9FileSystem”;“org.apache.jackrabbit.core.persistence.pool.OraclePersistenceManager”类同样也需要改“org.apache.jackrabbit.core.persistence.pool.Oracle9PersistenceManager”。

SQLServer连接配置文件

DB2连接配置文件

值得注意的是,一旦配置好基于数据库的存储方式,那么在第一次启动时jackrabbit会帮助我们自动创建所需要的表信息。

在我们通过urule.repository.xml属性指定一个文件采用数据库方式存储资源文件时,系统启动时还需要一个目录来存储一些临时文件,这时如果我们通过urule.repository.dir属性指定了一个目录,那么这些临时文件将会存储在这个目录中;如果没有通过urule.repository.dir属性指定了一个目录,那么引擎将在JVM临时目录中存储(通过System.getProperty("java.io.tmpdir")获取到的目录)。

在实际使用当中,如果我们采用数据库作为repository,同时有一个以上URule Server应用将此库作为repository,那么对于jackrabbit来说,就是一个典型的cluster配置,在这种情况下,如果直接使用上述数据库配置,那么各个URule Server应用中只会看到应用启动时数据库中存储的repository信息,而对于其它后续其它URule Server对库的修改是看不到的,为解决这一问题,需要在上述xml配置中添加jackrabbit的cluster配置,这段cluster配置放在节点之后即可,不同数据库的cluster配置如下。

SQLServer的Cluster配置

Oracle的Cluster配置

MySQL的Cluster配置

DB2的Cluster配置

在上述配置当中,Cluster节点都有一个名为syncDelay的属性,该属性用于定义当前节点每隔多久与数据库进行一次同步,单位是毫秒,这里设置的都是5000,就表示5000毫秒,也就是每隔5秒与数据库同步一次。同时,如果运行时出现下面错误,可以在Cluster节点还可以添加一个id属性,用于标识当前节点的ID。

集群下没有为Cluster节点指定id属性时出现的错误:

Failed to access cluster node id: \cluster_node.id

JNDI方式

MySQL连接配置文件

Oracle连接配置文件

如果当前Oracle的版本Oracle9,那么上述配置中的"org.apache.jackrabbit.core.fs.db.OracleFileSystem"类要改成“org.apache.jackrabbit.core.fs.db.Oracle9FileSystem”;“org.apache.jackrabbit.core.persistence.pool.OraclePersistenceManager”类同样也需要改“org.apache.jackrabbit.core.persistence.pool.Oracle9PersistenceManager”。

SQLServer连接配置文件

DB2连接配置文件

一旦配置好基于数据库的存储方式,那么在第一次启动时jackrabbit会帮助我们自动创建所需要的表信息。

在我们通过urule.repository.xml属性指定一个文件采用数据库方式存储资源文件时,系统启动时还需要一个目录来存储一些临时文件,这时如果我们通过urule.repository.dir属性指定了一个目录,那么这些临时文件将会存储在这个目录中;如果没有通过urule.repository.dir属性指定了一个目录,那么引擎将在JVM临时目录中存储(通过System.getProperty("java.io.tmpdir")获取到的目录)。

在实际使用当中,如果我们采用数据库作为repository,同时有一个以上URule Server应用将此库作为repository,那么对于jackrabbit来说,就是一个典型的cluster配置,在这种情况下,如果直接使用上述数据库配置,那么各个URule Server应用中只会看到应用启动时数据库中存储的repository信息,而对于其它后续其它URule Server对库的修改是看不到的,为解决这一问题,需要在上述xml配置中添加jackrabbit的cluster配置,这段cluster配置放在节点之后即可,不同数据库的cluster配置如下。

SQLServer的Cluster配置

Oracle的Cluster配置

MySQL的Cluster配置

DB2的Cluster配置

在上述配置当中,Cluster节点都有一个名为syncDelay的属性,该属性用于定义当前节点每隔多久与数据库进行一次同步,单位是毫秒,这里设置的都是5000,就表示5000毫秒,也就是每隔5秒与数据库同步一次。同时,如果运行时出现下面错误,可以在Cluster节点还可以添加一个id属性,用于标识当前节点的ID。

集群下没有为Cluster节点指定id属性时出现的错误:

Failed to access cluster node id: \cluster_node.id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值