2014-01-06 2 views
1

Мне нужно получить доступ к текущей информации о запуске двигателя drools в моем веб-приложении java.

Вещи, которые мне нужны:Информация о drools runtime

Какие активные правила выполняются во время выполнения?
Сколько объектов вставляется в сеанс до сих пор?

Существуют ли классы, позволяющие вам получить доступ к информации о времени запуска слюни?

Заранее спасибо

ответ

4

Вам просто нужно изучить KnowledgeBASE и StatefulKnowledgeSession классы. Следующие методы демонстрируют, как получить все правила в вашей базе знаний и все факты в рабочей памяти.

/** 
* Get a String showing all packages and rules in a knowledge base. 
*/ 
public String kbString(KnowledgeBase kbase) { 
    StringBuilder sb = new StringBuilder(); 
    for (KnowledgePackage p : kbase.getKnowledgePackages()) { 
     sb.append("\n Package : " + p.getName()); 
     for (Rule r : p.getRules()) { 
      sb.append("\n Rule: " + r.getName()); 
     } 
    } 
    return "Knowledge base built with packages: " + sb.toString(); 
} 

/** 
* Get a String showing the facts currently in working memory, 
* and their details. 
* 
* @param session The session to search for facts. 
*/ 
public String sessionFactsString(StatefulKnowledgeSession session) { 
    StringBuilder sb = new StringBuilder(); 
    sb.append("\nThe following facts are currently in the system..."); 
    for (Object fact : session.getObjects()) { 
     sb.append("\n\nFact: " + DroolsUtil.objectDetails(fact)); 
    } 
    return sb.toString(); 
} 

Редактировать для ясности - The (Object) метод objectDetails выше метод для визуализации любого старого Java Bean в виде строки, используя Apache Commons BeanUtils. Это выглядит следующим образом:

public static String objectDetails(Object o) { 
    StringBuilder sb = new StringBuilder(o.getClass().getSimpleName()); 

    try { 
     @SuppressWarnings("unchecked") 
     Map<String, Object> objectProperties = BeanUtils.describe(o); 
     for (String k : objectProperties.keySet()) { 
      sb.append(", " + k + "=\"" + objectProperties.get(k) + "\""); 
     } 
    } catch (IllegalAccessException e) { 
     return "IllegalAccessException attempting to parse object."; 
    } catch (InvocationTargetException e) { 
     return "InvocationTargetException attempting to parse object."; 
    } catch (NoSuchMethodException e) { 
     return "NoSuchMethodException attempting to parse object."; 
    } 

    return sb.toString(); 
} 
1

Для целей отладки вы можете добавить эти слушатель к KnowledgeSession

Drools имеет модель событий, которая выставляет много Что происходит внутри, два отладочных по умолчанию слушателей поставляются DebugAgendaEventListener и DebugWorkingMemoryEventListener, которые распечатывают информацию об отладке событий в консоли err, добавив слушателей к сеансу тривиально и показано ниже. WorkMemoryFileLogger обеспечивает аудит выполнения, который можно просмотреть в графическом средстве просмотра; Это на самом деле специализированная реализация, построенная на повестке дня, и рабочих прослушивателей памяти, когда двигатель завершил выполнение logger.writeToDisk().

ksession.addEventListener(new DebugAgendaEventListener()); // add 2 debug event listeners 
    ksession.addEventListener(new DebugWorkingMemoryEventListener());  
// setup the audit logging 

    WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger(session); 
    logger.setFileName("log/helloworld");