我需要在我的 java 网络应用程序中访问运行 drools 引擎的运行时信息。
我需要知道的事情:
在任何时刻,运行时的 Activity 规则是什么?
到目前为止,有多少对象被插入到 session 中?
是否有一些类可以让您访问 drools 运行时的信息?
提前致谢
最佳答案
您只需检查 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();
}
为清楚起见进行编辑 - 上面的 objectDetails(Object) 方法是一种使用 Apache Commons BeanUtils 将任何旧 Java bean 呈现为字符串的方法。它看起来像这样:
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();
}
关于java - 有关 drools 运行时的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20949134/