成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā) 后端
對于OSGi平臺的插件類加載機(jī)制使得Hibernate無法正確加載分布在不同插件內(nèi)部的模型對象與O/R映射文件這個問題的四種解決方案。

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

51CTO編輯推薦:OSGi入門與實(shí)踐全攻略

模型對象(Domain Objects)插件

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

依賴方式:

業(yè)務(wù)插件------->Hibernate插件
      |                         |
      |                    \    \| /
      |-----------  模型插件
                                 /
改進(jìn)的模型對象(Domain Objects)插件

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

業(yè)務(wù)插件------->Hibernate插件
                              /|\
                                |
                             模型插件
                                            
Eclipse-BuddyPolicy與Eclipse-RegisterBuddy方式

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

具體做法如下:

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

Eclipse-BuddyPolicy: registered

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

Eclipse-RegisterBuddy:org.opengoss.orm.hibernate

具體說明文檔:

http://www.hibernate.org/311.html

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

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

Eclipse Extension Point方式

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

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

Hibernate插件的啟動中,用代碼配置生成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 domainClasses = new ArrayList(); 
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í)在無法令人滿意,盡管我們在這種方式中已經(jīng)加載所有的模型類對象,但Hibernate內(nèi)部仍然會調(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)美。

您正在閱讀:OpenCore: OSGi上部署Hibernate的四種方式

【編輯推薦】

  1. Struts+Spring+Hibernate開發(fā)入行真功夫
  2. 優(yōu)化Hibernate性能的幾點(diǎn)建議
  3. Hibernate 3新特性介紹及發(fā)展趨勢
責(zé)任編輯:張攀 來源: JavaEye論壇
相關(guān)推薦

2019-10-21 11:00:29

微服務(wù)架構(gòu)部署策略

2023-05-22 08:03:28

JavaScrip枚舉定義

2022-03-25 14:47:24

Javascript數(shù)據(jù)類型開發(fā)

2010-07-28 13:54:42

Flex數(shù)據(jù)綁定

2017-04-17 19:31:03

Android多線程

2021-12-22 09:34:01

Golagn配置方式

2014-12-25 09:41:15

Android加載方式

2020-06-12 08:28:29

JavaScript開發(fā)技術(shù)

2013-06-14 15:24:57

Android開發(fā)移動開發(fā)數(shù)據(jù)存儲方式

2013-10-17 09:25:52

2021-07-14 10:31:15

JavaScript開發(fā) 技巧

2015-04-02 16:54:52

災(zāi)難恢復(fù)VDI災(zāi)難恢復(fù)

2015-04-13 11:39:26

VDI災(zāi)難恢復(fù)

2025-05-09 09:39:45

2022-07-04 08:29:13

electron通信

2024-01-17 13:56:00

Redis節(jié)點(diǎn)映射關(guān)系

2021-12-01 15:40:40

節(jié)日開源剪貼畫

2020-11-24 05:59:41

容器

2021-06-25 08:00:00

物聯(lián)網(wǎng)醫(yī)療技術(shù)

2015-09-06 09:23:23

Android異步更新
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产一区二区激情视频 | 久久久国产精品 | 中文字幕在线一区 | 在线观看中文字幕 | 免费黄色av网站 | 欧美日韩在线一区二区三区 | 超碰人人做 | 91精品国产综合久久香蕉922 | 久久er精品 | 亚洲免费视频一区 | 亚洲成人福利在线观看 | 91av视频在线观看 | 国产一区二区三区在线看 | 一区二区国产精品 | 久久99精品久久久久久国产越南 | 草草草网站 | 久久久国产一区二区三区 | 日韩欧美国产一区二区三区 | 一区二区三区av夏目彩春 | 日韩欧美在线观看 | 久久综合一区二区 | 超碰97免费在线 | 欧美一级淫片免费视频黄 | 亚洲欧美日韩在线不卡 | 欧美又大粗又爽又黄大片视频 | 91精品久久久久久久99 | 日韩视频在线观看中文字幕 | 色综合久久88色综合天天 | 成人一区二 | 成人午夜免费视频 | www.日韩| 久久久黑人 | 精品一区二区久久久久久久网站 | 欧美国产精品久久久 | av香蕉 | 欧美一区二区成人 | 日本精品在线播放 | 2021天天干夜夜爽 | 国产中文视频 | 狠狠av| 男女一区二区三区 |