如何从Guvnor web-app加载特定规则(.drl)?

时间:2011-05-04 08:56:45

标签: drools rule-engine

例如,我在Guvnor中添加了两个规则(rule1.drl和rule2.drl)。

通常我可以通过创建一个changeset.xml来检索这些规则:

<change-set ...>
<add>
<resource source='http://localhost/guvnor/org.drools.guvnor.Guvnor/package/name/LATEST.drl' type='DRL' basicAuthentication="enabled" username="username" password="password"  />
</add>
</change-set>

按代码加载changeset.xml:

KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent("Test Agent", kaconf);
kagent.applyChangeSet(ResourceFactory.newClassPathResource("changeset.xml"));
knowledgeBase = kagent.getKnowledgeBase();

但我如何才能检索特定规则?例如rule2.drl

当然我可以将changeset.xml中的url更改为

<resource source='http://localhost/guvnor/org.drools.guvnor.Guvnor/package/name/LATEST/rule2.drl' type='DRL' basicAuthentication="enabled" username="username" password="password"  />

但是我发现响应文件错过了包名和所有import语句,例如:

package com.packname;
import namespace.EntityA;

3 个答案:

答案 0 :(得分:2)

当我们需要执行特定的drl包时,我们对每个包/快照使用不同的变更集。

如果规则是相关的,则使用不同的pojos来分离规则,因为你知道guvnor从一个大的.drl中的包中编译你的所有规则,如果你有一百个rule-then-end和用不同的pojo实例迭代它。

答案 1 :(得分:1)

包和单个资产的网址格式不同。对于资产(例如DRL),模式是:

<resource source='http://localhost:9090/drools-guvnor/rest/packages/test/assets/MyRule/source' type='DRL' />

答案 2 :(得分:0)

我解决此问题的方法是创建两个不同的包,一个用于rule1.drl,另一个用于rule2.drl。所以我的程序通过两个不同的变更集来读取这两个规则。