Entradas

Mostrando las entradas de 2020

Stub con Jetty embebido en Test con JUnit 5

En esta entrada mostraré un pequeño ejemplo para utilizar al servidor Jetty embebido durante las pruebas (con JUnit 5 ) para cuando necesitemos un Stub de algún servicio fuera de nuestro alcance. 1. Las dependencias: <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>9.4.28.v20200408</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.6.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.6.0</version> <scope>test</scope> </dependency> 2. La cl...

Codersrank - TOP DEVELOPERS IN JAVA [UPDATE]

Imagen
Ahora estoy en el puesto número 1 en  codersrank , así que dejaré las capturas para el recuerdo 👻: Chile + Java = 1 Chile + Santiago + Java = 1 ¿y cual será el motivo si mi puntaje no ha cambiado? 😀

GraalVM + Java 11 + AWS Lambda + PostgreSQL + DynamoDB + Docker

Imagen
En esta ocasión mostraré la travesía que fue conseguir compilar un jar con GraalVM y que luego corra en AWS Lambda . ¿Por qué hacerlo? En la actualidad, el cold start de lanzar un jar en un lambda es alto, varios segundos (en node puede ser medio segundo o menos), pero luego de eso cada invocación tiene un tiempo de respuesta bueno, son solo algunos milisegundos. Entonces mi motivación es hacer cada vez el cold start menor y si mejora el tiempo de respuesta de las siguientes invocaciones es aún mejor 😉. ¿Que se necesita? Java 11 Docker Maven Acceso a Lambdas en AWS ¿Cómo hacerlo? Esta es la parte entretenida, en un principio fue compleja pero luego de entenderla fue divertido. Para poder lanzar el jar compilado hay que utilizar AWS Lambdas con un custom runtime. El custom runtime tiene un comportamiento que debe ser seguido y se describe en este link y acá . En resumen: existe una URL para obtener un evento, otra para indicar si hay un error al iniciar, también una...

Codersrank - TOP DEVELOPERS IN JAVA

Imagen
Hoy solo quiero dejar las capturas de pantalla de Codersrank en las cuales tengo el agrado de aparecer 😊, no se por cuanto tiempo estaré en el ranking, así que las guardo de recuerdo 😊. Filtro: Chile + Santiago + Java = 1 Filtro: Chile + Java = 6 llegar al 1 en Chile será un poco dificil...

Buenas Practicas creando AWS Lambdas con Java

En esta entrada recopilaré buenas practicas que he aprendido al momento de crear Lambdas en AWS con Java y Maven. Algunas son mis recomendaciones y otras son desde AWS (sobre todo como evitar el cold start). Comenzamos: Todo lo que pueda ser estático tiene que ser estático, de esta manera serán reutilizados en los siguientes request que se realicen en la misma instancia del Lambda. inicializar todo  lo que puedan en el handler del lambda en un bloque estático:  public class LambdaHandler implements RequestStreamHandler { static { // acá } @Override public void handleRequest(InputStream is, OutputStream os, Context ctx) throws IOException { } } Hay que hacer esto porque cuando se instancia la clase hay más poder de computo que el configurado como límite para la lambda, si hay conexiones a DynamoDB hay que instanciar la conexión y hacer una Query (cualquiera) lo importante es que se instancien todas las dependencias. Lo mismo ocurre para conexiones con R...

Java + Cognito: Pre Token Generation Lambda Trigger

En esta ocasión dejaré el código necesario para poder generar la respuesta en un Lambda de AWS que se ejecute como un  Pre Token Generation Lambda Trigger , no es ninguna explicación de que es Lambda o Cognito, lo hago porque no encontré en el universo un ejemplo que explicara el formato de la respuesta usando Java, usando NodeJS habían cientos incluso desde la misma documentación de AWS... Si alguien pasa por el mismo problema y llega acá, este es el código: public class PreTokenGenerationLambdaTrigger implements RequestStreamHandler { private static final ObjectMapper OM; static { OM = new ObjectMapper(); OM.enable(SerializationFeature.INDENT_OUTPUT); ServiceLoader.load(LambdaServicio.class).forEach(LambdaServicio::cargar); } @Override public void handleRequest(InputStream is, OutputStream os, Context ctx) throws IOException { final var request = OM.readTree(is); final var response = (ObjectNode) request; OM.writeValue(os, response); } ...