gpt4 book ai didi

java - Drools:无法反序列化知识库

转载 作者:行者123 更新时间:2023-12-01 06:03:28 24 4
gpt4 key购买 nike

我们正在使用 Drools 7.5.0 和 Java8。

我们有一个处理传感器事件的服务器应用程序,有大约 1200 个 session 。每个 session 都是参数化的知识。当我们重新启动服务器时,我们必须恢复所有 session ,这并不像我们希望看到的那么快。因此尝试通过从数据库加载序列化知识库来优化恢复过程。

我们使用以下代码来序列化和反序列化知识库:

public static byte[] serializeKieBase(KieBase kieBase) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new DroolsObjectOutputStream(baos);
oos.writeObject(kieBase);
oos.close();

return baos.toByteArray();
}

public static KieBase deserializeKieBase(byte[] serializedBase) throws IOException, ClassNotFoundException {
ByteArrayInputStream is = new ByteArrayInputStream(serializedBase);
ObjectInputStream ois = new DroolsObjectInputStream(is);

return (KieBase) ois.readObject();
}

事件是不可变的并且具有最终字段。当我们恢复 session 时,我们得到以下异常:

java.lang.RuntimeException: Unknown extractor for com.easierlife.rs.model.Measurement-location

在这行代码中抛出:https://github.com/kiegroup/drools/blob/master/drools-core/src/main/java/org/drools/core/common/DroolsObjectInputStream.java#L150

什么令人困惑......

  1. 我们确实在规则中使用了 setter 等,它们运行良好,除了这个问题。
  2. 我们编写了测试来检查事件是否可序列化和反序列化,并且运行良好。
  3. 当我们为该字段添加 setter 时,它工作正常,但我们不明白为什么。

最佳答案

您是否在 drools 语法中使用了 getter 方法(getLocation)?如果是这样,drools 使用方法访问器序列化和反序列化字段访问器

如果你将 drools 更改为直接使用位置字段,它应该可以工作

关于java - Drools:无法反序列化知识库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51480307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com