一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

OpenCore: OSGi上部署Hibernate的四種方式

 ~水手~!! 2010-12-24

OpenCore: OSGi上部署Hibernate的四種方式

OpenCore是在OSGi規(guī)范上構(gòu)建的微內(nèi)核(Microkenerl),基于純組件(Pure Plugin)開放源碼企業(yè)應(yīng)用軟件平臺(tái)。OpenCore數(shù)據(jù)層實(shí)現(xiàn)OSGi上集成Hibernate,Hibernate及其依賴庫作為一個(gè)單獨(dú)的插件,這樣帶來一個(gè)問題,就是OSGi平臺(tái)的插件類加載機(jī)制使得Hibernate無法正確加載分布在不同插件內(nèi)部的模型對(duì)象與O/R映射文件。本文討論四種解決方案:

  1. 模型對(duì)象(Domain Objects)插件

模型對(duì)象(Domain Objects)集中到獨(dú)立的插件(Bundle)內(nèi),Hibernate插件依賴這些模型對(duì)象插件。這是最簡(jiǎn)單的,也是比較糟糕的方式,比較小的基于OSGi的項(xiàng)目可以這也作做。

依賴方式:

業(yè)務(wù)插件------->Hibernate插件
      |                                                 |
      |                                          \    \| /
      |-----------  模型插件
                                                /

  1. 改進(jìn)的模型對(duì)象(Domain Objects)插件

把模型對(duì)象插件當(dāng)作Hibernate插件的Fragments,依賴方式如圖:


業(yè)務(wù)插件------->Hibernate插件
                                                    /|\
                                                        |
                                                 模型插件
                                            


  1. Eclipse-BuddyPolicyEclipse-RegisterBuddy方式

Equinox(Eclipse提供的OSGi實(shí)現(xiàn))平臺(tái)特有的方式,允許插件(Bundle)聲明自己的伙伴,讓“伙伴插件”來動(dòng)態(tài)加載本插件的類,這也是HiberateEquinox集成的官方解決方案。這種方式模型對(duì)象無需部署在單獨(dú)的插件內(nèi),與業(yè)務(wù)插件部署在一起即可,Hibernate插件也無須依賴模型對(duì)象。

具體做法如下:

首先,Hibernate插件(名稱,例如org.opengoss.orm.hibernate)聲明自身可以作為伙伴插件,自描述文件(MANIFEST.MF) 加入描述:

Eclipse-BuddyPolicy: registered

然后,模型對(duì)象的業(yè)務(wù)插件中把Hibernate插件加入為伙伴,自描述文件(MANIFEST.MF) 加入描述:

Eclipse-RegisterBuddy:org.opengoss.orm.hibernate

具體說明文檔:

http://www./311.html

http://www.ibm.com/developerworks/cn/opensource/os-ecl-osgi/index.html

注意:這種方式無法保證在Hibernate最新版本中應(yīng)用成功。大家可以再試試:)

  1. Eclipse Extension Point方式

這是我們目前實(shí)現(xiàn)的方式,通過標(biāo)準(zhǔn)的Eclipse擴(kuò)展點(diǎn)與擴(kuò)展機(jī)制,我們?cè)?/span>Hibernate插件中plugin.xml配置文件中聲明下述擴(kuò)展點(diǎn):

<plugin></plugin>

<extension-point id="org.opengoss.database.domain.object" name="domainObject"/>

在模型對(duì)象插件中聲明擴(kuò)展,例如:

<plugin></plugin>

<extension></extension> <extension point="org.opengoss.database.domain.object">

<domainobject></domainobject> <domainObject class="org.opengoss.alarm.core.Alarm"/>

</extension>

Hibernate插件的啟動(dòng)中,用代碼配置生成SessionFactory,代碼如下:

public void start(BundleContext context) throws Exception {

Configuration configuration = new Configuration().configure(new File(

"./etc/org.opengoss.database.hibernate/hibernate.cfg.xml"));

Class[] domainClasses = getDomainClasses();

for (Class domainClass : domainClasses) {

configuration.addClass(domainClass);

}

sessionFactory = configuration.buildSessionFactory();

Dictionarynew Hashtable

props.put("scope", "APPLICATION");

props.put("uid", "Hibernate:SessionFactory");

registration = context.registerService(

SessionFactory.class.getName(), sessionFactory, props);

}


private Class[] getDomainClasses() throws Exception {

List<class> domainClasses = </class>new ArrayList<class>();</class>

IExtensionPoint point = registry

.getExtensionPoint(IConstants.DOMAIN_OBJECT_EXTENSION_POINT);

IExtension[] extensions = point.getExtensions();

for (IExtension extension : extensions) {

IConfigurationElement[] elements = extension

.getConfigurationElements();

for (IConfigurationElement configurationElement : elements) {

Bundle bundle = pluginContext.getBundleBySymbolId(extension

.getNamespaceIdentifier());

Class domainClass = bundle.loadClass(configurationElement

.getAttribute("class"));

domainClasses.add(domainClass);

}

}

return domainClasses.toArray(new Class[domainClasses.size()]);

}

注意:Hibernate內(nèi)部的類加載機(jī)制實(shí)在無法令人滿意,盡管我們?cè)谶@種方式中已經(jīng)加載所有的模型類對(duì)象,但Hibernate內(nèi)部仍然會(huì)調(diào)用Class.forName()去試圖加載。所以,我們不得不在其自描述文件(MANIFEST.MF) 中加入描述:

DynamicImport-Package: *

結(jié)論:我們傾向于第四種方式,由Eclipse的擴(kuò)展點(diǎn)功能來完成這一職責(zé)。不贊成第三種在OSGi規(guī)范層作改進(jìn)的方式,OSGi本身的類加載機(jī)制設(shè)計(jì)非常優(yōu)美,Buddy插件破壞了這種優(yōu)美。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(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)論公約

    類似文章 更多

    亚洲欧美日韩色图七区| 久久精品国产99国产免费| 国产盗摄精品一区二区视频| 欧美中文字幕一区在线| 精品国产91亚洲一区二区三区| 国产毛片av一区二区三区小说| 好吊色免费在线观看视频| 少妇毛片一区二区三区| 亚洲日本韩国一区二区三区| 久久精品中文字幕人妻中文 | 日本丁香婷婷欧美激情| 国产不卡的视频在线观看| 欧美黑人黄色一区二区| 欧美激情中文字幕综合八区| 成人精品视频在线观看不卡| 国产精品一区日韩欧美| 国产精品一区二区三区黄色片| 欧美小黄片在线一级观看| 丰满少妇被猛烈撞击在线视频| 免费在线观看激情小视频| 色婷婷久久五月中文字幕| 亚洲综合精品天堂夜夜| 91日韩欧美中文字幕| 亚洲一区二区精品免费| 欧美多人疯狂性战派对| 久热人妻中文字幕一区二区| 中国美女偷拍福利视频| 色欧美一区二区三区在线| 欧美又大又黄刺激视频| 国产又粗又深又猛又爽又黄| 99久久国产精品免费| 欧美日韩在线视频一区| 欧美一区二区不卡专区| 最近日韩在线免费黄片| 国产一级内射麻豆91| 国产精品成人又粗又长又爽| 人妻内射精品一区二区| 亚洲熟女精品一区二区成人| 久久这里只精品免费福利| 欧美精品一区二区水蜜桃| 久久热麻豆国产精品视频|