12 octubre 2012

Timer y TimerTask. Programar tareas. TWF.


Hoy voy a hablar de los programadores de tareas de Java. En concreto las clases Timer y TimerTask.


Hay algo que tengo muy claro: No me gustan los hilos ni la concurrencia, así que todo API / utilidad que me abstraiga de utilizar y tener en cuenta toda esa parafernalia es bien recibida, máxime para cuando es algo que no te tiene que requerir mucho tiempo y (nunca mejor dicho) quedarte bloqueado hasta terminarla.

Así que más adelante, se muestra un ejemplo de cómo manejar Timer y TimerTask para ejecutar una tarea: cada día a la misma hora, para ejecutar cada 'n' horas, o 'n' minutos, para ejecutarla una vez a una hora concreta o ejecutarla una vez pasado un tiempo. Y todo esto Thread-Worry-Free. Maravilloso.


10 octubre 2012

Ejemplos de split de Strings

Siempre me pasa lo mismo, voy a utilizar el método split de la clase String, y no estoy seguro del todo cómo se va a comportar, así que dejo por aquí una clase que ilustra bastante bien el comportamiento de este método tan útil y de paso, una versión "mejorada" de split el cual no te incluye espacios en blanco.

09 octubre 2012

Excepciones personales


Una de las cosas que más se repiten en un proyecto de desarrollo, es el tema de log y excepciones. Lo tengo super trillado ya pero creo que vendría bien el tener a mano una guía con unas clases ya predefinidas que me abstrayeran de hacerlas siempre.
Comenzaré con una clase de excepciones propia que básicamente sea una extensión de la clase Exception y que la única particularidad, sea que mediante el código de error genere un mensaje u otro.

Esto lo haré así ya que en todos los proyectos que he trabajado, o bien necesitaban localización o mucho mensaje personalizado y siempre acabo haciendo lo mismo. Os dejo un ejemplo de clase personalizada y de un fichero de códigos de error.

01 octubre 2012

Singleton


Estoy preparando una entrada sobre cómo parsear un fichero de properties dividido por secciones, y mientras estaba escribiendo el código de ejemplo, se me ha venido a la cabeza que lo mejor para implementar un objeto de propiedades, es el que tenga una única instancia dentro del código. Es por esto, por lo que lo mejor siempre es crear un objeto Singleton.


Es útil, dado que una aplicación se arrancará, y lo primero que hará es leer un fichero de propiedades para empezar a funcionar. Pero dicha aplicación puede tener varias instancias, o que durante la ejecución, necesite echar mano de esas propiedades. Así pues, si ya hemos leído y parseado todo el contenido de ese objeto de propiedades ¿Para qué volverlo a leer si podemos compartir un único objeto entre todas las clases?

Después del salto os muestro un codiguito de ejemplo de cómo declarar, instanciar y usar un ejemplo de tipo singleton.


21 septiembre 2012

HashMap: Recorrer y recorrer


Siempre me pasa, que cuando paso mucho tiempo sin recorrer un HashMap, tengo que recurrir a Google para ver una manera más o menos eficiente de hacerlo. Esto es debido a que el foreach, no lo tengo muy instaurado en mi manera de programar, y mira que me gusta, pero no hay manera de que se me quede.



Así que os propongo una manera de recorrer un HashMap de la forma más eficiente que he encontrado, que es separando qué quieres obtener, sólo las claves, sólo los valores, o ambos.

20 septiembre 2012

Escribir y leer objetos de memoria en vez de texto

Para poder escribir objetos serializables en memoria, lo primero de todo, si no queremos que nos dé una NotSerializableException hemos de definir nuestros objetos propios implementando el interfaz implements Serializable. Con esto,  deberíamos de ser capaces de poder guardar cualquier tipo de objeto propio en fichero.

Puede ocurrir, que estemos en un proyecto gigantesco, y heredemos tipos de objetos de los cuales no tengamos ningún control  y no podamos definirlos como serializables.

Para evitar problemas, lo ideal sería que no incluyéramos ese objeto en el nuestro como un atributo, pero si nos es imposible, o sencillamente es muy útil u óptimo almacenar ese objeto en el nuestro para su uso interno, podemos evitar que se incluya en el objeto que se va a guardar en fichero marcándolo como transient. Claro está, que cuando vayamos a recuperar este objeto, ese atributo no estará disponible y será null si lo miramos con un debugger.

Tras esta breve introducción, paso a poner un ejemplito del uso de todo esto.