将Drools变量读取到Java代码中
我不太会流口水,我想做的是从规则中得到一个值将Drools变量读取到Java代码中,java,drools,Java,Drools,我不太会流口水,我想做的是从规则中得到一个值 Bean bean = new Bean(); StatefulKnowledgeSession ksession = aKnowledgeBase.newStatefulKnowledgeSession(); // planning to insert a double ksession.insert( bean ); ksession.fireAllRules(); 我使用了drools项目示例中的代码: 读取DRL文件: KnowledgeB
Bean bean = new Bean();
StatefulKnowledgeSession ksession = aKnowledgeBase.newStatefulKnowledgeSession();
// planning to insert a double
ksession.insert( bean );
ksession.fireAllRules();
我使用了drools项目示例中的代码:
读取DRL
文件:
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newClassPathResource( "path.drl", getClass() ), ResourceType.DRL );
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if( errors.size() > 0 )
{
for( KnowledgeBuilderError error : errors )
{
System.err.println( error );
}
throw new IllegalArgumentException( "Could not parse knowledge." );
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
return kbase;
插入对象并触发规则
Bean bean = new Bean();
StatefulKnowledgeSession ksession = aKnowledgeBase.newStatefulKnowledgeSession();
// planning to insert a double
ksession.insert( bean );
ksession.fireAllRules();
我想做的是从规则中获取一个值,到目前为止我尝试的是使用query
,我不确定这是否是正确的方法:
global String $test;
rule "Excellent"
when
// I'm planning to replace the bean with just a double is that possible?
$m: bean ( listeningScore > 85 )
$p: bean ( listeningScore < 101 )
then
$test = "Excellent";
System.out.println( $test );
end
query "Knowledge"
$result : $test
end
首先,该异常意味着DRL代码无法编译。我怀疑这是因为您的查询引用了另一个规则中的绑定变量,但它可能是其他的。查看有关查询语法的文档 然而,我倾向于使用两种机制之一来将规则响应引入Java代码
rule "Reject a request"
when
$req: PaymentValidationRequest()
then
$req.setValid(false);
update($req);
end
PaymentValidationRequest request = new PaymentValidationRequest(payment);
request.setPayment(payment);
List<Object> facts = new ArrayList<Object>();
facts.add(request);
ksession.execute(facts);
...
boolean isValid = request.isValid()
List<ValidationAnnotation> annotations = request.getAnnotations();
首先,该异常意味着DRL代码无法编译。我怀疑这是因为您的查询引用了另一个规则中的绑定变量,但它可能是其他的。查看有关查询语法的文档 然而,我倾向于使用两种机制之一来将规则响应引入Java代码
rule "Reject a request"
when
$req: PaymentValidationRequest()
then
$req.setValid(false);
update($req);
end
PaymentValidationRequest request = new PaymentValidationRequest(payment);
request.setPayment(payment);
List<Object> facts = new ArrayList<Object>();
facts.add(request);
ksession.execute(facts);
...
boolean isValid = request.isValid()
List<ValidationAnnotation> annotations = request.getAnnotations();
首先,该异常意味着DRL代码无法编译。我怀疑这是因为您的查询引用了另一个规则中的绑定变量,但它可能是其他的。查看有关查询语法的文档 然而,我倾向于使用两种机制之一来将规则响应引入Java代码
rule "Reject a request"
when
$req: PaymentValidationRequest()
then
$req.setValid(false);
update($req);
end
PaymentValidationRequest request = new PaymentValidationRequest(payment);
request.setPayment(payment);
List<Object> facts = new ArrayList<Object>();
facts.add(request);
ksession.execute(facts);
...
boolean isValid = request.isValid()
List<ValidationAnnotation> annotations = request.getAnnotations();
首先,该异常意味着DRL代码无法编译。我怀疑这是因为您的查询引用了另一个规则中的绑定变量,但它可能是其他的。查看有关查询语法的文档 然而,我倾向于使用两种机制之一来将规则响应引入Java代码
rule "Reject a request"
when
$req: PaymentValidationRequest()
then
$req.setValid(false);
update($req);
end
PaymentValidationRequest request = new PaymentValidationRequest(payment);
request.setPayment(payment);
List<Object> facts = new ArrayList<Object>();
facts.add(request);
ksession.execute(facts);
...
boolean isValid = request.isValid()
List<ValidationAnnotation> annotations = request.getAnnotations();
我只制定了一条规则。只有一个文件。你能告诉我你想说什么吗?我只有一条规则。只有一个文件。你能告诉我你想说什么吗?我只有一条规则。只有一个文件。你能告诉我你想说什么吗?我只有一条规则。只有一个文件。你能说出你想说的话吗?