Skip to end of metadata
Go to start of metadata

 

URule2技术交流QQ群及在线体验示例

在线体验示例:http://112.124.15.63:8084/为了不同用户操作互不影响,需要注册账号登录体验操作。

URule2技术交流QQ群:423339793

URule2规则引擎产品教学视频:https://pan.baidu.com/s/1oAeJeCM,密码:evsk


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

urule.repository.dir属性设置技巧

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

将知识库存储于数据库

       将知识文件存储到本地文件系统中,对于多人开发的项目来说,就有些不方便,对于这种情况,我们可以将知识库存储于数据库中,这样就可以解决上述问题。在数据库中存储知识库有两种方式,一种是采用Spring中配置数据源连接数据库(此方法为PRO版以及开源版2.1.2+版本中提供的功能);另一种就是用户自定义jackrabbit的存储xml配置文件,通过这个文件来自定义数据库连接信息。当然我们这里肯定推荐第一种采用Spring中配置数据源连接数据库方式。

       这里需要强调的是,一旦采用数据库方式存储知识库,同时有一个以上应用连接这个存储在数据库中的知识库时,一定要为应用配置集群,否则会出现文件丢失的情况,就是说在未配置集群的情况下,一个应用在保存规则时会覆盖整个知识库,从而产生另一个应用配置的规则丢失的情况,这点一定要注意。

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

       特别要强调的是此功能为URule-2.1.2以及后续版本以及URule PRO中提供,也是我们强烈推荐的方法。如果您要采用这个方法,如果您采用的是开源版本请先确认你采用的URule版本,如果用的是PRO版则可以直接使用。具体做法是删除属性文件中对urule.repository.dir属性的配置信息(当然注释也可以),然后添加在properties文件中添加一面两个属性即可:

属性名含义

urule.repository.datasourcename

当前在标准spring context中已配置的数据源的bean id
urule.repository.databasetype当前采用数据源对应的数据库类型,目前支持的类型有6种,分别是:mysql、mssqloracledb2derby以及postgresql

       比如我们定义属性urule.repository.datasourcename值为testOracle,那就表示要采用在标准spring中配置的一个id为testOracle的DataSource bean,该DataSource连接是一个oracle数据库,所以还需要设置urule.repository.databasetype属性值为oracle,依次类推。

 

自动集群

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

 

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

       对于有过jackrabbit使用经验的用户来说,可能需要进一步控制资源文件的存储方式,对于这种情况,URule提供了一个名为“urule.repository.xml”的属性,通过设置这个属性的值,指定一个定义好的jackrabbit配置文件的位置,这样URule中的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。

       某些时候,你可能需要将URule相关规则文件存储到数据库表当中(我们推荐的存储方式),这时你可以新建一个内容如下所示的xml文件,然后通过urule.repository.xml属性指定好该文件位置即可,下面是几种常见的用数据库来作为repository的xml配置文件,实际使用时我们只需要修改其中的数据库连接即可。

      连接数据库的配置方式有三种,分别是直接连接数据库方式、连接池方式以及JNDI方式,这里推荐的是后面两种连接方式,我们先来看看直接连接数据库XML的配置方式。

直连数据库方式XML配置(不推荐)

MySQL连接配置文件

将文件存储到数据库中jackrabbit配置示例

 

Oracle连接配置文件

Oracle连接配置文件

使用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连接配置文件

SQLServer连接配置文件

 

DB2连接配置文件

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配置放在<Versioning/>节点之后即可,不同数据库的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

连接池方式

MySQL连接配置文件

将文件存储到数据库中jackrabbit配置示例

 

Oracle连接配置文件

Oracle连接配置文件

使用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连接配置文件

SQLServer连接配置文件

 

DB2连接配置文件

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配置放在<Versioning/>节点之后即可,不同数据库的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连接配置文件

将文件存储到数据库中jackrabbit配置示例

 

Oracle连接配置文件

Oracle连接配置文件

使用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连接配置文件

SQLServer连接配置文件

 

DB2连接配置文件

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配置放在<Versioning/>节点之后即可,不同数据库的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