El tema de las anotaciones son más que conocidas en el mundo java y hoy en día casi todo lo configuramos con anotaciones, aquellos tiempos en los que se hacía todo en interminables ficheros xml que nadie era capaz de seguir se acabaron (gracias a dios).

Pero cuantas veces, sobre todo para los que usamos Spring Framework, hemos visto aquello de @EnableSomething y luego hacer uso de @Something? no os habéis preguntado nunca como funciona?

Todo esto surge, porque hace poco me surgió una necesidad en la que encajaba completamente una custom annotation para reutilizar el código. El caso en cuestión era suscribirse a eventos en kafka y me resultaba tedioso el tener que configurar kafka en cada módulo donde quisiera escuchar un evento y más aún los if que surgían… pongamos un ejemplo:

@KafkaListener(topics = "mitopic)
public void listener(String payload){
Event event = Event.from(payload);
if (event.name == "READ") {
// do something
} else if (event.name == "WRITE" {
// do something
} else if (event.name == "DELETE" {
// do something
}
}

Esta solución al menos a mi, me hace sangrar los ojos.. y es que no me llevo bien con los ifs y menos aún, con los concatenados.

Podríamos pensar en crear tres métodos distintos, uno para cada evento. Pero ni con esas vamos a conseguir quitarnos los ifs. Sin embargo, resultaría super sencillo contar con algo así:

@MyCustomAnnotation({Event.READ, Event.WRITE, Event.DELETE})
public void onEvent(String payload){
// do something
}

Incluso si quisiésemos separarlo, hasta quedaría bien:

@MyCustomAnnotation({Event.READ})
public void onRead(String payload){
// do something
}
@MyCustomAnnotation({Event.WRITE})
public void onWrite(String payload){
// do something
} 
@MyCustomAnnotation({Event.DELETE})
public void onDelete(String payload){
// do something
} 

¿A que queda mejor? ¿pero como hacerlo? Lo veremos en la segunda parte…

Anuncios

Estoy aprovechando un pequeño proyecto personal para profundizar un poco más en la gestión del estado de una aplicación con @ngrx/store. Uno de los casos de uso que incluye es el registro de un usuario, para el que he optado por hacer un wizard.
Leer el resto de esta entrada »

Mira que había visto varias veces que el uso de async/await era sencillo, pero aún me estaba resistiendo y optando por el uso de promesas. Viendo que está soportado en la mayoría de navegadores de escritorio actuales y en las versiones más recientes de node, he decidido hacer unas pruebas para enamorarme de esta feature al instante.
Leer el resto de esta entrada »

Esta mañana hemos tenido unos problemillas en Travis con unos tests que no iban por una comparación de horas, cuando en local sí lo hacían. Nos hemos dado cuenta que era porque en local tenemos un timezone distinto al de Travis (y por cómo está hecho el test). Esto se soluciona rápidamente estableciendo la variable de entorno TZ antes de hacer nada. Para ello, hemos añadido la siguiente entrada en nuestro fichero travis.yml:

Ultimamente dedico más tiempo al mundo javascript que al java, más concretamente a entornos MEAN y mi mente se está pasando a un estilo de vida asíncrono. El stack MEAN y el desarrollo en node es relativamente ‘nuevo’, y siempre surgen dudas acerca de la seguridad.

Leer el resto de esta entrada »

Que un componente acceda a su componente padre en Angular es más fácil de lo que parece.
Leer el resto de esta entrada »

Pues ya tenemos entre nosotros la nueva major version de Angular desde hace un par de semanas. Alguno se ha llevado las manos a la cabeza pensando que íbamos a tener que cambiar toda nuestra base de código a la nueva versión. A mi me ha pasado también con la librería asb-dnd, de la que ya se escribió con anterioridad, y del que ya se hizo un refactor para adaptar a Angular Universal.
Ahora, cerraremos la trilogía adaptando la librería a la última versión de Angular (4.0.1 en el momento de escribir estas líneas). Para ello, podemos hacer dos cosas. Veamos pues cuáles son.
Leer el resto de esta entrada »

Hace poco publiqué este artículo donde creé una sencilla librería para drag&drop con Angular.

La solución es válida, pero tiene un problema. Leer el resto de esta entrada »

El otro día me estaba preguntando cómo hacer para enviar cabeceras de autenticación con Angular en todas mis peticiones HTTP. En AngularJS lo resolvía fácilmente con un interceptor, pero aquí ya no tenemos de eso. Leer el resto de esta entrada »

Después de un mes que ha pasado volando, volvemos con otro artículo sobre docker. Y es que por poco que hayas “jugado” con contenedores, te habrás topado con el problema de la hora dentro del propio contenedor. Veamos pues cómo solucionarlo!!!

Leer el resto de esta entrada »

A %d blogueros les gusta esto: