企业OSGi框架:成熟度比较Apache Aries vs. Eclipse Gemini 那个更好?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (169)

问:到目前为止,两个Enterprise OSGi框架中的哪一个更加成熟:Apache Aries或Eclipse Gemini?

我的要求和调查结果如下。

  1. 蓝图容器:根据Blueprint规范的实施,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社区的支持),但我觉得GeminiJPA成熟度与Aries JPA相比相当低。原因:
    • GeminiJPA只支持与EclipseLink作为JPA提供者的集成。我想使用Hibernate。AriesJPA支持Hibernate。
    • 参考GeminiJPA限制:尤其是限制#5:缺乏对JTA交易的支持。看来,AriesJPA支持JTA ,但是我还没有能够深入到支持水平的细节中。
  4. JNDI:我的新Web应用程序需要从JBoss应用程序服务器中托管的服务层调用现有的Session EJB。因此,JNDI支持对于客户端中启用了OSGi的Web应用程序至关重要。
提问于
用户回答回答于

同样的问题我得到了以下结果:

1:Gemini是基于spring,它有着更长的历史,并且证明了很多。当我看着代码Gemini似乎有点更清洁,但有更多的扩展可能性,但是我遇到了命名空间处理程序的问题。即使使用1.0.0版本,它也不会等待命名空间处理程序。Aries等待NS处理程序的方式与等待所需的参考文件相同。我问OSGi家伙,他们说,下一个蓝图规范可能包含一个标准的NS处理程序API,在我看来会有很大帮助。我的结论是,我使用Apache Aries,但这不是最终决定。我在每年的每个季度都会回顾这个话题。我还提出了一些如何改进Blueprint并将其上传到OSGi bugzilla的建议。我希望在夏季实施这些增强功能,并且在研究代码时,基于Gemini会更容易。

2:Gemini包含一个嵌入式Tomcat。如果简单地将束放入春分点,则效果相当好。然而,它包含了我想要避免的Spring的一些依赖。我喜欢Spring,但我希望减少依赖,因为我需要。我不认为Aries在这个话题上有什么重要的支持。直到现在,我终于开始使用与Myfaces和Jersey一起工作的Jetty。直到现在我还没有尝试过其他任何东西。此外,我更喜欢Jetty的配置可能性。配置包可以定义为一个环境变量,如果您想要将集成测试作为构建生命周期的一部分运行,那么它可以提供很多帮助。如果Gemini支持更多配置选项(比如来自捆绑),我会考虑转向那个。

3:因为我喜欢使用JTA,所以我根本无法使用Gemini。我使用Aries 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将能够捕获配置更改事件。

扫码关注云+社区

领取腾讯云代金券