您的位置:首页 > 其它

exception handler in drools rule

2014-05-30 11:36 585 查看
As I know, we have 2 ways to handle exception in drools rule:

1.  try-catch in rule file(.drl) consequence:

 e.g.

rule "r1"

when
//conditions
then
try{
//do something...
}catch(Exception e){

//exception handler
}

end

2. create your own exception handler class implement  ConsequenceExceptionHandler, register it to knowledgebase

e.g:

public StatefulKnowledgeSession getSession() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();

kbuilder.add(ResourceFactory.newClassPathResource(fileName,
TestListObjOnlyRunOnce.class), ResourceType.DRL);

if (kbuilder.hasErrors()) {
System.out.println("规则错误:");
Iterator<KnowledgeBuilderError> it = kbuilder.getErrors()
.iterator();
while (it.hasNext())
System.out.println(it.next());
return null;
}
KnowledgeBaseConfiguration kBaseConfig =
           KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
       @SuppressWarnings("unchecked")
       Class ehClass = MyConsequenceExceptionHandler.class;
       ConsequenceExceptionHandlerOption cehOption = ConsequenceExceptionHandlerOption.get( ehClass );
       kBaseConfig.setOption( cehOption );
       
       KnowledgeBase kb = KnowledgeBaseFactory.newKnowledgeBase(kBaseConfig);
kb.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kb.newStatefulKnowledgeSession();
}

-----exception handler class---

package com.test.DroolsRuleTests;

import java.io.Externalizable;

import java.io.IOException;

import java.io.ObjectInput;

import java.io.ObjectOutput;

import org.drools.runtime.rule.Activation;

import org.drools.runtime.rule.ConsequenceExceptionHandler;

import org.drools.runtime.rule.WorkingMemory;

public class MyConsequenceExceptionHandler implements ConsequenceExceptionHandler, Externalizable {

    public void readExternal( ObjectInput in ) throws IOException, ClassNotFoundException {}

    public void writeExternal( ObjectOutput out ) throws IOException {}

    public void handleException( Activation activation,

                                 WorkingMemory workingMemory,

                                 Exception exception ){

// exception handler logic here

    System.err.println("excpeiton occured when execute rule: " + activation.getRule().getName());

    XXX  xxx =(XXX) workingMemory.getObject(activation.getPropagationContext().getFactHandle());

    exception.printStackTrace();

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  drools rule engine
相关文章推荐