例如,我在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;
答案 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。所以我的程序通过两个不同的变更集来读取这两个规则。