2013-07-05 2 views
3

Сценарий выглядит следующим образом:Drools: объекты доступа в Drools первенствовать таблицу решений

У меня есть Java Pojo класс Name имеющих 2 переменных type и name с соответствующими добытчиками и сеттерами. Я использую табличные решение Drools и я хочу:

Condition: когда тип установлен в «1»

Action: вызов SetName сеттер класса имя и установить соответствующий параметр из первенствует

Теперь я хотите получить доступ к этому заданному значению имени в 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- Это имеет реализацию Drools !!

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

Смежные вопросы