Spring + Hibernate 常常被称为 Java Web 应用背后人气最旺的框架组合。尽管 JCP 今天通过的 Web Beans JSR 打算将JSF + EJB + JPA 、来自 JBoss Seam(Spring 除外)的一些组件和EJB 3(目前能够提供有基本拦截和依赖注入功能的简化 Session Bean 框架)的一个 Web 组合进行标准化,现在 Spring 2.0 为 JPA 提供了完整的 EJB 容器契约,允许 JPA在任何环境内可以在 Spring 管理的服务层使用(包括 Spring 的所有 AOP 和 DI 增强)。关于下一个实际组合会是 EJB、Spring + Hibernate 还是 Spring + JPA 的论战,早已充斥于耳。
在 Tomcat 和 Geronimo 上,我们已经能看见独立使用 JPA 的演示范例。但这个方法存在一些局限性,例如,在同一个事务内部,我们无法跨实体管理器(Entity Managers)自动共享持久化上下文环境(Persistence Context)。Spring 通过实现 EJB 容器契约,允许在相同事务内以跨组件方式注入持久对象,同时也具备让组件连接事务的能力,并允许对扩展持久化上下文环境的支持。因此,Spring 2 允许随同容器内部支持的所有功能特性一起使用 JPA。
最近,Mark Fisher 在独立环境中使用来自 Glassfish 的 Toplink Essentials JPA 参考实现向大家演示了如何配合 Spring 使用 JPA。Mark 选取了一个简单的 JPA 领域模型,并展示了如何让它在 Spring 中运行:
我打算扩展 Spring 的 JpaDaoSupport 类,这个类提供了获取 JpaTemplate 的便利方法。如果你以前就在 Spring 下使用过 ODBC 或者其他的 ORM 技术的话,那么想必你对这种方法已经颇有了解了。应当注意的是,JpaDaoSupport 的使用是可选的。我们可以通过将 EntityManagerFactory 传给 JpaTemplate 的构造子的方式来创建 JpaTemplate 对象。事实上,JpaTemplate 本身就是可选的。如果你不希望 JPA 异常被自动转换成 Spring 的运行期异常层级结构(runtime exception hierarchy),那么你就可以完全不必使用 JpaTemplate 了。在这种情况下,你可能仍然对 Spring 的 EntityManagerFactoryUtils 类感兴趣,因为这个类提供了一个类方法,它能帮助你很方便地获取共享的(因此也是事务性的)EntityManager。
同时,Spring 2.0 文档也已经更新了一个新的章节,使用与 Hibernate 或 TopLink 相同的方式展示了如何支持 JPA。Rod Johnson 在 Java One 大会上向 InfoQ 表示,Spring 在确保 JPA 整合的可移植性方面做出了很多努力,目的是为了保证在 Hibernate、TopLink 和 OpenJPA 等 JPA 提供商之间进行切换变得更加容易。
最近,Spring 的 Pitchfork 项目(向 WebLogic 提供完整 EJB API 的一部分)被用于演示如何在 Tomcat 上完整地部署 EJB,尽管在 Tomcat 上使用 Spring 运行完整 EJB 的方法并不打算用于生产用途,Rod Johnson 表示“其目的并不是为了写出一个 EJB 容器”。JBoss 同样也提供了一个可嵌入的 EJB 容器,可以在具备一定局限性的条件下在 Tomcat 上运行 EJB 3。
上周,Gavin King 和不少 Spring 团队人员之间就 JBoss 和 EJB 3 vs. Spring“类 EJB 容器”(这是 Gavin 的叫法)问题爆发了一场大规模舌战。Spring 团队主张,JPA 是新 EJB 规范的主要价值所在,而在依赖注入和 AOP 能力方面,Session Bean 仅仅是 Spring 的很小的子集。他们在力挺 Spring + JPA。Gavin King 反击说,他们(Spring 团队)试图通过力推 Spring 的方式,进一步加强 Spring 的市场锁定,而不是“通过规范提供的扩展点为 EJB 3 创建附加组件”。
在2006 和 2007 年,在事务性和持久性 Java Web 应用开发的下一个实际标准领域,必将涌现出许多竞争和创新。目前看来,存在三个阵营,Sun/JCP、JBoss 和 Spring。社区将齐聚 EJB 阵营还是仍然对其嗤之以鼻?是继续固守 Spring + JPA 还 Spring + Hibernate 阵营?当 Web Beans 规范最终敲定时,事态将会变得更加引人注目。InfoQ 将持续为您追踪报道它们每一步发生的变化与创新。
您正在阅读:Spring+JPA,下一个人气组合?
【编辑推荐】