Banear
sábado, 27 de abril de 2013
lunes, 22 de abril de 2013
Ruta Marraxón - Belelle - BTT
Distancia aproximada: 40km
Tiempo estimado en bici de montaña: 4h
Dificultad: Alta
Track
Mapa
Perfil
Tiempo estimado en bici de montaña: 4h
Dificultad: Alta
Track
Mapa
Perfil
sábado, 13 de abril de 2013
The Working Thread: Creación y manejo de hilos paralelos con Java, Spring y Wicket
A veces, en nuestras aplicaciones web, nos puede interesar lanzar un proceso en "background" para actualizar datos de una tabla o cualquier otra tarea cuya ejecución pueda tardar bastantes segundos y sea conveniente lanzarla de forma asíncrona. Para hacer esto tenemos unas cuantas opciones:
- En versiones actuales de Spring, usando anotaciones, podemos marcar como @Async aquellos métodos que deseemos que se ejecuten de forma asíncrona en el servidor.
- Crear un proceso batch (con spring-batch o de forma "tradicional") que planificaremos para lanzarlo cada x minutos con Control-M, por ejemplo.
- Si no usamos Spring, en las nuevas versiones de J2EE, se pueden anotar métodos como tareas a ejecutar periódicamente cada x minutos.
- Crear hilos paralelos en el cliente, si optamos por esta solución, hay que tener en cuenta si es la apropiada para nuestro caso:
- Crearemos una clase "TheWorkingThread" que extenderá de Thread.
- En dicha clase, declararemos un constructor al que le pasaremos como parámetro un objeto perteneciente a la clase de nuestro servicio: public TheWorkingThread(WcService wcService){//...} y un atributo private WcService wcService; que inicializaremos en el constructor con el servicio que nos pasan como parámetro.
- En el contenido del método run(), colocaremos nuestra tarea, por ejemplo una llamada al método de nuestro servicio: wcService.tirarCadenaWc()
- Desde fuera del hilo, en nuestro caso en una clase que se ejecutaría en el hilo de Wicket, iniciaríamos el hilo a través del método start(), que ejecuta el método run() de TheWorkingThread en paralelo, de forma que el hilo de Wicket no tiene que esperar a que acabe la ejecución de TheWorkingThread.
- Hasta aquí, no hay ninguna novedad respecto al tratamiento habitual de hilos en Java (debéis tener en cuenta si necesitais sincronizar vuestros hilos si no son independientes o utilizais variables estáticas, si quereis reutilizar los hilos instanciados usando un pool de éstos y otras mejoras asociadas a evitar sorpresas en las ejecuciones y rendimiento de los hilos).
- La novedad para Wicket es que si vais a crear un hilo paralelo en el que necesitais acceder a un servicio declarado en el contexto de Spring con Wicket, debéis hacer lo siguiente, si no queréis que os salgan los errores asociados al Proxy:
Application application = ((Application) getApplication());
ServletContext sc = application.getServletContext();
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(sc);
WcService wcService = (WcService)(ctx.getBean("wcService",WcService.class));
ServletContext sc = application.getServletContext();
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(sc);
WcService wcService = (WcService)(ctx.getBean("wcService",WcService.class));
Así es como se debería obtener el wcService para pasárselo al constructor del hilo y no tener problemas con el Proxy. Cuando me refiero al proxy, hablo del de Spring, obviamente no tiene nada que ver con el de vuestra conexión a Internet (aunque la idea es parecida, un objeto que simula ser el objeto final pero realmente es un intermediario) :)
jueves, 11 de abril de 2013
lunes, 1 de abril de 2013
Ruta Ferrol - Chamorro - Caminata
Hoy, día 1 de Abril es la festividad de Chamorro. Así que de propina, cuelgo por aquí la ruta:
Distancia aproximada: 12km
Tiempo aproximado andando: 2.5h
Dificultad: Media-Baja
Mapa
Perfil
Tracks
Distancia aproximada: 12km
Tiempo aproximado andando: 2.5h
Dificultad: Media-Baja
Mapa
Perfil
Tracks
Suscribirse a:
Entradas (Atom)