• OpenEJB 3.0支持对枚举和集合的依赖注入及OSGi和EJB 3.0特性
    时间:2008-09-28   作者:佚名   出处:互联网

    开源轻量级EJB实现框架OpenEJB的最新版支持对枚举、集合和Maps的依赖注入(Dependency Injection,即DI),并且支持OSGi和EJB 3.0规范。在经历了一年半的开发后,OpenEJB 3.0最终版近期发布了。该版本还支持@EJB引用其他EAR文件中的本地接口、事务日志及基于HTTP协议的EJBd,同时它还支持EJB 3.0的新特性如Business Interfaces、Java Persistence API (JPA)及JAX-WS Web Services。

    该新版本包含一些代码改进和bug修复,你可以在OpenEJB站点的发布文档中找到这些列表。Alexander Saint Croix最近撰写博文列举出了该版本的新特性、改进及bug修复。

    OpenEJB使用了其他一些开源框架,如使用OpenJPA提供JPA和CMP的持久化、使用ActiveMQ处理JMS/MDB、使用Apache CXF实现JAX-WS特性。OpenEJB的一些特性主要瞄准了EJB 3.1规范,如Collapsed EAR(在同一个归档及classloader中共存的ejbs与servlets)及针对单元测试的嵌入式EJB容器。不仅如此,即将成为JavaEE 6组成部分的EJB 3.1 Lite profile非常类似于OpenEJB。

    与Java EE容器的集成:

    OpenEJB 3.0可以插件的方式集成到Tomcat 6服务器中,这就在Web应用中增加了对EJBs的支持。将OpenEJB加入到Tomcat中可以为Servlets提供新的Java EE 5能力,如JPA、JAX-WS、JMS、J2EE连接器及事务。OpenEJB天生就提供了对Glassfish部署描述符、Geronimo及部分WebLogic部署描述符的支持。

    OSGi支持:

    OpenEJB框架是作为一个OSGi包发布的,这意味着所有OpenEJB 3.0的二进制文件与OSGi元数据一起被提供并且可用于任何OSGi平台上。基于OSGi(使用Apache Felix构建)的开源ESB框架ServiceMix 4将把OpenEJB作为ServiceMix的一部分。

    OpenEJB项目创始人之一的David Blevins撰写博文记录了该项目的再生及最新发布。InfoQ采访了David以更深入了解OpenEJB 3.0的特性及项目未来的路线图,尤其是它将如何支持EJB 3.1规范。

    对企业级Java开发者来说,在EJB中支持对枚举和集合对象的依赖注入意味着什么呢?它是如何帮助EJB组件的设计和开发呢?

        关键在于这使得EJB开发者(或者在Tomcat中使用OpenEJB的Servlet开发者)能真正深入到JavaEE的依赖注入功能,并且使之成为自己的东西。枚举、类和集合是我们所增加的额外的内建类型——我们期待在Java EE 6中也能具备这样的类型。此外,我们支持在应用中通过使用java.beans.PropertyEditor实现对任何你所创造对象的注入。这些增强使你能扩展注入以包含你的对象和资源并且使得Java EE作为一个通用的DI框架具有更好的可用性。

    关于在Java EE容器外OpenEJB框架提供了何种测试驱动开发以支持对EJB的单元测试的问题,David谈到了OpenEJB的嵌入式测试功能。

        你可以写一个普通的单元测试以调用EJBs,就像其他EJB客户端所做的那样。区别在于容器和EJBs 就运行在你单元测试的VM中。我们会对应用的classpath进行调整使之适应于测试用例,这样你就可以通过JNDI查找你的测试用例了。你只需针对本地容器和远程容器分别使用一个不同的InitialContextFactory,然后就可以相同的方式操作一个嵌入式数据库了。通过这种方式你可以测试 EJBs的方方面面,没有任何局限性。畅想一下,你可以测试webservice、Stateful bean及扩展的EntityManager,或者测试带有JTA EntityManager的Stateless bean并且测试用例运行于一个事务之内。这也是我们期望在EJB 3.1中能看到的一个特性。

    你能详细说明OpenEJB 3.0提供的OSGi支持以及以OSGi包的方式使用OpenEJB产品意味着什么吗?

        当前OSGi支持适合使用OSGi平台的人,他们渴望以包的方式增加OpenEJB以获得EJB支持,或者由类似于Apache ServiceMix这样的项目所驱动的人,该项目做的就是提供EJB WebServices支持。OpenEJB可用的含有EJB jars的所有包都将被部署。

    OpenEJB 3.0能通过HTTP协议调用EJB,这听起来非常棒。你能否更深入地解释一下该特性及其背后的动因?

        其动因就是让人们能绕过防火墙的限制并使Tomcat/OpenEJB用户可以通过一个单一的端口来运行ejbs和servlets。这是由一个Servlet驱动的,你可以将其加到任何应用中,也可以删除它,还可使用SSL等等。最终的目标就是提供 RESTful ejb调用。在未来的3.x版本中你会见到它。

    Java EE 6会将 EJB 3.1规范作为其一部分。在该版本之后,OpenEJB团队有什么计划以支持EJB 3.1呢?

        OpenEJB已经是EJB 3.1预览版的一个不错的来源了,比如这里提到的特性以及在1.0版中推出的WARs中的EJBs特性等。我积极参与了EJB 3.1专家组的工作并且对工作的进程及OpenEJB所做的贡献感到兴奋异常。我们希望能再接再厉并在最终规范发布前提出其他建议如单例及异步 beans。

    OpenEJB项目对于新特性和未来的增强方面的路线图是什么?

        既然这些特性的时间表已经公布出来了,我们期望看到更多EJB 3.1相关的特性以预览的方式呈现出来,如@Singleton和@Asynchronous、没有接口的视图(the no-interface view)。嵌入式支持和Tomcat集成总是在不断被调整和扩展。我们在以下方面一直在不懈努力:集群、CMP/JPA适配器的进一步优化、将EJB 2.x应用转化为EJB 3.0(实际上是根据部署描述符增加了注解)的Eclipse插件、通过备选JAXB实现产生优化的代码改善主要的WebServices性能。

    可以从OpenEJB站点下载OpenEJB 3.0。OpenEJB开发团队还提供了很多EJB示例以帮助开发者学习该框架的使用。

    网友留言/评论

    我要留言/评论