Читать книгу Desarrollo de aplicaciones web con Jakarta EE - César Francisco Castillo - Страница 36

2.8 Oyentes

Оглавление

En el ciclo de vida de las entidades está definido un conjunto de eventos que podría ocurrir o no de acuerdo a las operaciones que sobre ellas se invoquen (inserción, actualización, eliminación y carga).

Los eventos definidos en el ciclo de vida que se pueden disparar son los siguientes:

* PrePersist

* PostPersist

* PreUpdate

* PostUpdate

* PreRemove

* PostRemove

* PostLoad

Por ejemplo, si se invoca una operación de persistencia sobre una entidad y resulta exitosa, estarían disponibles los eventos PrePersist y PostPersist para esa entidad en particular.

Ahora bien, la pregunta es: ¿cómo sabe la entidad a qué evento debe responder y en qué momento? La respuesta a este interrogante es que en las entidades se deben implementar uno o más métodos de retrollamada, acompañados de las anotaciones vinculadas al tipo de evento al que desean responder. Estas están definidas dentro del paquete javax.persistence.* y son las siguientes:

* @PrePersist

* @PostPersist

* @PreUpdate

* @PostUpdate

* @PreRemove

* @PostRemove

* @PostLoad

Por ejemplo, en la entidad Facultad podríamos implementar un método de retrollamada con la anotación @PrePersist, como se observa en el siguiente fragmento de código:



El método prePersistencia() simplemente está a la espera de que ocurra una operación de inserción de una nueva entidad y, antes de que esta sea persistida en la base de datos, la intercepta, modifica su nombre (lo pasa a mayúsculas) y establece su abreviatura con los tres primeros caracteres del nombre.

Este esquema responde a la forma más básica de implementación de las retrollamadas, en la que, como se observa, los métodos no deben recibir parámetros. Por supuesto, se podrían implementar más métodos en la entidad, pero no estaríamos siendo del todo cuidadosos, ya que estaríamos agregando un poco de lógica en la definición de la entidad.

En caso de que desee implementar diversos métodos de retrollamada, lo aconsejable sería desacoplar el código y crear una clase exclusivamente con estos métodos. Dicha clase recibe el nombre de “oyente” (Entity Listener, en inglés) y en ella los métodos sí pueden recibir parámetros. Generalmente necesitarán acceder al estado de la entidad que se encuentran “oyendo”, por lo que el parámetro que recibirán será una instancia de dicha entidad o bien de la clase Object.

Desarrollo de aplicaciones web con Jakarta EE

Подняться наверх