EJB和JPA如何相关?
我正在阅读Action 3中的EJB 3,我有以下问题:
您是否使用@Entity编写和注释POJO,以及EJB实体类型?
我不明白JPA与EJB有什么关系。 JPA现在不是一个自己的规范吗? 实体也包含在自己的持久性容器中。 他们谈论EJB 3 Java Persistence API等,但我不明白实体与EJB有什么关系。
JPA旨在取代EJB2实体bean,并已作为EJB3规范的一部分启动。
由于在EJB容器之外也使用JPA是有意义的,它现在有自己的规范,但它仍然与EJB3相关,因为兼容的EJB3容器必须提供JPA实现,该实现集成到容器的事务处理中。
在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下)。
你是对的。 JPA除了支持EJB之外还有更多工作要做。 这就是为什么JPA成为一个单独的JSR或规范的原因。 EJB在其规范中使用或允许使用JPA,因为JPA是一个很好的标准。 如果设计正确,您现在可以在JPA供应商之间切换而无需更改代码。
EJB规范可以独立于JPA使用(尽管JPA已作为EJB规范的一部分包含在内),同样JPA可用于EJB规范之外的更多内容。 尽管如此,EJB规范可以非常轻松地将JPA Entitiy Manager(及其用法)注入到bean中,从而使编程更容易。 当然,现在可以使用CDI上的新JSR轻松实现:-)。
所有支持EJB规范的应用服务器,也应该支持JPA。 您可以查看此主题以获取更多信息。
- JTA EntityManager无法使用getTransaction()
- 是否可以使用@EJB注释通过不同的服务器注入EJB?
- 如何避免使用collection fetch指定的警告“firstResult / maxResults; 在内存中应用!“在使用Hibernate时?
- weblogic ejb ComplianceException
- 我们为什么要使用EJB?
- javax.naming.NoInitialContextException:无法实例化类:
- 在没有注释的情况下将Hibernate迁移到JPA
- 不再使用EJB 3.0的主要原因?
- 将EJB3注入基于注释的JSF2 Backing bean导致javax.naming.NameNotFoundException: