繁体   English   中英

db4o Java 8兼容吗?

[英]Is db4o Java 8 compatible?

具有使用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版本无关的序列化/反序列化?

快速解答: Db4o IS兼容Java8。这是休眠代理问题(Javassist和动态类):(

更新07/20/15: 不确定db4o是否100%在JVM 8下正常工作。我们有一个奇怪的测试用例,无法解释(请参阅下文)。 同时,本机Java序列化可以正常工作(但db4o不能)。

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

15年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++;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM