Ir al contenido principal

Entradas

Mostrando entradas de marzo, 2011

Definición y obtención de servicios con Spring

Una de las múltiples características del framework Spring es la inyección de dependencias. Mediante la misma, podemos definir los beans que implementan la lógica de nuestras aplicaciones. De esta forma nos podemos olvidar de la gestión de los mismos puesto que Spring lo hará por nosotros. Hay varias formas de definir nuestros beans: Directamente los definimos en nuestro fichero de contexto de Spring ( applicationContext.xml ) mediante etiquetas <bean> . En la definición del mismo podemos asignarle al mismo otros beans  que hayamos definido o propiedades (tanto simples como complejas como listas o maps). También podemos definirlos mediante anotaciones del tipo @Service("nombreServicio") en la propia clase de nuestro servicio. Lo único que deberemos añadir a nuestro fichero de contexto son las siguientes entradas para indicar a Spring en qué paquete encontrar las clases que contienen anotaciones.      Nuestra clase tendría un aspecto parecid

Matemáticas y cine.

El otro día estaba viendo por la televisión una película llamada 21 blackjack . En una escena de la película el profesor de matemáticas ( Kevin Spacey ) le presenta a uno de sus alumnos la siguiente situación: se encuentra en un concurso en la que debe escoger entre tres puertas (1,2 y 3). En dos de ellas hay una cabra, sin embargo en una de las 3 hay un flamante coche nuevo. El alumno responde que quiere abrir la puerta. El presentador, conocedor de lo que hay detrás de cada puerta decide abrir otra puerta diferente mostrando detrás de ella una cabra. El profesor se dirige al alumno y le pregunta, ¿cambiarías la puerta o te quedarías con la puerta que tienes? Muchos de nosotros cambiaríamos de puerta pensando que es una treta del presentador para engañarnos. ¿Cual elegiríais vosotros? Al comienzo tenemos 1/3 de probabilidades de acertar la puerta donde está el coche. Una vez que el presentador abre la puerta con una cabra, la mayoría de gente piensa que hay la misma probabilidad de

Modificación de nivel de log con Spring

Es muy importante desarrollar nuestras aplicaciones con un sistema de log adecuado y fácilmente configurable. Todas nuestras aplicaciones deberían tener un diseño de log correcto para la detección rápida de errores. Recordemos que la mayor parte del esfuerzo (dinero) en las aplicaciones se pierde en el mantenimiento de las mismas. En este artículo vamos a describir como configurar un listener del framework Spring que lee dinámicamente la configuración de nuestro fichero de log y nos permite así modificar en caliente el nivel de log. Esto también se puede realizar programaticamente mediante la API proporcionada por algunas librerías de log como log4j. Lo primero que hecho para ilustrar el ejemplo ha sido crear una aplicación web muy simple con Eclipse que contiene un servlet. Éste lo único que va a realizar es escribir una sentencia de log de ERROR, otra de INFO y otra de DEBUG. El código del método doGet servlet es el siguiente: /**  * @see HttpServlet#doGet(HttpServletRe

Sistemas operativos móviles

Un sistema operativo móvil o SO móvil es un sistema operativo que controla un dispositivo móvil al igual que las computadoras utilizan Windows o Linux entre otros. Sin embargo, los sistemas operativos móviles son bastantes más simples y están más orientados a la conectividad inalámbrica, los formatos multimedia para móviles y las diferentes maneras de introducir información en ellos. Capas de un sistema operativo móvil Kernel.  El núcleo o kernel proporciona el acceso a los distintos elementos del hardware del dispositivo. Ofrece distintos servicios a las superiores como son los controladores o drivers para el hardware, la gestión de procesos, el sistema de archivos y el acceso y gestión de la memoria. Middleware . El middleware es el conjunto de módulos que hacen posible la propia existencia de aplicaciones para móviles. Es totalmente transparente para el usuario y ofrece servicios claves como el motor de mensajera y comunicaciones, códecs multimedia, intérpretes de páginas web

Quartz

En Java podemos ejecutar acciones automáticamente cada cierto tiempo con la clase java.util.Timer. Pero a veces  necesitamos ejecutar tareas de forma automática en un determinado momento, como por ejemplo borrar ficheros de directorios temporales a las 5:00 A.M, comprobar si algún sistema externo está funcionando correctamente desde las 08:00 A.M.  o hacer copias de determinadas tablas de bases de datos los domingos de madrugada. Para realizar estas tareas de forma robusta y eficaz tenemos  Quartz ,  un framework open source con licencia Apache 2.0 para la planificación y gestión de tareas. Actualmente se utiliza con éxito en muchos proyectos como Spring   y conocidas organizaciones como JBoss , Cisco o Adobe . Entre sus principales características están: Se puede utilizar tanto en aplicaciones J2EE y J2SE. Planificación flexible de tareas mediante expresiones CRON. Mantenimiento del estado de tareas en caso de fallos del sistema (información de estado almacenada en BD). Posibil

Loterias

Hace ya algún tiempo vengo desafiando las leyes de la probabilidad con los boletos semanales del Euromillon y Primitiva . Harto de leer “BOLETO NO PREMIADO” dediqué un tiempo a comprobar si la probabilidad de ocurrencia de los números en los sorteos era parecida y llegué a la conclusión de que no era así. Hay páginas de estadísticas de la lotería  en las que se puede consultar el número de ocurrencias de los números, el número de ausencias, la probabilidad con la que aparece un número, probabilidad que aparezcan números seguidos, etc..Todo esta información esta disponible para los N últimos sorteos. Con todas estas cartas sobre la mesa comencé a implementar un programa en Java para generar los números más probables para un sorteo de lotería con X bolas de combinación ganadora e Y números posibles.  Lo primero que hace el programa es construir un fichero de entrada de datos a partir de los datos de los sorteos anteriores: Un parser procesa este fichero y genera otro fichero co