<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如鵬網(wǎng) 大學生計算機學習社區(qū)

    CowNew開源團隊

    http://www.cownew.com 郵件請聯(lián)系 about521 at 163.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks

    我正在寫一個小東西,用hibernate做數(shù)據(jù)層,用hessian提供的remoting做業(yè)務(wù)層,表現(xiàn)層通過http的方式取得業(yè)務(wù)層的服務(wù),有的地方需要把PO傳遞到表現(xiàn)層(有人不同意把PO和VO重用,但是我的觀點是:大部分實體對象只要vo、po重用就可以了,只有vo、po差距較大的地方才分開,這樣就做到了簡潔性和可擴展性的良好折中)。
    但是在我將一個PO傳遞到表現(xiàn)層的時候出現(xiàn)了下面的問題:
    java.lang.InstantiationException: org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer
    ?at java.lang.Class.newInstance0(Unknown Source)
    ?at java.lang.Class.newInstance(Unknown Source)
    ?at com.caucho.hessian.io.JavaDeserializer.instantiate(JavaDeserializer.java:104)
    ?at com.caucho.hessian.io.JavaDeserializer.readMap(JavaDeserializer.java:54)
    ?at com.caucho.hessian.io.SerializerFactory.readMap(SerializerFactory.java:147)
    ?at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java:781)
    ?at com.caucho.hessian.io.MapDeserializer.readMap(MapDeserializer.java:88)
    ?at com.caucho.hessian.io.SerializerFactory.readMap(SerializerFactory.java:149)
    ?at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java:781)
    ?at com.caucho.hessian.io.JavaDeserializer.readMap(JavaDeserializer.java:69)
    ?at com.caucho.hessian.io.JavaDeserializer.readMap(JavaDeserializer.java:55)
    ?at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java:658)
    ?at com.caucho.hessian.io.HessianInput.readReply(HessianInput.java:241)
    ?at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:179)
    ?at $Proxy2.loadByPK(Unknown Source)
    ?at com.cownew.PIS.demo.client.HelloTest.testDAO(HelloTest.java:85)
    ?at com.cownew.PIS.demo.client.HelloTest.main(HelloTest.java:94)
    java.lang.reflect.UndeclaredThrowableException
    ?at $Proxy2.loadByPK(Unknown Source)
    ?at com.cownew.PIS.demo.client.HelloTest.testDAO(HelloTest.java:85)
    ?at com.cownew.PIS.demo.client.HelloTest.main(HelloTest.java:94)
    Caused by: java.io.IOException: java.lang.InstantiationException: org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer
    ?at com.caucho.hessian.io.JavaDeserializer.readMap(JavaDeserializer.java:60)
    ?at com.caucho.hessian.io.SerializerFactory.readMap(SerializerFactory.java:147)
    ?at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java:781)
    ?at com.caucho.hessian.io.MapDeserializer.readMap(MapDeserializer.java:88)
    ?at com.caucho.hessian.io.SerializerFactory.readMap(SerializerFactory.java:149)
    ?at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java:781)
    ?at com.caucho.hessian.io.JavaDeserializer.readMap(JavaDeserializer.java:69)
    ?at com.caucho.hessian.io.JavaDeserializer.readMap(JavaDeserializer.java:55)
    ?at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java:658)
    ?at com.caucho.hessian.io.HessianInput.readReply(HessianInput.java:241)
    ?at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:179)
    ?... 3 more

    我的這個對象是如下定義的:
    package com.cownew.PIS.demo.common;
    import com.cownew.PIS.framework.common.BaseObjectValue;

    public class MaterialInfo extends BaseObjectValue
    {??
    ?? private String Id;?????
    ?? private String Number;?????
    ?? private PersonInfo Manager;??
    ??
    ?? public void setId(String value)
    ?? {
    ???? this.Id=value;
    ?? }
    ??
    ??
    ?? public void setNumber(String value)
    ?? {
    ???? this.Number=value;
    ?? }
    ??
    ??
    ?? public void setManager(PersonInfo value)
    ?? {
    ???? this.Manager=value;
    ?? }
    ??
    ??
    ?? public String getId()
    ?? {
    ???? return Id;
    ?? }
    ??
    ??
    ?? public String getNumber()
    ?? {
    ???? return Number;
    ?? }
    ??
    ??
    ?? public PersonInfo getManager()
    ?? {
    ???? return Manager;
    ?? }
    ?????
    }
    經(jīng)跟蹤發(fā)現(xiàn)原來是在反序列化getManager的返回值的時候出錯的。hibernate使用CGLIB實現(xiàn)的惰性加載,這樣getManager的返回值的類型其實是PersonInfo 的一個子類,其中有一個CGLIBLazyInitializer類型的字段,這個CGLIBLazyInitializer是沒有默認構(gòu)造函數(shù)的,這樣就造成了反序列化失敗。
    我的解決方式是寫一個DTOAssembler來將PO手動轉(zhuǎn)換成VO,這個VO的類型和PO一樣,但是對于關(guān)聯(lián)屬性進行了針對CGLIB的特別處理。然后把轉(zhuǎn)換后的VO傳遞到表現(xiàn)層。
    請各位多指教。謝謝。

    ?

    posted on 2006-10-06 00:58 CowNew開源團隊 閱讀(2057) 評論(3)  編輯  收藏

    評論

    # re: 使用hessian將Hibernate的PO直接傳遞到表現(xiàn)層的問題 2006-10-09 16:39 rainsoft
    用OpenSessionInView解決  回復  更多評論
      

    # re: 使用hessian將Hibernate的PO直接傳遞到表現(xiàn)層的問題 2006-10-09 20:53 CowNew開源團隊
    謝謝樓上的兄弟,不過您可能沒有仔細看我的文章,我是要把PO通過remoting傳到遠程客戶端的,因此無法使用OpenSessionInView,我已經(jīng)通過我說的那種DTO轉(zhuǎn)化器的方式解決了,稍后將貼出我的代碼。謝謝。  回復  更多評論
      

    # re: 使用hessian將Hibernate的PO直接傳遞到表現(xiàn)層的問題 2006-10-09 20:54 CowNew開源團隊
    稍后也將寫一篇批駁OSIV的文章,:)  回復  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲国产av美女网站| 亚洲精品蜜桃久久久久久| 亚洲日韩乱码久久久久久| 国产一级片免费看| 亚洲精品无码不卡在线播HE| 女人裸身j部免费视频无遮挡| 四虎影视永久免费视频观看| 老子影院午夜伦不卡亚洲| 国产又黄又爽又刺激的免费网址 | 久久久久女教师免费一区| 亚洲一区二区视频在线观看| 日本一区二区三区在线视频观看免费| 亚洲A∨午夜成人片精品网站| 国产精品观看在线亚洲人成网| 免费看国产精品麻豆| 一区免费在线观看| 在线亚洲97se亚洲综合在线| 特级无码毛片免费视频尤物| 亚洲精品国产成人| 成人无遮挡毛片免费看| 精品在线观看免费| 人人狠狠综合久久亚洲88| 99久久精品免费精品国产| 国产成人精品日本亚洲专| 成人国产mv免费视频| a级毛片免费高清视频| 香蕉视频在线观看亚洲| 一二三四免费观看在线视频中文版 | 久久伊人亚洲AV无码网站| 在线涩涩免费观看国产精品| 亚洲系列中文字幕| 国产片免费福利片永久| 国产亚洲免费的视频看| 亚洲偷自拍另类图片二区| 亚洲综合色成在线播放| 131美女爱做免费毛片| 亚洲GV天堂GV无码男同| 亚洲日产无码中文字幕| 99re热免费精品视频观看| 色一情一乱一伦一视频免费看| 亚洲av无码国产精品色午夜字幕|