JPA/EJB3关系

sdo*_*oca 11 java jpa ejb-3.0

我一直在阅读有关JPA和EJB3的内容,并想确认我对他们关系的理解是正确的.这就是我认为我知道的......

JPA是由许多供应商实施的规范,包括:

  • JBoss的/休眠
  • Oracle/TopLink Essentials(现为EclipseLink)
  • 阿帕奇/ OpenJPA的

EJB3是在Application Server中实现的规范,包括:

  • Glassfish的
  • JBoss的

它是否正确?

Pas*_*ent 21

Java EE 5中引入的Java Persistence API是EJB 3的子集,它取代了EJB 2.0 CMP的持久性解决方案.JPA 1.0已被定义为EJB 3.0规范(JSR 220)的一部分,但可以在EJB容器之外和之外使用.在Java EE 6中,JPA 2.0 在EJB 3.1规范(JSR 318)之外有其单独的规范(JSR 317).总结一下:

  • JPA是EJB 3的子集,实现由持久性提供程序提供,如Toplink Essentials/EclipseLink,Hibernate,Kodo/OpenJPA(Kodo是OpenJPA源代码派生的项目,而Kodo现在又基于OpenJPA)等

  • EJB 3是一个更广泛的规范,实现由依赖持久性提供程序的应用程序服务器的EJB容器提供:

    • GlassFish v3的默认持久性提供程序是EclipseLink
    • JBoss的默认持久性提供程序是Hibernate
    • WebLogic 10.3.1+的默认持久性提供程序是OpenJPA/Kodo或EclipseLink
    • WebSphere 6.1+的缺省持久性提供程序是(基于)OpenJPA

  • JPA 作为 EJB3 的一个子集是有道理的,因为我看到了如此多的参考文献,其中这些术语可以互换使用,这也是我试图理解它们时绕圈子的主要原因。谢谢! (2认同)
  • @sdoca欢迎你.这是简化的,但EJB3具有会话Bean,实体Bean和消息驱动Bean.JPA是Entity Beans的一部分. (2认同)