EJB和JPA如何相关?

时间:2012-01-21 11:48:18

标签: java java-ee jpa ejb-3.0

我正在阅读动态书中的EJB 3,我有以下问题:
您是否使用@Entity编写和注释POJO,以及EJB实体类型?

我不明白JPA与EJB有什么关系。 JPA现在不是一个自己的规范吗?实体也包含在自己的持久性容器中。他们谈论EJB 3 Java Persistence API等,但我不明白实体与EJB有什么关系。

3 个答案:

答案 0 :(得分:17)

JPA旨在取代EJB2实体bean,并且已作为EJB3规范的一部分启动。

由于在EJB容器之外也使用JPA是有意义的,它现在有自己的规范,但它仍然与EJB3相关,因为兼容的EJB3容器必须提供JPA实现,它集成到事务处理中。容器。

答案 1 :(得分:9)

直到EJB规范的2.1版本,实体bean类必须实现javax.ejb.EntityBean接口并提供样板方法的实现,例如ejbLoad,ejbStore,ejbActivate和ejbPassivate。

EJB 3.0采用了JPA规范。实体bean的概念被更简单的JPA实体概念所取代。要创建此类实体,不需要任何接口实现或样板方法。实体是具有@Entity注释的POJO。

因此,实际上,从EJB 3开始,在Java EE应用程序中使用“实体bean”EJB已经死了(埋在JPA下)。

答案 2 :(得分:3)

你是对的。 JPA除了仅支持EJB之外还有更多工作要做。这就是为什么JPA成为一个单独的JSR或规范的原因。 EJB在其规范中使用或允许使用JPA,因为JPA是一个很好的标准。如果设计正确,您现在可以在JPA供应商之间切换而无需更改代码。

EJB规范可以独立于JPA使用(尽管JPA已作为EJB规范的一部分包含在内),同样JPA可用于EJB规范之外的更多内容。尽管如此,EJB规范可以非常轻松地将JPA Entitiy Manager(及其用法)注入到bean中,从而使编程更容易。当然,现在可以使用CDI上的新JSR轻松实现: - )。

所有支持EJB规范的应用服务器,也应该支持JPA。您可以查看this thread以获取更多信息。