java - 如何在运行时从 Guvnor 加载和执行规则(无更改集 xml 文件)

标签 java drools

我想提供一个包和规则名称,从 Guvnor 检索该规则并运行它。我想在不在 change-set.xml 文件中预先定义任何资源的情况下完成这一切。我无法在网上找到任何此类示例,也无法在任何 drools 文档中找到此类示例。

目前,我一直在想办法将规则应用到我的应用程序中。所以..

给定 Guvnor 中特定规则的包和规则名称,我如何在运行时将该规则导入我的应用程序(以便它适用于应用程序启动后创建的规则)?

谢谢!

最佳答案

Drools 的体系结构面向包,而不是单个规则。虽然您可以在加载期间过滤掉规则,但我不建议您这样做。相反,您应该将规则分隔在​​不同的包中,或者使用规则属性(例如已启用或议程过滤器)在逻辑上禁用规则。

话虽如此,您可以直接使用 KnowledgeAgent 或 KnowledgeBuilder 来加载远程包。 Guvnor 对包的 URL 使用标准命名约定。网址将是:

<guvnor-url>/org.drools.guvnor.Guvnor/package/<your_pkg_name>/<version>

因此,例如,如果您的名称包名称是“some.pkg”,并且您已将 guvnor 部署到 jboss AS 7 中的本地实例,则 URL 可以是:

http://localhost:8080/guvnor-5.4.0.Final-jboss-as-7.0/org.drools.guvnor.Guvnor/package/some.pkg/LATEST

使用 KnowledgeBuilder,您可以:

// load package
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newUrlResource( "http://localhost:8080/guvnor-5.4.0.Final-jboss-as-7.0/org.drools.guvnor.Guvnor/package/some.pkg/LATEST" ), 
              ResourceType.PKG );

// create the knowledge base
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();

// add the package to the kbase
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );

上面的代码会将整个包加载到您的知识库中。如果你真的想加载单个规则(不推荐),你可以在添加到 kbase 之前从包中删除其他规则:

for( KnowledgePackage kpkg : kbuilder.getKnowledgePackages() ) {
    // need to clone the rule references for iteration
    Collection<Rule> rules = new ArrayList<Rule>( kpkg.getRules() );
    for( Rule rule : rules ) {
        if( ! RULE_YOU_WANT.equals( rule.getName() ) ) {
            // NOT recommended as you are using internal APIs
            ((KnowledgePackageImp)kpkg).removeRule( rule );
        }
    }
}

希望对您有所帮助。

关于java - 如何在运行时从 Guvnor 加载和执行规则(无更改集 xml 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11057654/

相关文章:

java - AppEngine 数据存储区持久性管理器获取除

java - 为什么 Drools 在使用议程过滤器触发特定规则时验证所有其他规则?

scope - 使用 Drools 声明局部规则变量

java - 下载文件 vaadin

java - 在 Java 中存储简单的小时/分钟信息 - 最佳实践问题

java - 使用Processing 2.0 Java的动画问题

java - 线程安全的布隆过滤器

java - 将 POJO 代码转换为 jar 文件以便在 Drools Guvnor 中上传

java - 如何连接 Hibernate 和 Drools

java - 需要有关 Drools -version 7.X 与 java 11 兼容性的更多信息