【问题标题】:Is db4o Java 8 compatible?db4o Java 8 兼容吗?
【发布时间】:2015-07-15 10:27:19
【问题描述】:

有正在使用 db4o 的辅助项目。它不适用于 JVM 8(反序列化获取 Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field com.xxx.yyy.version to com.db4o.reflect.generic.GenericObject)。

  1. 是否可以为 JVM 8 修复它(是的,我知道 db4o 已死)?
  2. 用什么来代替 db4o 来进行 JVM 版本无关的序列化/反序列化?

【问题讨论】:

    标签: java serialization java-8 deserialization db4o


    【解决方案1】:

    快速回答: Db4o 符合 Java 8。这是休眠代理问题(Javassist 和动态类):(

    2015 年 7 月 20 日更新: 不确定 db4o 在 JVM 8 下是否 100% 正确工作。我们有一个无法解释的奇怪测试用例(见下文)。同时本机 Java 序列化工作正常(但 db4o 不能)。

    完整答案: 如果有人需要详细信息,这个问题会出现在 Hibernate 4.3 中(在以前的版本中,一切都按预期工作)。不幸的是,我没有找到正确的解决方案。快速而肮脏的解决方法是跳过导出到 db4o 的问题字段(通过 transient 关键字)。

    2015 年 7 月 30 日更新:找到了解决方案(问题出现在 Javassist 1.8 中):

    ProxyFactory.nameGenerator = new JavassitBackwardCompatibleNamingGenerator();
    
    public class JavassitBackwardCompatibleNamingGenerator implements UniqueName{
        private static int counter = 0;
        @Override
        public String get(String classname) {
            return classname + "_$$_javassist_" + counter++;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 2015-12-06
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多