blog de ElderMael

Crear una aplicación web rápidamente usando Spring Boot

Estoy trabajando en un proyecto nuevo en el cual me dieron carta blanca para poder escoger con que trabajar. Lo que tuve bien en claro es que quería empezar a usar Java 8 y como ya tengo algo de experiencia con Spring decidi también usar este framework.

Si ustedes ya tienen experiencia usando Spring, saben que para usar Spring MVC hay que configurar muchas cosas antes de poder ver al menos una página web sencilla. Entre todo esto hay que configurar el deployment descriptor (i.e. el archivo web.xml); o si estan usando Java EE (Evil Edition?) con un contenedor que soporte el spec de Servlet 3.0+, igual necesitan configurar un WebApplicationInitializer.

Pero vamos, aunque hoy en día es posible configurar Spring sin usar una sola línea de XML sigue siendo mucho código por escribir solo para empezar (y ni siquiera he tocado el configurar otros frameworks como Hibernate, Thymeleaf, JSF, etc.).

Kata de palíndromos con Streams (en Scala)

Pues resulta y pasa que para una entrevista tuve que resolver un problema cuya definición (a lo que recuerdo) era:

Dada una lista de palabras, por cada elemento hacer lo siguiente:

  • Obtener una combinación de las letras de la palabra las cuales sea un palíndromo, i.e. una palabra que se lee indistinguiblemente al derecho o al revés; imprimirla en consola.
  • Si no se encuentra dicha combinación, imprimir "-1" en la consola.

E.g., teniendo la lista de palabras "racecar", "icicv", "dar", deberia de imprimirse algo como "racecar", "civic", -1.

Usando el ListeningExecutorService de Guava

Antes de conociera algo de Hystrix en una aplicacion que mantengo tuvimos varios problemas con un servicio de notificaciones. Este servicio dependia de otro servidor que, como todo, a veces fallaba.

El detalle es que el proceso de notificación se hacía durante el proceso principal de la aplicacion; cuando se realizaban las llamadas correspondientes al servicio el proceso se detiene o lanzaba excepción... pero esto era en el mejor de los casos, también ocurrio que no especificamos timeouts para el servicio y por lo tanto el proceso principal de la aplicacion podia quedarse varado hasta por un día (que era el timeout por defecto del socket que se abría por medio de otra libreria).

En fin, el perder las notificaciones no era opción y tampoco lo era detener el proceso hasta que estas notificaciones se entregaran. Por lo tanto, optamos por hacer algo como esto:

Código “flecha” y cláusulas de guardia

Hace poco me encargaron cambiar un código bastante viejo para que pudiéramos usarlo en una capa de Batch donde se requiere dividir bastante lo que se quiere hacer i.e. hacerlo en lo que Spring Batch llama Tasklets.

Obviamente llego el momento en que tuve que seguir el código para entender que es lo que hacía (además de preguntar qué es lo que se supone que debe hacer, cosa diferente) y mi sorpresa fue que me topé con un código que se veía similar a esto...

Distribuir contenido