企业OSGi框架:成熟度比较Apache Aries与Eclipse Gemini

use*_*646 19 enterprise osgi aries

问:截至今天,两个企业OSGi框架中哪一个更成熟:Apache Aries还是Eclipse Gemini?

我对Aries和Gemini Enterprise OSGi功能进行了一些基础研究.我也经历了一个类似的问题:Gemini和Apache Aries蓝图容器.

我的要求和发现如下.非常感谢您的额外投入.

  1. 蓝图容器:Aries和Gemini在蓝图规范的实施方面似乎都同样成熟.

  2. Web开发(将使用Spring Portlet MVC针对JSR 286进行开发):
    虽然Gemini Web源于Spring DM(因此我最初偏爱Gemini框架),但我相信Aries应该同样能够使用基于Spring Portlet MVC的Web应用.

  3. JPA:这是我最关注的领域.虽然我最初更倾向于Gemini(由于它源于Spring DM并且来自活跃的SpringSource社区的支持),但我觉得与Aries JPA相比,Gemini JPA的成熟度相当低.原因:

    • Gemini JPA仅支持与EclipseLink集成为JPA提供程序.我想使用Hibernate.Aries JPA支持Hibernate.
    • 参考Gemini JPA限制:特别限制#5:缺乏对JTA交易的支持.似乎Aries JPA支持JTA ......但是我还没有能够深入了解支持级别的细节.
  4. JNDI:我的新Web应用程序需要从JBoss应用程序服务器内托管的服务层调用现有的Session EJB.因此,JNDI支持对于我在客户端层中启用OSGi的Web应用程序至关重要.
    似乎Gemini Naming 尚未发布,而Aries 已经在这个领域获得了一些能力.

Bal*_*dos 14

同样的问题进入我的脑海,我得到了以下结果:

1:Gemini以Spring为基础,拥有更长的历史并且证明了很多.当我查看代码时Gemini看起来更清晰,有更多的扩展可能性,但是我遇到了命名空间处理程序的问题.即使使用1.0.0版本,它也不会等待命名空间处理程序.Aries以等待所需引用的方式等待NS处理程序.我问过OSGi的人,他们说下一个蓝图规范可能包含一个标准的NS处理程序API,在我看来会有很大帮助.我的结论是我使用Apache Aries但它不是最终的决定.我在一年中的每个季度都会对此主题进行评论.我还提出了一些如何改进Blueprint并将其上传到OSGi bugzilla的建议.我想在夏天实现这些增强功能,当我查看代码时,基于Gemini会更容易.

2:Gemini包含一个嵌入式Tomcat.如果你只是简单地将捆绑放入昼夜平分点,那么它的效果非常好.但是它包含了我想要避免的Spring的几个依赖项.我喜欢Spring,但我希望尽可能减少依赖性.我不认为白羊座在这个主题上有任何重大支持.我终于开始使用与Myfaces和Jersey一起工作的Jetty.到目前为止我还没有尝试过其他任何事情 另外我更喜欢Jetty的配置可能性.配置包可以定义为环境变量,如果您希望在构建生命周期中运行集成测试,则可以提供很多帮助.如果Gemini支持更多的配置选项(比如来自bundle),我会考虑转向那个.

3:因为我喜欢使用JTA,所以根本不可能使用Gemini.我使用Aries JPA安静了一段时间,我很满意.当我与许多同事合作时,我对其有效性负责.使用Aries JPA,我遇到的问题是它没有等待DataSourceFactory服务(如果在persistence.xml中定义了db连接)或者定义了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蓝图命名空间处理程序配合使用.

4:如果您使用应用程序服务器,并确信您的JNDI环境在捆绑包之前启动而不是使用它.但是你无法捕获修改或删除JNDI资源,因此我不建议在OSGi中使用它.如果您因JPA而需要它,我可以建议使用标准OSGi服务跟踪器的容器实现:)即使您在persistence.xml中使用带有osgi:service/...表达式的*-data-source也是如此.如果您需要一个中央配置位置,我建议您检查felix-webconsole的配置选项卡,OSGi规范的元类型和配置管理部分.如果您在元数据类型的帮助下定义配置设置,它们将在feilix-webconsole上提供,并且通过Configuration Admin API,您将能够捕获配置更改事件.我测试了felix-webconsole也为我在Equinox-Jetty对上工作.

希望我的意见很有用!