如何从java访问规则的结果(RHS)?

时间:2015-02-19 00:46:33

标签: java drools

我有以下结构的规则:

rule "ins b"
when
    A()
then 
    B $b = new B();
    $b.setName("hello");
    insert($b);
end

我想获取规则添加到工作记忆中的对象(及其属性) 我可以使用以下代码获取LHS对象:

RuleImpl ri = (RuleImpl) kSession.getKieBase().getRule("com.sample", "ins b");
System.out.println("L: " + ri.getLhs());
Pattern rce = (Pattern) ri.getLhs().getChildren().get( 0 );
System.out.println("L: " + rce.getConstraints());

但我找不到类似的东西来获得规则的RHS。

我想这样做是因为我试图自动生成查询"基于规则。 从上面的规则我想生成类似的东西:

query howToGetA() 
  @Abductive( target = A.class ) 
  $b := B( name == "hello" ) 
end

提前致谢。

1 个答案:

答案 0 :(得分:0)

你为什么要这样做?您“知道”在编写规则代码时插入的对象。

您可以致电

获取RHS
RuleImpl ri = ...
Consequence cons = ri.getConsequence();

但是,我不认为这会给你“规则添加到工作记忆中的对象(及其属性)”。结果是代码(以某种形式),并且您将无法在该代码中找到对象,因为该对象是在运行时构建的。

此外,RuleImpl(以及接口Consequence及其实现)都是非公共API的一部分,如有更改,恕不另行通知。