2. iSUM 5.1.0: Guía de Triggers
Triggers (Disparadores)
En esta guía se define el concepto de trigger, los diferentes tipos de evento que se
pueden registrar, y por que objetos de iSUM son soportados.
• Introducción
• Activación de los triggers
• Tipos de evento
• Definición de Trigger
• Características de un trigger
• Registrar un trigger
• Objetos que soportan la gestión de triggers
• Implementación y configuración de una tarea
Introducción
iSUM proporciona un mecanismo con el cual puede automatizar tareas, de forma
que estas sean ejecutadas antes o después de que se produzca un determinado evento
sobre un objeto.
Activación de los triggers
Dentro del fichero isum.xml se especifica si iSUM debe gestionar triggers.
También puede cambiar el nombre del fichero donde se registran y definen los
trigers.
...
<trigger>
<enabled>false</enabled>
<definition_file_name>triggers.xml</definition_file_n
ame>
</trigger>
...
Tipos de evento
Se entiende como evento la llamada a un método de un objeto de persistencia.
Puede definir una tarea para que se lleve a cabo cuando se produzca un evento, pero
la tarea asociada al evento puede ser ejecutada antes o después de que se produzca
dicho evento.
Tipos de evento
• Insert: Se produce cuando se intenta guardar el objeto por primera vez.
• Update: Se produce cuando se intenta modificar algún dato del objeto.
• Remove: Se produce cuando se intenta eliminar el objeto.
1
3. iSUM 5.1.0: Guía de Triggers
Definición de Trigger
Un trigger es una clase que implementa una interfaz que dispone de un método
run(...), en el cual se implementa la tarea que debe ser llevada a cabo, y un método
error(...), en el cual se implementa la tarea que debe ser llevada a cabo en caso de
que se produzca algún problema, en la mayoría de casos debería deshacer las
acciones llevadas a cabo en el método run().
Características de un trigger
Puesto que los trigger se establecen sobre objetos de persistencia, cada objeto de
persistencia que soporte la gestión de triggers tiene asociado un tipo de trigger.
Cada trigger implementa una interfaz concreta, así pues para gestionar un trigger
sobre un objeto que implemente la interfaz Device dispone de una interfaz
DeviceTrigger la cual define los siguientes métodos.
• public void run(Device device);
• public void error(Device device);
Como puede observar los dos métodos proporcionan un objeto, este objeto es el
objeto sobre el cual se produjo el evento.
Registrar un trigger
Para que una tarea se lleve a cabo, debe registrar el trigger previamente. Para
registrar un trigger existe un fichero de registro llamado triggers.xml en el cual debe
especificar el nombre de la clase que implementa el código de la tarea que el trigger
se encargara de ejecutar, e indicar si la tarea es critica o no.
Una tarea critica implica que si alguno de los triggers registrados para el mismo
evento no se ejecuta correctamente, los triggers anteriormente ejecutados serán
notificados del imprevisto con una llamada al método error(...), e iSUM abortará la
acción que iba a realizar sobre el objeto, en el caso en el cual iSUM ya hubiera
realizado la acción, como ocurre en los triggers definidos para ejecutarse después de
haberse realizado la acción, iSUM no deshará dicha acción sobre el objeto, pero si
notificara a los triggers anteriormente ejecutados.
Cada objeto de iSUM que soporta la gestión de triggers tiene una entrada definida en
el fichero de configuración triggers.xml que debe ser completada para definir o
registrar un trigger.
Estructura del fichero de configuración de triggers correspondiente a la definición de
triggers para gestionar eventos sobre objetos device. Puede observar que la
estructura
<class>
<name>class_name</name>
<critical>is_critical</critical>
</class>
solo debe ser definida cuando se define un trigger.
<triggers>
…
<device>
<before_insert>
</before_insert>
<after_insert>
<class>
<name>Name_One</name>
<critical>false</critical>
2
4. iSUM 5.1.0: Guía de Triggers
</class>
<class>
<name>Name_Two</name>
<critical>false</critical>
</class>
</after_insert>
<before_update>
</before_update>
<after_update>
</after_update>
<before_remove>
</before_remove>
<after_remove>
<class>
<name>Name_three</name>
<critical>false</critical>
</class>
</after_remove>
</device>
…
</triggers>
Objetos que soportan la gestión de triggers
Cada objeto de iSUM que soporta la gestión de triggers tiene asociada una interfaz,
la cual debe ser implementada por el trigger que defina alguna tarea sobre dicho
objeto.
Relación de objetos iSUM con sus respectivas interfaces trigger.
• AttributeTrigger – GroupAttribute, PortalAttribute, ServiceAttribute,
UserAttribute
• CertificationAuthorityTrigger – CertificationAuthority
• ContentTypeTrigger -- ContentType
• DescriberTrigger -- Describer
• DeviceTrigger -- Device
• GroupTrigger -- Group
• IntegratorTrigger -- Integrator
• InterfaceTrigger -- Interface
• LanguageTrigger -- Language
• PortalTrigger -- Portal
• ProfileTrigger -- Profile
• RendererDescriptorTrigger -- RendererDescriptor
• RenderizationRuleSetTrigger -- RenderizationRuleSet
• ServiceTrigger -- Service
• ShortcutTrigger -- Shortcut
• SkinTrigger -- Skin
• SourceTrigger -- Source
• SourceValueTrigger -- SourceValue
• TableSourceTrigger -- TableSource
• TransformationRuleSetTrigger -- TransformationRuleSet
• TransformerDescriptorTrigger -- TransformerDescriptor
• UserTrigger -- User
• UsersGroupTrigger -- UsersGroup
• UsersGroupTypeTrigger -- UsersGroupType
3
5. iSUM 5.1.0: Guía de Triggers
Implementación y configuración de una tarea
Para implementar una tarea debe construir una clase que implemente la interfaz del
trigger correspondiente y registrarla en el fichero triggers.xml .
Ejemplo:
public class AddProfileToUser implements UserTrigger{
public Trigger_Test(){
}
public void run(User user){
IsumFactory iFactory;
iFactory =
PersistenceManager.getIsumFactory(Config.getInstance(
).persistenceType);
Profile profile = iFactory.getProfile(“E-COMMERCE”);
user.addProfile(profile.getID());
}
public void error(User user){
IsumFactory iFactory;
iFactory =
PersistenceManager.getIsumFactory(Config.getInstance(
).persistenceType);
Profile profile = iFactory.getProfile(“E-COMMERCE”);
user.removeProfile(profile.getID());
}
}
Como puede apreciar en el código, la función que este realiza es la de asignar un
perfil a un usuario.
Ahora hay que registrar el trigger en el fichero triggers.xml.
<triggers>
…
<user>
<before_insert>
</before_insert>
<after_insert>
<class>
<name>AddProfileToUser</name>
<critical>false</critical>
</class>
<class>
<name>CreateAccount</name>
<critical>true</critical>
</class>
</after_insert>
<before_update>
</before_update>
<after_update>
</after_update>
<before_remove>
</before_remove>
<after_remove>
</after_remove>
</user>
…
</triggers>
Puede apreciar, que el trigger no se ha definido como critico, sin embargo si se ha
implementado el método error(...), también puede ver que hay definido otro trigger,
llamado CreateAcound que su tarea es la de crear automáticamente una cuenta de
acceso, a un servicio de comercio electrónico. Como la creación de la cuenta es
posterior a la asignación del perfil que da acceso al servicio, si no se ha creado la
4
6. iSUM 5.1.0: Guía de Triggers
cuenta de acceso al servicio correctamente, iSUM notificará al trigger
AddProfileToUser llamando al método error(...) el cual quitara el perfil
anteriormente asignado al usuario, para que no tenga acceso a un servicio para el
cual no dispone de los datos requeridos.
5