2013-07-05 88 views
3

的情况如下:滴料:访问对象在Drools中脱颖而出决策表

我有2个变量typename适当的getter和setter一个Java POJO类Name。我使用的决策表滴料,我想:

Condition:当类型设置为“1”

Action:呼叫的名称类的setName setter和从Excel

设置相应的参数

现在我想要在java中访问这个设定值的名称。

这是事我都做:

Name.java-

public class Name{ 


    String name,type; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

MainClass.java-这有滴料实现!

public class MainClass { 

    public static StatefulKnowledgeSession session; 
    public static KnowledgeBase kbase; 
    public static Name name; 
    public static void main(String args[]) 

{ 
    init(); 
    initialiseNameObject(); 
    fireAllRules(); 
} 

public static void init() 
{ 
    System.out.println("inside init"); 
    KnowledgeBuilder kbuilder=KnowledgeBuilderFactory.newKnowledgeBuilder(); 
    DecisionTableConfiguration dconf=KnowledgeBuilderFactory.newDecisionTableConfiguration(); 

    dconf.setInputType(DecisionTableInputType.XLS); 
    dconf.setWorksheetName("rulesW"); 

    kbuilder.add(ResourceFactory.newClassPathResource("/drools.xls",MainClass.class), ResourceType.DTABLE, dconf); 

    KnowledgeBuilderErrors errors=kbuilder.getErrors(); 

    if(!errors.isEmpty()) 
    { 
     System.out.println("Errors in package"); 
     Iterator i=errors.iterator(); 
     while(i.hasNext()) 
     { 
      System.out.println("The error: "+i.next()); 
     } 
    } 

    kbase=KnowledgeBaseFactory.newKnowledgeBase(); 

    try 
    { 
     kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); 
     session=kbase.newStatefulKnowledgeSession(); 

     name=new Name(); 
    } 
    catch(Exception e) 

    { 
     System.out.println("The exception "+e); 
    } 

} 

public static void initialiseNameObject() 
{ 


    System.out.println("insideNameObject"); 
    name.setType("1"); 


} 

public static void fireAllRules() 
{ 
    System.out.println("inside fire all"); 

    session.fireAllRules(); 

    System.out.println(name.getName()); 

} 

决策表::

http://www.imageurlhost.com/images/tf2m0omib1jkt8wyjra8_Decision.png

的问题是我不能够得到的名字..总是越来越空了点。名称应该在对象中更新,我应该得到ABCD作为输出。我想它必须做一些关于全球实例!

回答

3

你的代码只是没有道理给我。其中一个主要问题是,您所创建的StatefulKnowledgeSession后,你有没有在会议上插入任何对象。在会议中没有任何东西,我怀疑Drool可以做什么。

试着这样做:

name.setType(1); 
session.insert(name); // Important! Drools need the objects to work on 
         // inserted to session 
session.fireAllRules(); 

然后在你的决策表,动作改为namea.setName($param)

我相信它应该这样的变化

+0

我的神啊后工作!那真的很愚蠢!谢谢! :) – Chandeep

+0

U可在20小时内奖励奖金回合) – Chandeep