Páginas

miércoles, 16 de diciembre de 2009

Spring + Quartz + Clustering

En Javi's Java podemos encontrar un estupendo post a cerca de Quartz, sobre qué es y cómo se configura dentro de nuestra aplicación Web por lo que no es necesario hablar mucho más del tema. En este post sólo me gustaría resaltar la sencillez y elegancia resultante de la integración de Quartz con Spring, como el mismo Javi comentaba en uno de los comentarios, que nos permite configurar una tarea en apenas un par de minutos.

Tampoco es necesario escribir ninguna línea de código como ejemplo para la integración con Spring ya que la documentación de Spring sobre el tema (cronExpression) es clara y sencilla.

¿Quién necesita ahora los crones de Linux o las tareas de Windows para programar tareas relacionas con nuestra aplicación Web?

Si además necesitamos ejecutar la aplicación en distintas instancias y no queremos que haya problemas, como que el proceso se ejecute simultáneamente en todas ellas, podemos configurar Quartz para que se ejecute en Clustering añadiendo sólo unas cuántas líneas extras en la configuración. Ejemplo de configuración en Spring para la ejecución de Quartz en clustering:

<bean name="job" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="whatabout.Job" /> <property name="jobDataAsMap"> <map> <!-- properties <entry key="timeout" value="" /> --> </map> </property> </bean> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="job" /> <property name="cronExpression" value="0 0 6 * * ?" /> </bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger" /> </list> </property> <property name="applicationContextSchedulerContextKey"> <value>applicationContext</value> </property> <property name="startupDelay" value="0" /> <property name="waitForJobsToCompleteOnShutdown" value="true" /> <property name="dataSource" ref="myDataSource" /> <property name="quartzProperties"> <props> <!-- ThreadPool --> <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop> <prop key="org.quartz.threadPool.threadCount">5</prop> <prop key="org.quartz.threadPool.threadPriority">5</prop> <!-- Job store --> <prop key="org.quartz.jobStore.misfireThreshold">60000</prop> <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop> <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop> <prop key="org.quartz.jobStore.useProperties">false</prop> <!-- Clustering --> <prop key="org.quartz.jobStore.isClustered">true</prop> <prop key="org.quartz.scheduler.instanceId">AUTO</prop> <prop key="org.quartz.jobStore.clusterCheckinInterval">30000</prop> </props> </property> </bean>

jueves, 9 de abril de 2009

Google App Engine and Struts

Recientemente hemos podido leer como ahora Google App Engine soporta Java. Ni corto ni perezoso me he lanzado a probarlo. Pero ya puestos no nos íbamos a conformar con probar un simple Servlet ¿no?

En este enlace podemos ver una prueba de Google App Engine funcionando con Struts 1.3.

Para desarrollar la aplicación y desplegarla he utilizado el plugin de Google para Eclipse.

Por ahora me he quedado aquí, pero habrá que seguir estudiando todas las posibilidades que Google App Engine nos ofrece a los desarrolladores Java.

viernes, 13 de febrero de 2009

Maven corrompe las imágenes

"Maven está corrompiendo las imágenes" es una frase que que he oido a tres compañeros de mi proyecto actual. Tranquilos, no os preocupeis por eso - les dije yo.

¿Por qué Maven corrompe las imágenes cuando por ejemplo, construimos un war con nuestra aplicación Web? Este problema surge cuando "filtramos" nuestros archivos de recursos (src/main/resources) para sustituir las variables indicadas con los delimitadores ${...}. Qué gran utilidad sin duda para poder construir nuestra aplicación Web para diferentes entornos de forma simple y automática.

¡¡Pero es que corrompe las imáganes!! La solución es bastante sencilla, sólo debéis buscar en Google las siguientes palabras: maven filtering resource images y en la segunda entrada, además de explicaros qué es eso del filtrado, os da la solución para que éste no corrampa las imágenes u otros archivos.

Aquí os pongo el fagmento en particular:

<project> ... <build> ... <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>**/*.jpg</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>**/*.jpg</include> </includes> </resource> ... </resources> ... </build> ...</project>


Aquí os dejo el enlace con más detalles: http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html