日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Eclipse RCP與Spring、Hibernate零配置集成

 LibraryPKU 2014-05-20

Eclipse RCP應(yīng)該是當(dāng)前應(yīng)用最廣泛的OSGi實(shí)現(xiàn)了。組件式熱插拔架構(gòu),讓基于RCP架構(gòu)的應(yīng)用開發(fā)先天就在擴(kuò)展性上勝人一籌。 Spring+Hibernate是最普遍的基礎(chǔ)開發(fā)框架,其優(yōu)異的性能,早就被業(yè)界認(rèn)同。但是當(dāng)Eclipse RCP與Spring+Hibernate相遇時(shí),麻煩出現(xiàn)了!

 

OSGi的Bundle各自維護(hù)自己的ClassLoader,從而實(shí)現(xiàn)各個(gè)Bundle在JVM中的獨(dú)立性。但正是由于獨(dú)立的ClassLoader,導(dǎo)致了諸如跨Bundle的資源文件難以訪問等問題。如何讓SH框架與RCP共事,應(yīng)該是很多RCP開發(fā)者頭疼的事。

 

網(wǎng)上百度谷歌良久,大致有幾種實(shí)現(xiàn):

1、基于Spring DM的實(shí)現(xiàn);

2、良少的SpringOSGINoDM的開源框架;

3、其他一些很有啟發(fā)性的實(shí)現(xiàn);

 

但這些方法似乎不太適合我的需求。我期望有一套能夠?qū)崿F(xiàn)以下目標(biāo)的基礎(chǔ)架構(gòu):

1、可以在Eclipse的根目錄直接配置Hibernate的連接屬性;(已實(shí)現(xiàn))

2、Spring、Hibernate相關(guān)的基礎(chǔ)Bundle發(fā)布后,就不需要再根據(jù)新的組件bundle進(jìn)行修改;(已實(shí)現(xiàn))

3、基礎(chǔ)組件外的新Bundle中的Model和Service可以自動(dòng)組裝并接受SH的管理;(已實(shí)現(xiàn))

4、RCP運(yùn)行時(shí),新Bundle可以觸發(fā)SessionFactory的更新,使Bundle中的數(shù)據(jù)庫結(jié)構(gòu)、數(shù)據(jù)庫操作自動(dòng)發(fā)布;(暫未實(shí)現(xiàn)

 

具體機(jī)構(gòu)如下圖:


 
 

圖中:

bundle>=com.abc.def.lib.common:第三方j(luò)ar包的統(tǒng)一管理,RCP中常用的jar包都在這邊打包。當(dāng)然,可以根據(jù)具體需要進(jìn)行拆分;

bundle>=com.abc.def.properties:配置文件管理 bundle,其可以動(dòng)態(tài)讀取Eclipse RCP的根目錄下properties目錄中的*.properties文件。新的業(yè)務(wù)Bundle也可以往此bundle中注冊(cè)自己的 properties文件。目錄"%ECLIPSE_RCP_HOME%/properties/" 中的properties文件可供手動(dòng)修改,如hibernate的數(shù)據(jù)庫連接信息等;

bundle>=com.abc.def.lib.common:hibernate相關(guān)的jar包,依賴com.abc.def.lib.common 和 com.abc.def.properties兩個(gè)bundle,MANIFEST.MF中增加: Eclipse-BuddyPolicy: dependent

bundle>=com.abc.def.lib.spring:Spring相關(guān)的jar包和相關(guān)的類,依賴com.abc.def.lib.common、 com.abc.def.properties、com.abc.def.lib.hibernate三個(gè)bundle,MANIFEST.MF中增加: Eclipse-BuddyPolicy: dependent

bundle>=com.abc.def.main:基礎(chǔ)架構(gòu)的入口bundle,這里進(jìn)行RCP的初始化管理,依賴以上所有bundle。

 

RCP和SH的集成,很關(guān)鍵的一點(diǎn)就是上面紅色字體標(biāo)注部分,通過Eclipse的buddy機(jī)制實(shí)現(xiàn)bundle之間的雙向訪問。

 

bundle>=com.abc.def.lib.spring中,我修改覆蓋了jar包中的org.springframework.util.ResourceUtils,避免Spring訪問Annotation標(biāo)注的Service類時(shí)找不到類的問題,具體可參見我以前的一篇文章《解決Spring的Component-scan和packagesToScan不支持Eclipse RCP問題

 

Spring和Hibernate實(shí)現(xiàn)了真正的零配置,所有Entity和Service都通過Spring和Hibernate的 Annotation直接定義。目前在bundle>=com.abc.def.lib.spring中,在DataSourceConfig類 中,用Annotation定義了dataSource、sessionFactory、txManager等bean,其 中,sessionFactory中,通過PackagesToScan設(shè)置了model的統(tǒng)一根節(jié)點(diǎn):com.abc.def,只要在這個(gè) package(包括子包)下的Annotation定義的model,都將自動(dòng)納入到SH的管理。

 

bundle>=com.abc.def.main中,通過

      ApplicationContext appContext = new AnnotationConfigApplicationContext("com.abc.def");

得到ApplicationContext。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多