piątek, 2 listopada 2007

Quartz cz. 1

Ostatnio miałem zintegrować Quartz-a z aplikacją webową działającą na Tomcat-cie. Quartz to biblioteka służąca do zarządzania zdarzeniami, które mają się wykonywać w pewnych, określonych momentach czasu. Te 'momenty' można zdefiniować jako np. co 5 sekund lub za pomocą wzorca, czyli np. 'każdy piątek 18:00'.
Można w ten sposób wysyłać użytkownikom co miesiąc jakieś związane z jego aktywnością raporty.
Co trzeba zrobić, żeby użyć Quartz-a w swojej aplikacji? Niewiele.
1. Ściągamy Quartza 1.6 ze strony
2. Dodajemy go sobie do zbioru bibliotek projektu. U mnie było to określone w pliku lib.properties, w katalogu z bibliotekami.
Plik quartz-all-1.6.0.jar skopiowałem do \lib\quartz-1.6.0
a do lib.properties dodałem
quartz.version=1.6.0
quartz.dir=${lib.dir}/quartz-${quartz.version}
quartz.jar=${quartz.dir}/quartz-all-${quartz.version}.jar
3. Jeżeli mamy w projekcie zintegrowanego Springa 2.0, to pozostaje:
3a. utworzyć plik konfiguracyjny applicationContext-quartz.xml i zapisać go w katalogu WEB-INF.

U mnie wygląda następująco:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean id="outdatetProjectsMailSender" class="pl.unizeto.unitrack.quartz.OutdatedProjectsMailSender">
<property name="userManager"><ref bean="userManager"/></property>
<property name="userTaskManager"><ref bean="userTaskManager"/></property>
</bean>


<bean id="dummyJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject"><ref bean="outdatetProjectsMailSender"/></property>
<property name="targetMethod"><value>sendEmails</value></property>
</bean>


<bean id="dummyCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="dummyJobDetail"/>
</property>
<property name="cronExpression">
<value>0/10 * * * * ?</value>
</property>
</bean>


<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="autoStartup" value="true"/>
<property name="waitForJobsToCompleteOnShutdown" value="true"/>
<property name="quartzProperties">
<props>
<!-- Plugins -->
<prop key="org.quartz.plugin.shutdownhook.class">
org.quartz.plugins.management.ShutdownHookPlugin
</prop>
<prop key="org.quartz.plugin.shutdownhook.cleanShutdown">true</prop>
</props>
</property>
<property name="triggers">
<list>
<ref bean="dummyCronTrigger"/>
</list>
</property>
</bean>

</beans>


Co to wszystko znaczy? Ciąg dalszy w następnym poście!

Brak komentarzy: