使用Drools5 API的Seam Numberguess示例

发布者:    |       Seam

Seam Drools5分支 包含了对Seam与Drools5 API交互的增强。在这里,我将展示如何将现有的numberguess示例修改为使用Drools5

1) components.xml

我们首先定义org.drools.KnowledgeBase并添加一个DRL (.drl)类型的单条规则资源。这种添加资源的新方式允许我们将任何类型的规则资源添加到KnowledgeBase(之前不可能做到),同时也遵循Drools5 API风格(kbuilder.add(ResourceFactory.newClassPathResource("numberguess.drl"), ResourceType.DRL);)

<drools:knowledge-base name="kbase" knowledge-builder-config="kbuilderconfig.properties" knowledge-base-config="kbaseconfig.properties">
    	<drools:rule-resources>
    		<value>classpath;numberguess.drl;DRL</value>
    	</drools:rule-resources>	
    	<drools:event-listeners>
    		<value>org.drools.event.knowledgebase.DefaultKnowledgeBaseEventListener</value>
    	</drools:event-listeners>

 </drools:knowledge-base>

然后我们创建org.drools.runtime.StatefulKnowledgeSession,传入我们的kbase引用

<drools:stateful-knowledge-session name="ksession" knowledge-base="#{kbase}" knowledge-session-config="ksessionconfig.properties"
    audit-log="/home/tsurdilo/Desktop/ksession">
    	<drools:event-listeners>
    		<value>org.drools.event.rule.DebugAgendaEventListener</value>
    		<value>org.drools.event.rule.DebugWorkingMemoryEventListener</value>
    	</drools:event-listeners>
 </drools:stateful-knowledge-session>

页面流定义保持不变

<bpm:jbpm>
        <bpm:pageflow-definitions>
            <value>pageflow.jpdl.xml</value>
        </bpm:pageflow-definitions>
  </bpm:jbpm>

2) pageflow.jpdl.xml

这里我们需要更改处理器,使其能够与org.drools.runtime.StatefulKnowledgeSession一起工作

<handler class="org.jboss.seam.drools.KnowledgeDecisionHandler">

就是这样,numberguess示例仍然按预期工作。需要强调的一个更改是

Drools5 API不再在org.drools.runtime.StatefulKnowledgeSession和org.drools.runtime.StatelessKnowledgeSession上暴露setGlobalResolver方法。这主要是为了让其他API不会滥用此方法。相反,我们现在必须添加一个代理,例如

ksession = knowledgeBase.getValue().newStatefulKnowledgeSession(ksessionconfig, null);
ksession.getGlobals().setDelegate(new SeamDelegate());

接下来,我将展示使用Drools Fusion的示例


返回顶部