Invocando un método de un objeto especifico usando Quartz .NET y Spring .NET

En algunas ocaciones necesitamos dejar una tarea programada que se ejecute cada cierto tiempo, para hacer eso se puede utilizar Quartz.

¿Que es Quartz?

Es un sistema de calendarización de tareas que puede ser integrado o usado virtualmente con cualquier otro sistema de software, en este contexto una tarea calendarizada (“job scheduler”) es un sistema que es responsable de ejecutar o notificar a otros componentes de software cuando un tiempo predeterminado ha sucedido.
http://quartznet.sourceforge.net/faq.html

¿Que es un Trigger?

Es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación.

¿Que es Spring?

Es un “framework” de código abierto de desarrollo de aplicaciones para la plataforma Java. La primera versión fue escrita por Rod Jonhson, quien lo lanzó primero con la publicación de su libro Expert One-on-One Java EE Design and Development (Wrox Press, octubre 2002). También hay una versión para la plataforma .NET, Spring .NET.
http://es.wikipedia.org/wiki/Spring_Framework
http://www.springframework.net/doc-latest/reference/html/introduction.html#introduction-overview

¿Que es .NET?

.Net es un “framework” de Microsoft que hace un énfasis en la transparencia de redes, con independencia de plataforma de hardware y que permita un rápido desarrollo de aplicaciones.
http://es.wikipedia.org/wiki/.NET

Si estas utilizando el “framework” Spring .NET esto te puede ser de utilidad.

Entre las caracteristicas del “framework” Spring se encuentra la integración de clases para el soporte de calendarización, actualmente Spring soporta “Quartz Scheduler” (http://quartznet.sourceforge.net/).

“Quartz” usa objetos Trigger,Job y JobDetail para realizar calendarización de todo tipo de tareas.

Por propositos de conveniencia, Spring ofrese una serie de clases que simplifican el uso de “Quartz” en aplicaciones basadas en “Spring”.

Usando MethodInvokingJobDetailFactoryObject
En ocaciones se necesita invocar un método de un objeto especifico. Usando MethodInvokingJobDetailFactoryObject Se puede hacer de la siguiente manera:

JobDetail :


<object id="EjemploJob"
type="Spring.Scheduling.Quartz.MethodInvokingJobDetailFactoryObject, 
Spring.Scheduling.Quartz">
<property name="TargetObject" ref="smsService" />
<property name="TargetMethod" ref="EnviarUnMensaje" />
</object>

El resultado del ejemplo anterior será llamar el método “EnviarUnMensaje” de un objeto de la clase“smsService”


public class smsService {
  // propiedades y eventos
  public void EnviarUnMensaje() {
    // realizar la tarea de enviar un mensaje
  }
}
<object id="smsService" type="business.Sms.SmsServiceImp, enviosms.business"/>

Para hacer que los resultados de las tareas “MethodInvokingJobDetailFactoryObject” sean no concurrentes, poner la bandera “concurrent” a “false”.


<object id="EjemploJob"
type="Spring.Scheduling.Quartz.MethodInvokingJobDetailFactoryObject, 
Spring.Scheduling.Quartz">
<property name="TargetObject" ref="smsService" />
<property name="TargetMethod" ref="EnviarUnMensaje" />
<property name="Concurrent" value="false" />
</object>

Nota: Por omisión, las tareas se ejecutaran de manera simultanea

Configurando tareas usando “triggers” y SchedulerFactoryObject

Hemos creado una tarea “JobDetail” de ejemplo (EjemploJob), necesitamos ahora calendarizar esa tarea. Esto se hace usando “triggers” y SchedulerFactoryObject.
Varios tipos de “triggers” estan disponibles con “Quartz”. “Spring” ofrece dos subclases de “triggers” :

CronTriggerObject and SimpleTriggerObject.

Usaremos de ejemplo un SimpleTriggerObject.

Los “Triggers” necesitan ser calendarizados. “Spring” ofrece un SchedulerFactoryObject que trata a los “triggers” como propiedades, SchedulerFactoryObject calendariza las tareas actuales con esos “triggers”.


<objectid="TriggerEjemplo" 
type="Spring.Scheduling.Quartz.SimpleTriggerObject, 
Spring.Scheduling.Quartz">

<property name="JobDetail" ref="EjemploJob" />

<!-- 10 segundos -->

<property name="StartDelay" value="10s" />

<!-- repetir cada 120 segundos -->

<property name="RepeatInterval" value="120s" />

</object>

El “trigger” configurado se ejecutara cada 50 segundos con un retardo inicial de 10 segundos.
Ya solo resta configurar el “SchedulerFactoryObject”


<object id="quartzSchedulerFactory"
type="Spring.Scheduling.Quartz.SchedulerFactoryObject, Spring.Scheduling.Quartz">
<property name="triggers">
<list>
<ref object="TriggerEjemplo" />
</list>
</property>
</object>

Usando Quartz tendremos en nuestra aplicación un proceso que se repite cada 120 segundos y que
hace la llamada al evento EnviarUnMensaje() de un objeto de la clase smsService.

Más info aqui:

http://www.springframework.net/docs/1.2.0/reference/html/scheduling.html

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *