Drools:在数据库中存储规则

gho*_*ain 14 database rules drools

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

谢谢.

Osw*_*Osw 8

是的,可以做到.所有你需要的是获取的能力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");
}
Run Code Online (Sandbox Code Playgroud)

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

   case DRL:
    kbuilder.add( ResourceFactory.newInputStreamResource(new StringInputStream(myDrlAsString)), ResourceType.DRL);
    break;
Run Code Online (Sandbox Code Playgroud)

要么

   case DRL:
    kbuilder.add( ResourceFactory.newInputStreamResource(new ByteArrayInputStream(myDrlAsByteArr)), ResourceType.DRL);
    break;
Run Code Online (Sandbox Code Playgroud)

这样的事情.


Ste*_*rod 3

好吧,您可能希望将 Guvnor 视为提供规则管理的一种方式。

但简而言之,不,你必须自己编写。

请记住,您不需要中间的文件,您可以从数据库中读取规则的字符串表示形式,然后对其进行编译。