【发布时间】:2010-04-18 07:29:01
【问题描述】:
我对生成的代理类对象(CGLib 增强的 POJO)如何传输到远程客户端并仍然保留其生成 Lazy Init 的能力缺乏了解。例外。
这是否意味着存在某种契约,某种类(代理)的所有传输对象都将再次实例化为代理?客户端从哪里获得这些生成的类?对不起,我完全不明白。
【问题讨论】:
标签: java hibernate proxy aop cglib
我对生成的代理类对象(CGLib 增强的 POJO)如何传输到远程客户端并仍然保留其生成 Lazy Init 的能力缺乏了解。例外。
这是否意味着存在某种契约,某种类(代理)的所有传输对象都将再次实例化为代理?客户端从哪里获得这些生成的类?对不起,我完全不明白。
【问题讨论】:
标签: java hibernate proxy aop cglib
因为您的远程客户端应用程序现在依赖于 Hibernate。如果您的远程客户端在类路径上没有 Hibernate,您将获得 NoClassDefFoundError。这表明了 Hibernate 的抽象是多么的泄漏。
基本上,不要通过网络传递对象 - 传递消息(如果您愿意,可以使用这些消息创建对象)。
【讨论】:
readResolve() 和 writeReplace() 方法用法。但是我仍然无法想象传输的(通过 writeReplace() 又名“原始”)实体如何被恢复为新生成的 CGLib 代理(通过 ReadResolve())——这基本上是一个问题,因为 Hibernate(客户端)如何同步类生成不复制代理类。也许我对java反射的了解太弱了..
代理未初始化。当他们被转移时,他们失去了他们最初关联的Session。因此,当尝试在远程端初始化它们时,它在逻辑上会失败。
您可以在发送之前完全初始化它们,使用Hibernate.initialize(aProxy)
更多信息请查看this answer。
【讨论】: