真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Hibernate和模型對(duì)象怎么理解

這篇文章主要講解了“Hibernate和模型對(duì)象怎么理解”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Hibernate和模型對(duì)象怎么理解”吧!

成都創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)營(yíng)銷推廣、網(wǎng)站重做改版、洪湖網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁(yè)面制作、商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為洪湖等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

學(xué)習(xí)Hibernate時(shí),經(jīng)常會(huì)遇到一些小問(wèn)題,這里將介OSGi平臺(tái)的插件類加載機(jī)制使得Hibernate無(wú)法正確加載分布在不同插件內(nèi)部的模型對(duì)象與O/R映射文件問(wèn)題的解決方法。

OpenCore是在OSGi規(guī)范上構(gòu)建的微內(nèi)核(Microkenerl),基于純組件(Pure Plugin)開放源碼企業(yè)應(yīng)用軟件平臺(tái)。

OpenCore數(shù)據(jù)層實(shí)現(xiàn)OSGi上集成Hibernate,Hibernate及其依賴庫(kù)作為一個(gè)單獨(dú)的插件,這樣帶來(lái)一個(gè)問(wèn)題,就是OSGi平臺(tái)的插件類加載機(jī)制使得Hibernate無(wú)法正確加載分布在不同插件內(nèi)部的模型對(duì)象與O/R映射文件。本文討論解決方案:

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

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

Eclipse-BuddyPolicy與Eclipse-RegisterBuddy方式

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

具體做法如下:

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

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

Eclipse Extension Point方式

這是我們目前實(shí)現(xiàn)的方式,通過(guò)標(biāo)準(zhǔn)的Eclipse擴(kuò)展點(diǎn)與擴(kuò)展機(jī)制,我們?cè)贖ibernate插件中plugin.xml配置文件中聲明下述擴(kuò)展點(diǎn),在模型對(duì)象插件中聲明擴(kuò)展,例如:

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

  1. public void start(BundleContext context) throws Exception {   

  2. Configuration configuration = new Configuration().configure
    (new File ("./etc/org.opengoss.database.hibernate/hibernate.cfg.xml"));   

  3. Class[] domainClasses = getDomainClasses();   

  4. for (Class domainClass : domainClasses) {   

  5. configuration.addClass(domainClass);   

  6. }   

  7. sessionFactory = configuration.buildSessionFactory();   

  8. Dictionarynew Hashtable props.put("scope", "APPLICATION");   

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

  10. registration = context.registerService
    (SessionFactory.class.getName(), sessionFactory, props);  

  11. }   

  12. private Class[] getDomainClasses() throws Exception {   

  13. List domainClasses = new ArrayList();   

  14. IExtensionPoint point = registry.getExtensionPoint
    (IConstants.DOMAIN_OBJECT_EXTENSION_POINT);   

  15. IExtension[] extensions = point.getExtensions();   

  16. for (IExtension extension : extensions) {  

  17. IConfigurationElement[] elements = extension.getConfigurationElements();   

  18. for (IConfigurationElement configurationElement : elements) {   

  19. Bundle bundle = pluginContext.getBundleBySymbolId
    (extension.getNamespaceIdentifier());   

  20. Class domainClass = bundle.loadClass
    (configurationElement.getAttribute("class"));   

  21. domainClasses.add(domainClass);   

  22. }   

  23. }   

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

  25. }  

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

感謝各位的閱讀,以上就是“Hibernate和模型對(duì)象怎么理解”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Hibernate和模型對(duì)象怎么理解這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


新聞名稱:Hibernate和模型對(duì)象怎么理解
鏈接分享:http://weahome.cn/article/jpicsh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部