El pasado 19 de junio tuve la suerte de poder atender al JBCNConf la conferencia sobre Java que se organiza en Barcelona de unos años para aquí. Acudí allí enviado Fon, que es la empresa donde trabajo para dar cuenta de lo que allí se contó. El evento estuvo muy bien organizado, con ponentes que tenían mucho nivel y temas interesantes del mundo «Java». La mayoría de las charlas se englobaron en los temas de arquitecturas orientadas a eventos (Event driven, CQRS, etc), programación reactiva, principios del desarrollo de micro servicios y las novedades de Java 9. Parece que estos son y van a ser los temas más de moda en los meetups de Java en los próximos meses. Dentro de las charlas que atendí, las que más me gustaron fueron:
Java Libraries You Can’t Afford to Miss de Andrés Almiral
![IMG_20170619_111151](https://coconutcode.wordpress.com/wp-content/uploads/2017/07/img_20170619_111151.jpg?w=768&h=1024)
Varias de las librerías que explicó fueron algunas muy conocidas como Lombok, Mockito, Jackson o Guava. Otras librerías interesantes que comentó fueron:
- Retrofit(http://square.github.io/retrofit/): permite crear clientes de apis rest declarando un interface, de manera muy similar a como lo hace Feign de Netflix, pero utilizando un builder para instanciarlo.
- Mbassador(https://java.libhunt.com/project/mbassador): es una librería que implementa el patrón observable de una manera muy eficiente y sencilla de usar.
- Jdeferred(https://github.com/jdeferred/jdeferred): librería que nos permite hacer promesas para tratar con acciones asíncronas de manera similar a como lo hace angular 2.
- Junitparams(https://github.com/Pragmatists/JUnitParams): permite parametrizar pruebas unitarias con lo que se puede evitar repetir mucho código.
- Spock(http://spockframework.org): es un Framework de Groovy que nos permite escribir pruebas de una manera muy legible cercana al BDD. Vimos ejemplos de clases Java con pruebas unitarias hechas con Spock en diferentes charlas, lo que indica que esta combinación es cada vez más usada. Creo que sería interesante hacer alguna prueba de concepto en la comunidad backend, reescribiendo algunas pruebas unitarias usando Spock para ver las ventajas y desventajas de usarlo.
- Awaitility(https://github.com/awaitility/awaitility): está librería nos facilita la creación de pruebas cuando tenemos sistemas asíncronos, definiendo por ejemplo asserts configurados para tener una respuesta en un determinado timeout o fallar en otro caso.
- Wiremock(http://wiremock.org): nos permite hacer mocks o stubs de apis rest que no tenemos disponibles, por ejemplo porque estamos en el entorno de pruebas. Aquí hay un tutorial donde está bien explicado http://www.baeldung.com/introduction-to-wiremock.
Real World Java 9 de Trisha Gee
![IMG_20170619_121341](https://coconutcode.wordpress.com/wp-content/uploads/2017/07/img_20170619_121341.jpg?w=840&h=630)
- Jigsaw: funcionalidad que mejora la modulariad y encapsulación del código. A partir de Java 9, si utilizamos esta funcionalidad(no es obligatorio por temas de compatibilidad con versiones anteriores) tendremos que añadir en cada módulo un fichero llamado module-info.java donde definimos el nombre del módulo, que clases o paquetes son accesibles desde fuera de nuestro modulo y cuáles se requieren. Parece que va ser un poco lioso al principio y Trisha recomendaba utilizarlo en proyectos nuevos más que hacerlo en proyectos ya muy avanzados. Trisha hizo ejemplos utilizando Intellij y la buena noticia es que este IDE tiene una buena integración y va escribir este fichero casi por si mismo, siguiendo indicaciones nuestras al resolver fallos de compilación relacionados con la definición del fichero module-info.java. Por ejemplo si no tenemos acceso a un paquete de una librería que tenemos incluida en gradle, Intellij va ser capaz de añadir la línea importándolo al resolver el fallo de compilación resultante de no tenerlo.
- Nuevos métodos factoría para inicializar colecciones. Comentó que en su opinión esta va ser la funcionalidad más utilizada. Vamos a tener nuevos métodos para inicializar listas, mapas, etc, de manera menos tediosa que ahora. Por ejemplo un mapa se va poder inicializar escribiendo: Map.of(«Hello», 1, «World», 2).
![IMG_20170619_125439](https://coconutcode.wordpress.com/wp-content/uploads/2017/07/img_20170619_125439.jpg?w=840&h=630)
- Java 9 incluye nuevos métodos e interfaces para hacer programación reactiva dentro de Java SE 9 Reactive Streams API.
When, why and how to CQRS de Sebastian Daschner
![IMG_20170619_143347](https://coconutcode.wordpress.com/wp-content/uploads/2017/07/img_20170619_143347.jpg?w=840&h=630)
Star Trek: BDD Enterprise de Tomasz Dubikowski
The Long Road de Sandro Mancuso
Taller de Test Refactoring de Wlodek Krakowski
![IMG_20170621_093434](https://coconutcode.wordpress.com/wp-content/uploads/2017/07/img_20170621_093434.jpg?w=840&h=630)