java - 有关 drools 运行时的信息

标签 java drools rule-engine

我需要在我的 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/

相关文章:

java - 有没有办法从 Java 中的键盘获取所有键?

java - 与 GPS 设备通信时实现规则检查的最佳方式

email - 设备(事物)与 AWS IoT 断开连接时发送邮件的规则

java - 在 drools 中传递参数

java - 无法确定关系属性的目标实体

java - java 套接字(服务器)和 C++ 套接字(客户端)之间的网络通信

java - Spring AOP : aspect @Around doesn't work

java - 如何在Drools中匹配成员对象?

java - 使用 "not"根据类类型在条件下进行变量声明

database - 存储逻辑规则的适当数据结构和数据库模式是什么?