程序人生

          在Java中摸爬滾打的日子

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            6 Posts :: 1 Stories :: 19 Comments :: 0 Trackbacks
          概述:   
              接觸OSGi已經(jīng)有兩三年了,而真正運(yùn)用OSGi于項(xiàng)目之中,也將近兩年。這兩年來,因?yàn)镺SGi的不太成熟也讓我飽受歷練。
              如果你對OSGi這個名詞有點(diǎn)陌生,那本系列教程就不太適合你了,如果你想學(xué)習(xí)本系列教程,請你先去了解OSGi的相關(guān)概念。
              拽寫本系列教程的目的在于給想要在企業(yè)應(yīng)用中使用OSGi技術(shù)的同學(xué)朋友們以實(shí)際經(jīng)驗(yàn)指導(dǎo),希望能給你帶來收獲。
          名詞解釋:
              OSGi:OSGi是Open Service Gateway Initiative的簡稱,可以稱是一種技術(shù),也可以稱是一個平臺,亦可稱之為一種規(guī)范。
              Bundle:OSGi中最重要的元素之一,也是OSGi中最小的物理元素。它是一個jar包,但它持有一份能夠進(jìn)行自我描述的元數(shù)據(jù)文件(MANIFEST.MF),雖然普通的jar包中也存在有MANIFEST.MF文件,但非Bundle的jar的MANIFEST.MF文件中缺少進(jìn)行自我描述的元數(shù)據(jù)信息。
              Equinox:OSGi的一個參考實(shí)現(xiàn),也是Eclipse3.2+的核心。
              SSH腳手架:SSH腳手架是指由Struts+Spring+Hibernate組合在一起的開發(fā)框架。
              Spring-DM:Spring-DM是SpringDynamicModules的簡稱,是由SpringSource提供的,致力于整合Spring框架和OSGi平臺的一個框架。
              Plug-in:這里的Plug-in指基于OSGi技術(shù)的插件工程。
              Maven:用來管理項(xiàng)目依賴及構(gòu)建的一個腳本工具。
              EBR:這里的EBR是SpringSource提供的Enterprise Bundle Repository的簡稱
          入門要求:
              學(xué)習(xí)本系列教程的同學(xué)需要了解SSH腳手架,熟悉Eclipse IDE開發(fā),對Maven有一定的了解。
          前期準(zhǔn)備
              JDK1.6+
              Eclipse3.4+
              Spring2.5.6+
              Spring-DM1.1.2+
              Maven2.0.9+
              EBR訪問地址:http://www.springsource.com/repository/app
          需要解決的問題
              要使SSH腳手架能夠正常運(yùn)行于OSGi環(huán)境,那我們首先要解決的問題有三。其一是cglib的類加載器的改造,其二是解決數(shù)據(jù)庫驅(qū)動包跟數(shù)據(jù)庫連接池缺少依賴的問題,其三就是整理運(yùn)行于OSGi環(huán)境下的SSH腳手架需要依賴的Bundle對象。
              也許有人會說,要讓Java應(yīng)用程序運(yùn)行OSGi那有什么困難的呢?當(dāng)然,解決問題的手段多種多樣,但要創(chuàng)建一個標(biāo)準(zhǔn)的OSGi基于OSGi的應(yīng)用程序,還確實(shí)不是那么的簡單。
              解決了以上所說的三個問題,基于SSH開發(fā)OSGi應(yīng)用就不成問題。但該如何解決以上三個問題呢,以及解決了以上三個問題后如何來規(guī)范這種基于OSGi環(huán)境下的SSH開發(fā)呢,又該如何保證開發(fā)效率能夠保持在或更優(yōu)于以往開發(fā)非OSGi應(yīng)用時等一系列問題呢。要想了解如何解決,敬請關(guān)注本系列文章。


          posted on 2010-06-15 00:17 瀟湘振宇 閱讀(5322) 評論(9)  編輯  收藏 所屬分類: OSGi系列

          Feedback

          # re: 基于OSGi的Web應(yīng)用開發(fā)系列一 2010-06-15 04:49 臨遠(yuǎn)
          呵呵,過來參拜一下使用spring-dm做項(xiàng)目的同志。還不清楚對cglib改造有什么用途,我們是使用暴力反射讓hibernate實(shí)現(xiàn)動態(tài)注冊實(shí)體類。spring基本已經(jīng)被拋棄了。struts最后也沒整合到osgi里,基本來說,改造以后系統(tǒng)已經(jīng)不能通用了。期待博主的見解,多謝。  回復(fù)  更多評論
            

          # re: 基于OSGi的Web應(yīng)用開發(fā)系列一 2010-06-15 09:31 瀟湘振宇
          @臨遠(yuǎn)
          改造cglib的目的是為了正常使用Hibernate的延遲加載,Hibernate在創(chuàng)建代理的時候,因?yàn)镺SGi的特殊性,每個Bundle擁有獨(dú)立的一個ClassLoader(Fragment除外),cglib通過其AbstractClassGenerator.create方法創(chuàng)建對象時,先獲取到相應(yīng)的ClassLoader對象緩存起來,在延遲加載的時候再通過緩存起來的ClassLoader來加載指定的對象。但是cglib獲取的默認(rèn)ClassLoader對象是POJO所在的Bundle的ClassLoader對象,而通過此ClassLoader來加載HibernateProxy類,自然會出現(xiàn)NoClassDefFoundError之類的異常。這個問題在BlueDavy的OSGi進(jìn)階中有詳細(xì)的說明。
          在Hibernate這一層使用暴力反射讓hibernate實(shí)現(xiàn)動態(tài)注冊實(shí)體類這樣的方法我覺得過于復(fù)雜,我覺得沒必要這樣做。我是通過Fragment來實(shí)現(xiàn)的。這樣理解想來也容易。  回復(fù)  更多評論
            

          # re: 基于OSGi的Web應(yīng)用開發(fā)系列一(前言) 2010-06-15 12:15 晉哥哥
          持續(xù)關(guān)注中  回復(fù)  更多評論
            

          # re: 基于OSGi的Web應(yīng)用開發(fā)系列一(前言) 2010-06-17 15:21 特立獨(dú)行
          持續(xù)關(guān)注中
          請博主堅(jiān)持更新哦~加油  回復(fù)  更多評論
            

          # re: 基于OSGi的Web應(yīng)用開發(fā)系列一(前言) 2010-06-17 15:26 瀟湘振宇
          多謝關(guān)注!昨天上午差不多完基于OSGi的Web應(yīng)用開發(fā)系列三(構(gòu)建項(xiàng)目框架),只是因?yàn)閯偘崃思遥伦獾姆孔幽抢镞€沒有開通網(wǎng)絡(luò),需要過一兩天才能發(fā)布!  回復(fù)  更多評論
            

          # re: 基于OSGi的Web應(yīng)用開發(fā)系列一(前言) 2010-06-19 16:35 Johnny.Liang
          @瀟湘振宇

          支持原創(chuàng)  回復(fù)  更多評論
            

          # re: 基于OSGi的Web應(yīng)用開發(fā)系列一(前言) 2010-08-18 21:14 黃晨
          如何通過fragment部署entity,還是不知道。Fragment和主bundle共用一個classloader.但是我創(chuàng)建了一個 hibernat bundle和一個DomainObject bundle. 在DomainObject bundle中有兩個通過anotation定義的pojo: Test和User. 在hibernate bundle中我通過addAnnotatedClass添加這兩個pojo.可是總是報錯:Test cannot be resolved to a type 和 User cannot be resolved to a type。 即使我在Fragment中將兩個pojo所在的包export,在hibernate bundle中import也沒用。為什么加載不了pojo class呢?有什么需要注意的么?   回復(fù)  更多評論
            

          # re: 基于OSGi的Web應(yīng)用開發(fā)系列一(前言) 2010-08-20 09:26 瀟湘振宇
          @黃晨
          這里需要注意的一點(diǎn)是,你在Hibernate Bundle中通過addAnnotatedClass添加這兩個POJO,而這個是通過在SessionFactory Bean中配置,如果確定POJO的Bundle是Hibernate Bundle的Fragment的話,那應(yīng)該是沒問題的,但如果不是的話,那就需要確保在Hibernate Bundle的MANIFEST.MF文件中有Import-package這兩個POJO所在的包。  回復(fù)  更多評論
            

          # re: 基于OSGi的Web應(yīng)用開發(fā)系列一(前言) 2015-07-06 17:34 Wick
          經(jīng)過幾年的發(fā)展,目前OSGi已經(jīng)成熟,很多公司開始使用,最著名的當(dāng)屬JIRA,國內(nèi)的有JXADF(http://osgi.jxtech.net)。  回復(fù)  更多評論
            

          主站蜘蛛池模板: 墨玉县| 绥中县| 井冈山市| 文安县| 车险| 鄄城县| 静宁县| 宁远县| 开平市| 哈巴河县| 涞水县| 沂源县| 分宜县| 安徽省| 万安县| 中阳县| 娄烦县| 腾冲县| 延长县| 寻乌县| 集贤县| 剑川县| 永兴县| 涿鹿县| 宜都市| 岢岚县| 百色市| 同江市| 色达县| 彰武县| 荣昌县| 唐海县| 上虞市| 溆浦县| 德江县| 嘉义市| 手机| 峨山| 蒙城县| 桦川县| 凤城市|