java - ¿Cómo se relacionan EJB y JPA?
java-ee ejb-3.0 (3)
JPA ha sido diseñado para reemplazar beans de entidad EJB2, y ha comenzado como parte de la especificación EJB3.
Como tiene sentido usar también JPA fuera de un contenedor EJB, ahora tiene su propia especificación, pero todavía está relacionada con EJB3, ya que un contenedor EJB3 compatible debe proporcionar una implementación JPA, que se integra en el manejo de transacciones del contenedor.
Esta pregunta ya tiene una respuesta aquí:
- Relación entre EJB 3.0 y JPA? 4 respuestas
Estoy leyendo el libro de EJB 3 en acción y tengo la siguiente pregunta:
¿Los POJO''s escriben y anotan con @Entity y así también un tipo de entidad EJB?
No entiendo lo que JPA tiene que ver con EJB. ¿No es JPA una especificación propia ahora? Las entidades también están contenidas en un contenedor de persistencia propio. Hablan sobre EJB 3 Java Persistence API, etc., pero no entiendo qué tienen que ver las entidades con EJB.
Tienes razón. JPA tiene más que hacer que solo soportar EJB. Esa es la razón por la que JPA se convirtió en una JSR o especificación por separado. EJB usa o habilita el uso de JPA en su especificación, simplemente porque JPA es un buen estándar. Ahora puede cambiar entre proveedores de JPA sin cambiar su código si está diseñado correctamente.
La especificación EJB se puede usar independientemente de JPA (aunque JPA se ha incluido como parte de la especificación EJB) y, asimismo, JPA se puede utilizar para muchas cosas más fuera de la especificación EJB. Sin embargo, la especificación EJB permite la inyección de JPA Entitiy Manager (y su uso) en sus beans con mucha facilidad, lo que facilita la programación. Por supuesto, esto ahora se puede lograr fácilmente usando un nuevo JSR en CDI :-).
Todo el servidor de aplicaciones que admite la especificación EJB debe admitir JPA también. Puedes ver este hilo para más información.
Hasta la versión 2.1 de las especificaciones de EJB, una clase de bean de entidad tenía que implementar la interfaz javax.ejb.EntityBean
y proporcionar una implementación para métodos repetitivos tales como ejbLoad, ejbStore, ejbActivate y ejbPassivate.
EJB 3.0 adoptó la especificación JPA. La noción de entidad frijol fue reemplazada por la noción más simple de una entidad JPA. Para crear dicha entidad, no se requiere implementación de interfaz o métodos de placa de caldera. La entidad es un POJO que tiene la anotación @Entity
.
Por lo tanto, en la práctica, el uso de EJB "entity bean" en aplicaciones Java EE está muerto (enterrado bajo JPA) a partir de EJB 3.