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

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

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

    posts - 0,  comments - 5,  trackbacks - 0
    Xfire的aegis綁定方式配置小結
    新一篇: XFire傳入傳出自定義類型和集合類型學習筆記

    首先說明,aegis為XFire默認的綁定方式,何時需要綁定?
    當使用JDK1.4時,或者對JDK1.5的范型和注釋不是很熟悉的情況下,當遇到需要映射POJO或配置WebService接口方法返回類型(如集合類型)時,需要進行綁定,此時aegis的綁定為建立.aegis.xml的文件。

    1.當封裝的接口類中,某方法返回集合類型時,aegis的綁定方式:
    例如,需要將以下接口封裝


    代碼
    public interface UserInfo {?
    ?
    ? ? public User findUserInfosByUserID(String userUniqueID);?
    ? ? public String test();?
    ? ? public Collection findRoleInfosByUserID(String userUniqueID);?
    ? ? }?
    ?


    觀察此接口,受限我們看findRoleInfosByUserID方法,此方法傳入String,返回類型為Collection,此時,我們即需要配置findRoleInfosByUserID方法。
    配置步驟,在接口類的同一包下建立和接口名相同的aegis.xml文件,即UserInfo.aegis.xml文件。
    UserInfo.aegis.xml

    代碼
    <?xml version="1.0" encoding="UTF-8"?>?
    <mappings>?
    ? ? <mapping>?
    ? ? ? ? <method name="findRoleInfosByUserID">?
    ? ? ? ? ? ? <return-type?
    ? ? ? ? ? ? ? ? componentType="com.tongtech.bjvsp.sysmng.entity.Role" />?
    ? ? ? ? </method>?
    ? ? </mapping>?
    </mappings>?
    ?


    其中,method代表需要配置的方法名,由于XFire可以支持基本類型,針對集合類型時,需要配置,返回類型或參數類型為基本類型時不需要特殊配置。
    <return-type/>為配置返回類型,componentType屬性代表返回的集合中所包含的類,此類可以是自定義的對象,也可以是基本類型,例如java.lang.String
    此時,findRoleInfosByUserID方法配置完畢

    PS,還拿此接口舉例,如接口中,findRoleInfosByUserID接受的參數也為集合類型,那么需要在 <method> </method>之間再加入以下代碼


    代碼
    <parameter index="0" componentType="java.lang.String"/>?


    index="0"代表方法的參數的序號,0即第一個參數。
    componentType代表集合參數內包含的類型,也可以為自定義對象,例如User
    注意,如果findRoleInfosByUserID方法有兩個參數,一個比如為String,一個為集合,那么只需要配置集合參數即可。

    二。映射POJO
    比如還是上面的UserInfo接口,第一個方法
    public User findUserInfosByUserID(String userUniqueID);
    此時,返回類型為User
    如果User中僅為基本類型,例如String,int等基本類型,無需配置User

    但如果User中還包含有其他類型,比如包含有Set,List,那么需要對其進行配置
    比如User代碼如下:


    代碼
    public class User? implements java.io.Serializable {?
    ?
    ? ? // Fields? ? ?
    ?
    ? ? private Integer userId;?
    ? ? private String loginName;?
    ? ? private String userPassword;?
    ? ? private Integer SOrder;?
    ? ? private String userCa;?
    ? ? private String userName;?
    ? ? private String userTel;?
    ? ? private String userEmail;?
    ? ? private String ZNote;?
    ? ? private String userCode;?
    ? ? private DicSystemAuth SDicSystemAuth;?
    ? ? private Set SGroupUsers = new HashSet(0);?
    ? ? private Set SUserDepts = new HashSet(0);?
    }?


    此時User中還包含有SDicSystemAuth的對象,以及SUserDepts等Set集合
    這種情況主要可能會出現在使用Hibernate,映射一對一,一對多表時
    這里要特別注意
    那么此時我們需要對User進行aegis綁定,控制POJO和XML的映射
    配置方法:
    在User對象所在包內建立User.aegis.xml
    由于User中包含Set,那么只需要對集合做設置即可,DicSystemAuth下面單獨討論

    我們可以分兩次來配置,分別講解
    1,


    代碼
    <?xml version="1.0" encoding="UTF-8"?>?
    <mappings xmlns:my="http://my.bjvsp.tongtech.com">?
    <mapping name="my:User">?
    <property name="SGroupUsers" componentType="com.tongtech.bjvsp.sysmng.entity.GroupUser"/>?
    <property name="SUserDepts" componentType="com.tongtech.bjvsp.sysmng.entity.UserDept"/>?
    </mapping>?
    </mappings>?


    此時,配置文件中配置了兩個Set集合,componentType明確定義了Set集合內包含的內容
    此時,DicSystemAuth即便是自定義的對象類,由于不是集合,XFire也可以對其正確映射。

    2


    代碼
    <?xml version="1.0" encoding="UTF-8"?>?
    <mappings xmlns:my="http://my.bjvsp.tongtech.com">?
    <mapping name="my:User">?
    ?
    <property name="SGroupUsers" ignore="true"/>?
    <property name="SUserDepts" ignore="true"/>?
    <property name="SDicSystemAuth" ignore="true"/>?
    </mapping>?
    </mappings>?


    第二種方式,定義了三個字段,并使用了ignore屬性,表示這三個屬性不能被序列化。
    那么,何時會遇到類似于User中Set集合,不被序列化呢?

    當客戶端訪問本地代理時,如果User表內包含有其他表的關聯時,如果基于hibernate的持久層,由于hibernate的惰性加載機制,加載User時僅會將User中的屬性值加載而不會加載關聯表中的值,比如set和SDicSystemAuth對象等,當客戶端訪問本地代理,序列化User對象時,如果沒有設置關聯字段是否序列化,那么它會將其全部序列化,但當序列化時,由于hibernate的惰性加載,此時Session已經關閉,那么在序列化關聯字段的時候,就會出現session was close的異常。因此解決辦法是在aegis綁定時制定關聯字段的ignore屬性設置為true。

    還有一種解決辦法,就是仍然按照第一種配置方式,明確指明關聯的Set集合內的對象,但在執行序列化前,session關閉之前,提前將關聯字段內的值初始化。
    用Hibernate.initialize初始化

    最后補充一小句
    XFire對于自定義的對象可以聰明的找到,前提是它不包含集合
    例如你的方法返回一個User對象
    User中都是基本類型,或者User中包含有Dept對象的引用,都沒有問題。
    但如果你不希望加載user時序列化Dept出問題,就乖乖把dept初始化或將dept的ignore屬性設置為true
    posted on 2008-06-22 20:06 crazy 閱讀(875) 評論(2)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 日本牲交大片免费观看| 曰韩亚洲av人人夜夜澡人人爽| 欧洲一级毛片免费| 亚洲无线观看国产精品| 国产黄在线播放免费观看| 亚洲国产高清精品线久久| 成人在线免费视频| 国产亚洲精品拍拍拍拍拍 | 亚洲国产成人va在线观看网址| 91精品全国免费观看含羞草| 久久久久亚洲Av片无码v | 免费毛片a在线观看67194| 亚洲国产成人99精品激情在线| 久久精品女人天堂AV免费观看| 亚洲一区二区无码偷拍| 国产精品成人免费综合| 日韩在线一区二区三区免费视频 | 亚洲一级片免费看| 亚洲va久久久噜噜噜久久男同 | 亚洲国产成人精品久久| 成人超污免费网站在线看| 亚洲AⅤ男人的天堂在线观看| 亚洲天堂免费在线视频| 永久免费AV无码网站国产 | 国产成人高清亚洲一区久久| 久久亚洲2019中文字幕| 99re在线这里只有精品免费| 亚洲综合小说另类图片动图 | 亚洲一区二区影院| 午夜免费福利在线| 日韩精品无码免费专区午夜不卡 | 在线91精品亚洲网站精品成人| 久久亚洲色一区二区三区| 99re在线视频免费观看| 校园亚洲春色另类小说合集| 亚洲精品乱码久久久久久| 久久免费看黄a级毛片| 色偷偷亚洲男人天堂| 亚洲av永久无码制服河南实里| 无码日韩精品一区二区免费| www一区二区www免费|