<menu id="u2y6m"></menu>
<tt id="u2y6m"><rt id="u2y6m"></rt></tt>
  • <input id="u2y6m"></input><tt id="u2y6m"><blockquote id="u2y6m"></blockquote></tt>
    <bdo id="u2y6m"><small id="u2y6m"></small></bdo>
  • <blockquote id="u2y6m"><optgroup id="u2y6m"></optgroup></blockquote>
  • 溫馨提示×

    OSGi上部署Hibernate的方式有哪些

    發布時間:2021-12-04 17:26:28 來源:億速云 閱讀:72 作者:小新 欄目:編程語言

    這篇文章主要介紹OSGi上部署Hibernate的方式有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

    OpenCore是在OSGi規范上構建的微內核(Microkenerl),基于純組件(Pure Plugin)開放源碼企業應用軟件平臺。OpenCore數據層實現OSGi上集成Hibernate,Hibernate及其依賴庫作為一個單獨的插件,這樣帶來一個問題,就是OSGi平臺的插件類加載機制使得Hibernate無法正確加載分布在不同插件內部的模型對象與O/R映射文件。

    模型對象(Domain Objects)插件

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

    依賴方式:

    業務插件------->Hibernate插件
    |                         |
    |                    \    \| /
    |-----------  模型插件
    /
    改進的模型對象(Domain Objects)插件

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

    業務插件------->Hibernate插件
    /|\
    |
    模型插件

    Eclipse-BuddyPolicy與Eclipse-RegisterBuddy方式

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

    具體做法如下:

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

    Eclipse-BuddyPolicy: registered

    然后,模型對象的業務插件中把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最新版本中應用成功。大家可以再試試:)

    Eclipse Extension Point方式

    這是我們目前實現的方式,通過標準的Eclipse擴展點與擴展機制,我們在Hibernate插件中plugin.xml配置文件中聲明下述擴展點:

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

    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()]);
    }

    DynamicImport-Package: *注意:Hibernate內部的類加載機制實在無法令人滿意,盡管我們在這種方式中已經加載所有的模型類對象,但Hibernate內部仍然會調用Class.forName()去試圖加載。所以,我們不得不在其自描述文件(MANIFEST.MF) 中加入描述:

    以上是“OSGi上部署Hibernate的方式有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    免費撥打  400 100 2938 免費撥打 400 100 2938
    24小時售后技術支持 24小時售后技術支持
    返回頂部 返回頂部
    <menu id="u2y6m"></menu>
    <tt id="u2y6m"><rt id="u2y6m"></rt></tt>
  • <input id="u2y6m"></input><tt id="u2y6m"><blockquote id="u2y6m"></blockquote></tt>
    <bdo id="u2y6m"><small id="u2y6m"></small></bdo>
  • <blockquote id="u2y6m"><optgroup id="u2y6m"></optgroup></blockquote>
  • 一本久道久久综合丁香五月_免费视频禁止18以下禁止观看_日本japanese熟睡人妻_成熟闷骚女邻居引诱2