【问题标题】:Drool takes the updated ruleDrool 采用更新后的规则
【发布时间】:2015-02-05 03:49:29
【问题描述】:

我想将业务逻辑与 Web 应用程序(spring MVC + Hibernate)分开,以提高可维护性,并且我不想重新启动服务器以更改业务逻辑。如果我为业务变化修改 DRL 文件,Drool 引擎会选择最新的 DRL 吗?

我做了一个测试应用程序,但更新的 DRL 文件没有加载到“知识库”中。有什么方法可以在 Drools 引擎中加载更新的 DRL/规则而无需重启服务器?

Account.java

public class Account {
private Integer balance;
   // setter & getter
}

并且测试程序有

    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    kbuilder.add(ResourceFactory.newClassPathResource("myrule.drl"), ResourceType.DRL);
    KnowledgeBase kbase = kbuilder.newKnowledgeBase();

    StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
    Account account = new Account(1000);
    account.withdraw(500);
    ksession.execute(account);

而 DRL 是

rule "belowLimit" when $account : Account( balance < 700 ) then System.out.println("Notify user"); end

【问题讨论】:

    标签: spring drools drools-guvnor


    【解决方案1】:

    您必须使用KieScanner 来实现这一点。这是文档中的引述:

    KieScanner 允许持续监控您的 Maven 存储库 检查是否安装了 Kie 项目的新版本。一种 新版本部署在包装该项目的 KieContainer 中。这 使用 KieScanner 需要 kie-ci.jar 在类路径中。

    KieServices kieServices = KieServices.Factory.get();
    ReleaseId releaseId = kieServices.newReleaseId( "org.acme", "myartifact", "LATEST" );
    KieContainer kContainer = kieServices.newKieContainer( releaseId );
    KieScanner kScanner = kieServices.newKieScanner( kContainer );
    
    // Start the KieScanner polling the Maven repository every 10 seconds
    kScanner.start( 10000L );
    

    您也可以使用ks.scanNow()

    记住在构建项目时检查增量版本,因为 drools 将检查该工件的任何新版本是否存在。如果是,那么它只会在运行时交换。

    【讨论】:

      【解决方案2】:

      6.x 现在让这变得简单多了。它基于 Maven 版本控制。 KieContainer(包含运行时位)可以重新启动任何版本的 jar。然后,您也可以使用 updateToVersion 方法将其更新为任何版本的 jar。最后,kie-ci 使用 maven 版本更新标准为自动更新和来自外部 maven 存储库的解决方案提供嵌入式 maven 支持。 http://docs.jboss.org/drools/release/6.0.0.Final/drools-docs/html/KIEChapter.html#BuildDeployUtilizeAndRunSection

      【讨论】:

        【解决方案3】:

        Drools 5.x 版本(显然您正在使用)具有更改集,这些更改集定义了要监视更改的目录或文件,以便自动重建知识库,此后开始的会话可能会反映新的知识库。

        可以在文档中找到详细信息,请参阅“使用变更集配置知识库”部分及其后续版本。实在是太多了,在这里重复一遍。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-12
          • 2011-05-21
          • 1970-01-01
          相关资源
          最近更新 更多