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

时间:2012-02-24 11:50:20

标签: osgi enterprise aries

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

我对Aries和Gemini Enterprise OSGi功能进行了一些基础研究。 我也经历过类似的问题:Gemini and Apache Aries blueprint container

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

  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 limitations:特别限制#5:缺乏对JTA交易的支持。似乎Aries JPA supports JTA ......但我无法详细了解支持程度。
  4. JNDI:我的新Web应用程序需要从JBoss应用程序服务器内托管的服务层调用现有的Session EJB。因此,JNDI支持对于我在客户端层中启用OSGi的Web应用程序至关重要 看来Gemini Naming是yet to be released而Aries有already got some capability in this area.

1 个答案:

答案 0 :(得分:14)

同样的问题出现在我脑海中,我得到了以下结果:

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

希望我的输入很有用!