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

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

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

    OSGi應用于企業應用Step by step之持久篇

    在企業應用中,持久化無疑是其中非常重要的一環,盡管OSGi的規范中也有負責持久數據、屬性的服務規范,但對于企業應用而言那些顯然是不夠的,這里就以目前Java界流行的Hibernate為例來看看如何集成Hibernate到OSGi中,使得我們能夠很簡單在OSGi中使用Hibernate進行持久化。
    首先來看看在傳統的Java應用中,是如何使用Hibernate的,在不使用類似spring ORM Template這些封裝了Hibernate東西的情況下,通常都是對外提供一個公共的封裝了通用操作的Dao類,方便其他的Dao或者Service直接使用,在集成到OSGi中仍然希望是如此,那么這步怎么做呢?
    非常的簡單,在Eclipse中新建一個Plugin Project,然后把Hibernate所需要的lib放入project的lib中,將在傳統Java應用中的象HibernateUtil、CommonDao這些類直接copy到當前project中,CommonDao是需要暴露給其他的Plugin project使用的,這里就需要將CommonDao的package加入到Project的export-package描述中了,接下來就是基于DS的方式對外提供CommonDao服務。
    通過上面這樣的方法就已經可以在基于OSGi的應用中使用CommonDao來完成持久化層的操作了,但這時會發現有個問題,在HibernateUtil這樣的提供session管理的類中通常需要指定hibernatecfg.xml的位置,那么按照上面的做法自然是只能在上面的plugin project中放置這個文件了,在這個文件中配置了需要加載的po的映射文件,這樣呢,就使得目前基于OSGi的應用需要將系統中所有的持久PO都放入這個Project中,而不是放入各自獨立的Plugin Project中,而Dao則可以放到各自獨立的Plugin Project中去,基于這樣的方法,就構成了在基于OSGi的應用中通常是如下的方式:
    Hibernate Bundle.png
    還有一個方法就是每個Plugin Project維護自己的hibernate.cfg.xml,這樣各自的po也就可以放在各自獨立的Plugin project中,但這樣的方法帶來的問題就是各個Plugin project都會產生一個Hibernate SessionFactory,而且當系統的持久模型較為復雜的時候就更麻煩了,一個PO需要存在在幾個Plugin Project中的時候,那樣就會出現session中數據不一致的現象,所以暫時不去采用這種方法。
    當然,相信將來會有更好的方式,需要解決的主要是統一加載各plugin project中的映射文件、PO的加載,在目前的情況下,要形成一個對外封閉的通用Hibernate Plugin Project還是很麻煩的,這種現象在集成MVC框架等等的時候都是會碰到的,這也反應了傳統的開源框架在對于這種真正模塊化的方式上的支撐仍然是非常不夠的,傳統的開源框架更多的停留于概念上的模塊化。

    posted on 2006-09-26 00:32 BlueDavy 閱讀(4511) 評論(12)  編輯  收藏 所屬分類: OSGi、SOA、SCA

    評論

    # re: OSGi應用于企業應用Step by step之持久篇 2006-09-26 08:29 壞男孩

    頂一下,有沒有小例子!寫文檔的時候用畫圖的方式很好  回復  更多評論   

    # re: OSGi應用于企業應用Step by step之持久篇 2006-09-26 09:18 螞蚱

    我覺得將所有PO和影射文件放入一個bundle有些不妥。而應該使用類似于Http Service的設計思路,將影射文件或hibernatecfg.xml注冊到一個統一的Hibernate Service 中,但我還沒有細想,如果有時間我會仔細考慮一下,寫個blog與大家共享。  回復  更多評論   

    # re: OSGi應用于企業應用Step by step之持久篇 2006-09-26 14:26 BlueDavy

    @螞蚱
    如果只是hibernate.cfg.xml的問題就好辦了,你有沒有考慮如果po放在各自bundle的時候那怎么去加載那些po呢,固然,不要忘了在OSGi中bundle中的類是獨立加載的,這個和傳統模式是完全不一樣的。
    不過你說的用統一的Hibernate Service的方法確實是可以的,不過要基于Hibernate做出一些改動,特別是在加載po class以及映射文件方面。
    其實對于采用分層開發的團隊來講這不是問題。  回復  更多評論   

    # re: OSGi應用于企業應用Step by step之持久篇 2006-09-27 20:38 deardream

    不知道OSGI能否處理Hibernate中一個很麻煩的問題:動態屬性變化?

    運行期給某個PO類添加一個property,級聯的在某表中增加一個字段。。。

    以前似乎是比較麻煩,除非自己弄個classLoader,現在通過OSGI是否能解決這個問題?  回復  更多評論   

    # re: OSGi應用于企業應用Step by step之持久篇 2006-09-27 20:43 BlueDavy

    @deardream
    ...這個和是否使用OSGi沒關系,是Hibernate本身的問題...
    當然,我們可以在OSGi+Hibernate的基礎上做個擴展來支持這樣的動態性。  回復  更多評論   

    # re: OSGi應用于企業應用Step by step之持久篇 2006-09-28 11:43 deardream

    這確實是Hibernate的問題,Hibernate也給出了Dynamic Model來解決這個問題,但是Dynamic Model就破壞了面向對象的很多優勢(聚合、繼承),而如果用靜態對象的手段,又面向動態屬性變化的問題。

    我期望的是依賴OSGI來解決運行期對象動態改變和加載的問題。  回復  更多評論   

    # re: OSGi應用于企業應用Step by step之持久篇 2006-09-28 12:30 BlueDavy

    @deardream
    嗯,沒錯,可以基于OSGi的思想做個Hibernate的擴展..
      回復  更多評論   

    # re: OSGi應用于企業應用Step by step之持久篇 2006-09-28 13:06 guitarpoet

    OSGI的環境就是一個非常經典的SOA環境,把思路限制在O/R Mapping身上就錯了。

    完全可以采用別的方式,我舉兩個:

    1、采用ActiveRecord模式,中間需要一個從Domain Object到Active Record的數據遷移。
    2、采用AOP的模式,在持久化操作時給Domain Object mixin持久化操作。

    有趣的是OSGI只知道你是Service,根本不會管你到底是什么。那么,就可以讓腳本語言出馬啦。

    如果再結合Annotation,可以實現腳本動態交織,能達到的效果是不可想象的。更有趣的是,這樣在理論上并不會比Hibernate的動態解析HQL然后生成SQL效率低。而且,我個人覺得用MixIn的方式更面向對象。

    我現在就有這樣作的打算,我的初步想法是通過JRuby和OSGI把ActiveRecord這種模式以Service的方式實現,有想法的話可以跟我討論。
    Mail: guitarpoet@gmail.com  回復  更多評論   

    # re: OSGi應用于企業應用Step by step之持久篇 2006-09-28 13:38 螞蚱

    @BlueDavy

    我想過這個問題,但是Httpservice中注冊的Servlet不也是在其他bundle中嗎。是否因為Httpservice是系統服務,所以他可以調用其他bundle中的servlet和相關類。由于是從你的系列文章中學的osgi,研究不深,還請多多指教。  回復  更多評論   

    # re: OSGi應用于企業應用Step by step之持久篇 2006-09-28 16:09 BlueDavy

    @guitarpoet
    ...我沒有說僅限于O/R Mapping,只是以Hibernate來舉個例子而已....
    每個公司都有其穩定的一種持久的方案,總不能強制別人用Hibernate的就一定要用你的方案呀...

    @螞蚱
    ...HttpService的處理機制不同,因為在注冊servlet時是直接把servlet實例給注冊過去的,而在Hibernate那邊則不能這樣...  回復  更多評論   

    # re: OSGi應用于企業應用Step by step之持久篇 2006-11-08 15:46 生與夏花

    如果借用Equniox的強大的擴展點機制是不是可以容易點。
    1 。修改hibernate的配置文件加載機制,讓他從registry中動態的加載配置.
    2 。修改hiberante的hibernate.cfg.xml配置文件加載機制讓他可以從Config Admin中存取做到動態的配置。
    3 。修改equniox的classLoader加載機制,讓他可以從client端的bundler中加載類或者文件。這個可以參考spring-osgi中的classLoader加載機制。
    4 。這樣就可以以模塊化的方法進行設計hibernate,每個domain對象和對應的映射文件都可以放在獨立的bundler中,把這個bundler作為第一部中hibernate的Extension points加以配置。
    注:如果不想利用equniox的擴展點機制,可以使用 “BlueDavy ”在他blog中提到的可以自己實現一個擴展點模型的實現。
    這個實現如果是jboss的事項者來做應該是很簡單的,如果是個人拿就得研究一下hibernate的原代碼了,但是也不用全研究制止配置部分。

      回復  更多評論   

    # re: OSGi應用于企業應用Step by step之持久篇 2006-11-08 17:23 BlueDavy

    @生與夏花
    嗯,沒錯,做法確實差不多是這樣..
    不過既然現在spring & osgi要出來了,可以看看是不是可以直接用
      回復  更多評論   

    公告

     









    feedsky
    抓蝦
    google reader
    鮮果

    導航

    <2006年9月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    統計

    隨筆分類

    隨筆檔案

    文章檔案

    Blogger's

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 在线电影你懂的亚洲| 亚洲AV第一页国产精品| 亚洲中文字幕无码爆乳app| 亚洲一级毛片免费观看| 麻豆亚洲av熟女国产一区二| 无码日韩精品一区二区三区免费| 亚洲精品中文字幕乱码三区| 两性色午夜视频免费播放| 亚洲色婷婷一区二区三区| 国产日韩AV免费无码一区二区| 亚洲熟妇无码AV在线播放| 永久免费av无码入口国语片| 亚洲国产天堂久久综合网站| 97在线视频免费| 亚洲免费一级视频| 好吊妞在线成人免费| 在线观看亚洲免费| 337p日本欧洲亚洲大胆裸体艺术| 在线看片免费人成视频福利| 亚洲韩国—中文字幕| 在线观看免费人成视频| 国内成人精品亚洲日本语音| 亚洲七七久久精品中文国产| 十八禁视频在线观看免费无码无遮挡骂过| 久久久青草青青亚洲国产免观| 久久免费福利视频| 久久亚洲国产成人影院| 国产区卡一卡二卡三乱码免费| 久久久精品视频免费观看| 亚洲美女中文字幕| 日本不卡视频免费| 中文字幕免费在线看| 亚洲成aⅴ人在线观看| 免费播放特黄特色毛片| 丝袜捆绑调教视频免费区| 亚洲综合久久成人69| 亚洲激情在线视频| 丁香花免费高清视频完整版 | 亚洲第一页中文字幕| 免费的一级片网站| 国产免费无码一区二区|