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



问题:到目前为止,两个企业OSGi框架中哪一个更成熟:ApacheAries还是EclipseGemini?

我对Aries和Gemini Enterprise OSGi功能做了一些基础研究。我也经历过类似的问题:Gemini和ApacheAries蓝图容器。

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

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

  2. Web开发(将使用SpringPortletMVC针对JSR286进行开发):
    尽管Gemini Web源于Spring DM(因此我最初更喜欢Gemini框架),但我认为Aries应该同样能够使用基于Spring Portlet MVC的Web应用程序。

  3. JPA:这是我最关心的领域。虽然我一开始更倾向于双子座(因为它起源于Spring DM,并得到了活跃的SpringSource社区的支持),但我觉得双子座JPA的成熟度与白羊座JPA相比相当低。原因:

    • Gemini JPA仅支持与作为JPA提供商的EclipseLink集成。我想使用Hibernate。Aries JPA支持Hibernate
    • 提到Gemini JPA的限制:特别是限制#5:缺乏对JTA事务的支持。看来Aries JPA支持JTA。。。但我还没能详细了解支持程度
  4. JNDI:我的新web应用程序需要从JBoss应用程序服务器内托管的服务层调用现有的会话EJB。因此,JNDI支持对于我在客户端层中支持OSGi的Web应用程序至关重要
    双子座的命名似乎还没有发布,而白羊座在这方面已经有了一些能力。

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

1:双子座是以春天为基础的,春天的过去要长得多,证明了很多。当我查看代码时,Gemini似乎更干净了,有更多的扩展可能性,但我在命名空间处理程序方面遇到了问题。即使使用1.0.0版本,它也没有等待命名空间处理程序。Aries等待NS处理程序的方式与等待所需引用的方式相同。我问了OSGi的人,他们说下一个Blueprint规范可能包含一个标准的NS处理程序API,在我看来这将有很大帮助。我的结论是我使用Apache Aries,但这不是最终决定。我在一年中的每一个季度都会复习这个话题。我还提出了一些如何改进Blueprint的建议,并将其上传到OSGi bugzilla中。我想在夏天实现这些增强,当我研究代码时,基于Gemini会更容易。

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

3:因为我喜欢使用JTA,所以我根本没有选择使用Gemini。我使用Aries JPA有一段时间很安静,我对此很满意。当我与许多同事一起工作时,我要对他们的有效性负责。对于Aries JPA,我遇到的问题是它没有等待DataSourceFactory服务(如果在persistence.xml中定义了db连接)或DataSource服务(如果是jta数据源或非jta数据来源)被定义。这意味着当你使用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.cext和aries-jpa-blueprint命名空间处理程序配合良好。

4:如果你使用一个应用程序服务器,并且你确信你的JNDI环境在你的bundle之前启动,那么就使用它。但是你无法捕获修改或删除JNDI资源,因此我不建议在OSGi中使用它。如果您因为JPA而需要它,我可以建议我的容器实现:)使用标准OSGi服务跟踪器,即使您在带有OSGi的persistence.xml中使用*data source:service/。。。表示如果您需要一个中央配置位置,我建议您查看felixwebconsole的configuration选项卡,OSGi规范的Metatype和ConfigurationAdmin部分。如果您在Metatypes的帮助下定义配置设置,它们将在feilix-webconsole上可用,并通过configuration Admin API,您将能够捕捉配置更改事件。我进行了测试,felix网络控制台也在Equinox Jetty上为我工作。

希望我的意见有用!

相关内容

  • 没有找到相关文章

最新更新