The online documentation is produced by a web publishing technology created by us to read the documents origins in OpenOffice Writer (ODT) and Microsoft Word (docx) formats and produces native web and PDF versions. In this way we maintain Louder project documentation update and in sync on each of its formats.
El objetivo de este componente es administrar las transacciones globales requeridas por los procesos de negocio de una aplicación. Su API es utilizada para acceder a un gestor relacional en una unidad de trabajo en particular. Toda la arquitectura de este componente proporciona a las aplicaciones desarrolladas en Kumbia Enterprise un contenedor para administración de transacciones en PHP como los usados en Java EE.
Es responsable de abrir y cerrar transaciones manteniendo unidades de trabajo en forma controlada. Las transacciones pueden ser creadas programacionalmente ó declarativamente.
Contexto de Scope Persistente
El TransactionManager es el puente para que objetos del ORM puedan interactuar con su contexto persistente adecuado. Cada objeto que es ligado a una transacción administrada por el contenedor es notificado de otras transacciones activas en el mismo contexto. Los objetos mantienen su estado y este es replicado cuando se abre ó cierra la transacción informando el estado de la misma.
Event Listeners
El componente TransactionManager hace uso del CommonEventInfraestructure de Kumbia Enterprise para notificar eventos a los objetos dependientes de una transacción y también entre ellos mismos.
Los eventos soportados son:
Tabla: Event Listeners de TransactionManager
Evento
Descripción
delete
Ocurre cuando un objeto es destruido cuando se replica el estado del mismo en la persistencia.
create
Ocurre cuando un objeto es creado.
update
Ocurre cuando un objeto es actualizado.
preInsert
Ocurre antes de realizar una inserción de un registro.
preDelete
Ocurre antes de realizar una eliminación de un registro.
preLoad
Ocurre al crear un objeto instanciado como resultado de una consulta.
postInsert
Ocurre después de realizar una inserción.
postDelete
Ocurre después de realizar una eliminación.
postUpdate
Ocurre después de realizar una actualización.
Estados de las entidades
Las entidades pueden tener los siguientes estados cuando intervienen en procesos transaccionales:
Estado New: Cuando una entidad es creada mediante el operador new por defecto se encuentra ligada a una conexión no transaccional y no representa ningun registro de la base de datos.
Estado Managed: Cuando una entidad está asociada a una transacción creada por el TransactionManager se dice que se encuentra en estado administrado.
Estado Detached: Cuando la entidad perteneció a una transacción administrada pero la transacción ya fue cerrada ó su contexto fue cambiado a la conexión no transaccional.
Estado Removed: Cuando la entidad fue eliminada de la persistencia y por lo tanto no puede estar asociada a un contexto transaccional.
Asignar el objeto al estado administrado
Los métodos de ActiveRecord llamados setTransaction() y detachTransaction() permiten cambiar programacionalmente el estado transaccional de un objeto.
Ejemplo: Cambiar un objeto ActiveRecord a un estado administrado
Cuando la transacción es cerrada ya sea por un rollback ó commit los objetos no son automáticamente cambiados al estado detached. Las transacciones cerradas ya no son usables pero la unidad de trabajo mantiene su dependencia a la transacción. El desligamiento de los objetos de la transacción puede realizarse manualmente ó llamar el método detachDependencies() de ActiveRecordTransaction.
API de TransactionManager
static function ActiveRecordTransaction getUserTransaction(TransactionDefinition $definition='') Crea ó obtiene una transacción ActiveRecordTransaction. Si se define una definición de transacción se crea una nueva.
static function void initializeManager() Inicializa el administrador de transacciones. El desarrollador no debe invocar este método ya que es automáticamente llamado por el contenedor de aplicaciones al iniciar la petición. static function void rollbackPendent() Realiza un rollback sobre todas las transacciones administradas por el TransactionManager. Cuando ocurre una excepción no capturada el framework llama este método para cancelar cualquier operación pendiente y así cuidar la integridad de los datos.
static function void commit() Realiza un commit sobre todas las transacciones administradas por el TransactionManager.
static function void rollback() Realiza un rollback sobre todas las transacciones administradas por el TransactionManager.
static function void notifyRollback(ActiveRecordTransaction $transaction) Permite notificar a otras transacciones administradas por el TransactionManager que una transacción realizo un rollback buscando que las demás también lo hagan.
static function void notifyCommit(ActiveRecordTransaction $transaction) Permite notificar a otras transacciones administradas por el TransactionManager que una transacción realizo un commit buscando que las demás también lo hagan.