在之前EJB系列博客中主要介绍了EJB作为业务容器,对业务逻辑的管理。但在另一方面,EJB的应用分为两方面:
1、Session bean和Message-driven bean定义了新的编程模型,以及部署规则等等;
2、专门定义了持久化相关的规范:实体对象/关系映射元数据,持久化管理接口和查询语言。
第二部分就是我们所说的JPA(Java Persistence API)。在EJB3.0中,EJB已经将JPA规范纳入EJB3.0。下面通过转载的一篇博客了解EJB的数据持久化。
****************************************************转载部分*******************************************************
首先,Sun引入新的JPA ORM规范出于两个原因:
其一,简化现有Java EE和Java SE应用开发工作
其二,Sun希望整合ORM技术,实现天下归一
JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口。主要是为了解决ORM框架的差异,它的出现在某种程度上能够解决目前ORM框架之间不能够兼容的问题,对开发人员来说,能够更好的在JPA规范下进行系统开发。
事实上,JPA并不是一项技术,而是一种标准,因为JPA只是一套接口,本身不能完成任何事情。JPA只是规范了Java持久化的官方标准。下图说明了JPA在系统架构中的作用,使用JPA持久化对象,而不是依赖于某一个ORM框架:
JPA的宗旨是为POJO提供持久化标准规范,由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便开发和测试的理念已经深入人心了。Hibernate3.2、TopLink 10.1.3以及OpenJPA都提供了JPA的实现。
JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:
JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。
容器级特性的支持:JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。
JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity进行注释,JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易的掌握。JPA基于非侵入式原则设计,因此可以很容易的和其它框架或者容器集成。
JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。
由于历史的原因,EJB 3与JPA有着藕断丝连的关系。EJB 2.X中,EJB有三种类型的Bean,分别是会话Bean(Session Bean)、实体Bean(Entity Bean)和消息驱动Bean(Message Driven Bean)。
随着EJB3规范的推出,EJB中的实体Bean(Enity Bean)逐渐被JPA规范所替代,这也是为什么JPA的规范会包含在EJB3的规范中的原因.
但JPA不仅能够在EJB环境中使用,也能够在J2SE的环境中使用,相对于EJB2.X的实体BEAN,使用的范围更广。
总之,简单的说,JPA虽然出自EJB3,但是其使用的范围却大于EJB3,不仅可以在JavaEE5中,也可以在JavaSE的环境中,如图所示EJB3和JPA的关系:
JPA并不是一项技术,而是一种标准,因为JPA只是一套接口,本身不能完成任何事情。JPA只是规范了Java持久化的官方标准,希望整合ORM技术,实现天下归一。
JPA由EJB 3.0软件专家组开发,宗旨是为POJO提供持久化标准规范。作为JSR-220实现的一部分,但它不囿于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。
*************************************************************************************************************************
可以看出EJB在通过1.0 、2.0的不断优化,逐渐摒弃由Entity Bean 作为数据实体的方式与数据库交互,而在EJB3.0中引入了JPA规范管理entity,将数据持久化统一。显然的,JPA规范实际提供了一系列接口,虽然说EJB提供了JPA规范,但标题中“数据持久化”仍然是通过支持JPA规范的框架如hibernate、eclipselink、toplink、openJPA等框架实现。所以EJB对于数据持久化的贡献在于JPA的开发和提出,但这也不可忽视EJB在数据持久层的作用。
总而言之一句话:EJB不仅是强大的业务管理者,同时提供数据持久层的支持。