Entradas

Mostrando las entradas de 2021

Testcontainers + Localstack +AWS Java SDK 2.x

Al usar localstack en las pruebas y el sdk 2.x de AWS para Java no es tan simple como sacar el endpoint y el credential provider de localstack y pasarlo al cliente de aws, hay que constuir primeros los objetos del sdk 2 para pasarlos al cliente con datos que entrega localstack: private static LocalStackContainer ls = null; @BeforeAll public static void before() { ls = new LocalStackContainer(DockerImageName.parse("localstack/localstack")) .withServices(DYNAMODB); ls.start(); final var credentials = ls.getDefaultCredentialsProvider().getCredentials(); final var ddbc = DynamoDbClient.builder() .endpointOverride(ls.getEndpointOverride(DYNAMODB)) .credentialsProvider( StaticCredentialsProvider.create(AwsBasicCredentials.create( credentials.getAWSAccessKeyId(), credentials.getAWSSecretKey()))).build(); } ese el código para construir el cliente de dynamo usan...

Experimento concurrente

En esta entrada dejaré el resultado de un experimento que surgió por una difícil pregunta que me generó varias dudas... El experimento es revisar el comportamiento de un programa usando un Map en forma concurrente: Comenzamos creando la clase con el map, luego agregarle algunos datos y el main: public class Concurrido { private final Map<Integer, String> estado = new HashMap<y>(); { IntStream.rangeClosed(1, 1_000_000) .forEach(i -> estado.put(i, String.valueOf(1))); } public static void main(String[] args) throws InterruptedException { final var c = new Concurrido(); final var t1 = new Thread(() -> { c.m1(); System.out.println("m1 terminado"); }); final var t2 = new Thread(() -> { c.m2(); System.out.println("m2 terminado"); }); t1.start(); t2.start(); t1.join(); t2.join(); System.out.println("fin"); } el main lanzará 2 hilos...