database - Drools:在数据库中存储规则

标签 database drools rules

目前我将所有规则文件存储在文件系统上(它们有很多版本)并在启动时将它们的不同版本加载到内存中。我想更改为将我的 drools 文件存储在数据库中,并且想知道是否有 Drools 的任何解决方案或插件可以促进这一点,或者我应该自己制作吗?

谢谢。

最佳答案

是的,这是可以做到的。您所需要的只是获取 InputStream 的能力。在我的例子中,我使用自己的 JPA 类 RulePackage 将规则源保存为 byte[],但您可以使用直接 JDBC 连接访问数据库架构中的 BLOB/CLOB 字段。重要的是还要保存存储规则源的类型,构建规则包时需要它:

switch(rulePackage.getRuleSourceType()) {
  case DRL:
    kbuilder.add( ResourceFactory.newByteArrayResource(rulePackage.getSource()), ResourceType.DRL);
    break;
  case EXCEL:
    kbuilder.add( ResourceFactory.newByteArrayResource(rulePackage.getSource()), ResourceType.DTABLE, excelConfig);
    break;
  case CSV:
    kbuilder.add( ResourceFactory.newByteArrayResource(rulePackage.getSource()), ResourceType.DTABLE, csvConfig);
    break;
  default:
    throw new Exception("Rule package '" + rulePackage.getName() + "' has unknown type");
}

如果更适用于您的情况,您可以考虑使用 newInputStreamResource 方法:

   case DRL:
    kbuilder.add( ResourceFactory.newInputStreamResource(new StringInputStream(myDrlAsString)), ResourceType.DRL);
    break;

   case DRL:
    kbuilder.add( ResourceFactory.newInputStreamResource(new ByteArrayInputStream(myDrlAsByteArr)), ResourceType.DRL);
    break;

类似的东西。

关于database - Drools:在数据库中存储规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4392664/

相关文章:

eclipse - 在 Eclipse 中安装 Drools Planner

java - "JavaSonarQube"和 "Java Common Sonarqube"的分析器

Android 你如何检测哪个联系人发生了变化?

java - 从 JavaScript 检索数据的简单方法

mysql - SQL 从一个表复制到另一个表的适当字段

php - Nginx:将子域重写为其中的文件夹和文件

http - 浏览器 cookie 域如何工作?

java - 将 mySQL MAX 值设置为 java 变量

java - 当项目导出到 JAR 时,newKieSession() 返回 null

drools - 如何在Eclipse Indigo IDE中安装Drools插件