2012-01-21 18 views
16

Estoy leyendo el EJB 3 en el libro de acción y tengo la siguiente pregunta:
¿El POJO está escribiendo y anotando con @Entity y así sucesivamente también un tipo de entidad EJB?¿Cómo se relacionan EJB y JPA?

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.

+0

Su pregunta es impresionante. –

Respuesta

15

JPA ha sido diseñado para reemplazar beans entidad EJB2, y ha comenzado como parte de la especificación EJB3.

Dado que tiene sentido utilizar 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.

+0

Entonces, a pesar de que ya no está tan unida, la especificación EJB requiere una implementación y es por eso que se ve como un tercer tipo de componente en el mundo EJB. – LuckyLuke

+1

EJB2 tenía "beans de entidad" que eran un tercer tipo de componente. EJB3 tiene JPA, que tiene "entidades". Pero no creo que ya sean considerados como "componentes EJB". Simplemente se llaman entidades JPA. –

3

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 utilizar 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. Puede ver this thread para obtener más información.

8

Hasta la versión 2.1 de las especificaciones EJB, una clase entity bean tenía que implementar la interfaz javax.ejb.EntityBean y proporcionar una implementación para métodos repetitivos 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 "frijol" entidad EJB en aplicaciones Java EE está muerto (enterrado bajo APP) como de EJB 3.

Cuestiones relacionadas