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

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

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

    OSGi應用于企業(yè)應用Step by step之持久篇

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

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

    評論

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

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

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

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

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

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

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

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

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

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

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

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

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

    這確實是Hibernate的問題,Hibernate也給出了Dynamic Model來解決這個問題,但是Dynamic Model就破壞了面向?qū)ο蟮暮芏鄡?yōu)勢(聚合、繼承),而如果用靜態(tài)對象的手段,又面向動態(tài)屬性變化的問題。

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

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

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

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

    OSGI的環(huán)境就是一個非常經(jīng)典的SOA環(huán)境,把思路限制在O/R Mapping身上就錯了。

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

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

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

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

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

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

    @BlueDavy

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

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

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

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

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

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

      回復  更多評論   

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

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

    公告

     









    feedsky
    抓蝦
    google reader
    鮮果

    導航

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

    統(tǒng)計

    隨筆分類

    隨筆檔案

    文章檔案

    Blogger's

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 三上悠亚电影全集免费| 久久久综合亚洲色一区二区三区 | 久草免费在线观看视频| 亚洲日韩在线观看免费视频| 国产成人亚洲合集青青草原精品| 国产午夜成人免费看片无遮挡| 国产成人综合久久精品免费| 久久亚洲精品无码av| 成人免费无码大片A毛片抽搐| 亚洲人成色777777精品| 日本高清免费中文字幕不卡| 亚洲乱码中文字幕在线| 免费a级毛片大学生免费观看 | 久草免费福利视频| 亚洲AV日韩AV永久无码免下载| 免费的全黄一级录像带| 91大神亚洲影视在线| 国产麻豆视频免费观看| AV激情亚洲男人的天堂国语| 四虎永久免费网站免费观看| www免费黄色网| 亚洲国产精品久久66| 两性刺激生活片免费视频| 亚洲精品无码mⅴ在线观看| 免费一级成人毛片| 两性色午夜视频免费播放| 午夜亚洲国产理论秋霞| 99久久这里只精品国产免费| 国产偷国产偷亚洲清高APP| 久久亚洲2019中文字幕| 曰批视频免费40分钟试看天天| 亚洲区日韩精品中文字幕| 久久久久国产亚洲AV麻豆 | 成人永久免费高清| 久久久久免费视频| 亚洲国产成人久久精品app| 国产免费无遮挡精品视频| 中文成人久久久久影院免费观看| 亚洲国产精品美女| 亚洲第一黄色网址| 久久精品国产免费观看|