2012-02-24 85 views
18

問題:到目前爲止,兩個Enterprise OSGi框架中的哪一個更加成熟:Apache Aries或Eclipse Gemini?企業OSGi框架:成熟度比較Apache Aries vs. Eclipse Gemini

我已經做了一些關於白羊座和雙子座企業OSGi功能的基礎研究。我也經歷過類似的這個問題:Gemini and Apache Aries blueprint container

我的要求和調查結果如下。將非常感謝您的額外投入。

  1. 藍圖容器:白羊座和雙子座在實施藍圖規範方面看起來同樣成熟。

  2. Web開發(將針對JSR 286使用Spring Portlet是發展中國家):
    雖然雙子座的網站有根在Spring DM(因此我對雙子座的框架初始偏好),我相信白羊座應同樣能使用基於Spring Portlet MVC的Web應用程序。

  3. JPA:這是我最關心的問題。雖然我最初更傾向於雙子座(由於其源於Spring DM和活躍的SpringSource社區的支持),但我覺得雙子座JPA成熟度與Aries JPA相比相當低。理由:

    • 雙子座JPA只支持與EclipseLink作爲JPA提供者的集成。我想使用Hibernate。白羊座JPA支持Hibernate。
    • 參考Gemini JPA limitations:特別限制#5:缺乏對JTA交易的支持。看起來好像是Aries JPA supports JTA ......但是我還沒有弄清楚支持程度的細節。
  4. JNDI:我的新Web應用程序需要從JBoss應用服務器內託管的服務層調用現有的Session EJB。因此,JNDI支持對於客戶端中啓用了OSGi的Web應用程序至關重要。
    看來雙子座命名爲yet to be released,而白羊座具有already got some capability in this area.

回答

13

同樣的問題來到我的腦海裏,我得到了以下結果:

1:雙子座是基於Spring有更長的這過去和證明了很多。當我看着代碼雙子座似乎有點更清潔,但有更多的擴展可能性,但是我遇到了命名空間處理程序的問題。即使使用1.0.0版本,它也不會等待命名空間處理程序。白羊座等待NS處理程序的方式與等待所需的參考文件相同。我問OSGi傢伙,他們說,下一個藍圖規範可能包含一個標準的NS處理程序API,在我看來會有很大幫助。我的結論是,我使用Apache白羊座,但這不是最終決定。我在每年的每個季度都會回顧這個話題。我還提出了一些如何改進Blueprint並將其上傳到OSGi bugzilla的建議。我希望在夏季實施這些增強功能,並且在研究代碼時,基於雙子座會更容易。

2:雙子座包含一個嵌入式的Tomcat。如果您簡單地將束放入春分點,則效果相當好。然而,它包含了我想要避免的Spring的一些依賴。我喜歡Spring,但我希望減少依賴,因爲我需要。我不認爲白羊座在這個話題上有什麼重要的支持。直到現在,我終於開始使用與Myfaces和Jersey一起工作的Jetty。直到現在我還沒有嘗試過其他任何東西。此外,我更喜歡Jetty的配置可能性。配置包可以定義爲一個環境變量,如果您想要將集成測試作爲構建生命週期的一部分運行,那麼它可以提供很多幫助。如果雙子座支持更多配置選項(比如來自捆綁),我會考慮轉向那個。

3:因爲我喜歡使用JTA,所以根本無法使用雙子座。我使用白羊座JPA很安靜,我對此感到滿意。當我與許多同事合作時,我對他們的有效性負責。對於白羊座JPA,我有問題,它沒有等待DataSourceFactory服務(如果db連接在persistence.xml中定義)或DataSource服務(如果jta-data-source或non-jta-data-source)被定義。這意味着當您使用Aries JPA時,捆綁開始順序很重要。

在我們使用Glassfish和JNDI之前,這並不是問題,因爲Glassfish在OSGI捆綁之前啓動了JNDI資源。當我們轉移到清理OSGI容器時,我們開始出現問題,我的同事們開始花費大量時間嘗試獲得正確的軟件包開始排序。

最後,我簡單地將Aries JPA捆綁在一起,並重寫了我不喜歡的部分。這意味着我只保留了persistence.xml分析器部分,並在http://everit.org/osgi/jpa/org.everit.osgi.jpa.container/index.html創建了一個自己的項目,我沒有這個麻煩。目前它與Hibernate一起工作,我猜測(還沒有嘗試過)使用Eclipselink和編譯時間增強的OpenJPA。我寫的容器與org.apache.aries.jpa.container.context和aries jpa blueprint命名空間處理程序一起工作良好。 4:如果您使用應用程序服務器,並確信您的JNDI環境在捆綁之前啓動,而不是使用它。但是你不能趕上修改或刪除JNDI資源,因此我不建議在OSGi內部使用它。如果你需要它,因爲JPA,我可以推薦我的容器實現:),即使你在osgi:service/...表達式的persistence.xml中使用* -data-source,也會使用標準的OSGi服務跟蹤器。如果您需要中央配置位置,我建議您檢查felix-webconsole的配置選項卡,OSGi規範的元類型和配置管理部分。如果您使用元類型定義配置設置,則它們將在feilix-webconsole上可用,並且通過配置管理API您將能夠捕獲配置更改事件。我測試了felix-webconsole,並在Equinox-Jetty對上爲我工作。

希望我的輸入有用!