【问题标题】:Hibernate proxy serialization and receive on client side休眠代理序列化并在客户端接收
【发布时间】:2010-04-18 07:29:01
【问题描述】:

我对生成的代理类对象(CGLib 增强的 POJO)如何传输到远程客户端并仍然保留其生成 Lazy Init 的能力缺乏了解。例外。

这是否意味着存在某种契约,某种类(代理)的所有传输对象都将再次实例化为代理?客户端从哪里获得这些生成的类?对不起,我完全不明白。

【问题讨论】:

    标签: java hibernate proxy aop cglib


    【解决方案1】:

    因为您的远程客户端应用程序现在依赖于 Hibernate。如果您的远程客户端在类路径上没有 Hibernate,您将获得 NoClassDefFoundError。这表明了 Hibernate 的抽象是多么的泄漏。

    基本上,不要通过网络传递对象 - 传递消息(如果您愿意,可以使用这些消息创建对象)。

    【讨论】:

    • 我对使用 Hibernate 抽象或任何​​其他问题没有任何问题。我只是想了解hibernate如何能够在客户端坚持这种AOP-ish行为。我已经阅读了 Hibernate 中的 readResolve()writeReplace() 方法用法。但是我仍然无法想象传输的(通过 writeReplace() 又名“原始”)实体如何被恢复为新生成的 CGLib 代理(通过 ReadResolve())——这基本上是一个问题,因为 Hibernate(客户端)如何同步类生成不复制代理类。也许我对java反射的了解太弱了..
    【解决方案2】:

    代理未初始化。当他们被转移时,他们失去了他们最初关联的Session。因此,当尝试在远程端初始化它们时,它在逻辑上会失败。

    您可以在发送之前完全初始化它们,使用Hibernate.initialize(aProxy)

    更多信息请查看this answer

    【讨论】:

    • 是的,代理是空的。但是 java 运行时如何知道代理的类名/版本?为什么这些方面在客户端仍然有效?那是某种远程代码吗??
    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2017-01-28
    • 2013-03-01
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多