原创作者: andot   阅读:1115次   评论:0条   更新时间:2011-06-01    
flyaswish 写道
PHPRPC 对Hibernate的lazyLoad支持如何? Hessian貌似对这个支持的不好。


对于 lazyload 有两种方法,一种是跟你使用 Hessian 时一样,关掉这个特性,哈哈,这等于没说

那么我们来说另一种,PHPRPC 对于对象的序列化提供多种可定制性,其中有一种就是它提供了 __sleep 和 __wakeup 这两个魔术方法。通过这两个方法(其实只需要 __sleep 这一个)就可以很好的解决 lazyLoad 问题。那么如何来具体操作呢?

在定义对象类型时,为它增加一个 __sleep 方法,这个方法可以是任意访问级别(private、protected、public 皆可),但是通常,你把它作为 private 或者 protected 的就可以,因为这个方法不会被用来直接调用。

那这个方法做什么呢?这个方法的主要用途就是提供一种在序列化之前可以让你执行一个序列化初始操作的能力,然后返回你要序列化的字段的字段名数组。因此,你应该明白该如何做了吧?对,那就是在这个方法里,将你要传递的字段进行进行载入操作,之后就是返回你要序列化的字段的字段名数组咯。有一点要注意,你返回的这个要序列化的字段的字段名数组应该是固定的,不要有类似于第一次调用返回三个字段,第二次调用返回四个,第三次返回两个这样的情况出现,因为这个结果是会被缓存的。但是这个方法却会在每次通过 PHPRPC 传递这个对象时被执行。

现在好了,你在本地使用这个对象时,你可以仍然享受 lazyload 给你带来的好处,在远程调用时他也不会成为你的麻烦了。
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

  • andot在2009-02-21创建
  • andot在2011-06-01更新
  • 标签: phprpc, hibernate
Global site tag (gtag.js) - Google Analytics