From 37a82cd1bd04a71814fd5b876b3ae124b3b83550 Mon Sep 17 00:00:00 2001 From: Philippe Date: Mon, 8 Jun 2020 02:22:11 -0300 Subject: [PATCH 01/10] [BAEL-2322] Apache BookKeeper --- apache-bookkeeper/Dockerfile | 2 + apache-bookkeeper/docker-compose.yml | 71 ++++++ apache-bookkeeper/pom.xml | 69 ++++++ .../tutorials/bookkeeper/BkHelper.java | 144 ++++++++++++ .../tutorials/bookkeeper/LedgerReader.java | 5 + .../tutorials/bookkeeper/LedgerWriter.java | 12 + .../baeldung/tutorials/bookkeeper/Main.java | 13 ++ .../bookkeeper/BkHelperIntegrationTest.java | 208 ++++++++++++++++++ .../src/test/resources/logback-test.xml | 13 ++ aws-reactive/.sts4-cache/classpath-data.json | 1 + 10 files changed, 538 insertions(+) create mode 100644 apache-bookkeeper/Dockerfile create mode 100644 apache-bookkeeper/docker-compose.yml create mode 100644 apache-bookkeeper/pom.xml create mode 100644 apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java create mode 100644 apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerReader.java create mode 100644 apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerWriter.java create mode 100644 apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/Main.java create mode 100644 apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperIntegrationTest.java create mode 100644 apache-bookkeeper/src/test/resources/logback-test.xml create mode 100644 aws-reactive/.sts4-cache/classpath-data.json diff --git a/apache-bookkeeper/Dockerfile b/apache-bookkeeper/Dockerfile new file mode 100644 index 0000000000..88c6bc281a --- /dev/null +++ b/apache-bookkeeper/Dockerfile @@ -0,0 +1,2 @@ +FROM openjdk:8 +COPY add target/apache-bookkeeper-0.0.1-SNAPSHOT.jar /app.jar diff --git a/apache-bookkeeper/docker-compose.yml b/apache-bookkeeper/docker-compose.yml new file mode 100644 index 0000000000..0ef4c41a4a --- /dev/null +++ b/apache-bookkeeper/docker-compose.yml @@ -0,0 +1,71 @@ +version: '3.0' +services: + zk: + image: zookeeper:3.6.1 + restart: always + ports: + - "2181:2181" + volumes: + - ./data/zk:/data + + bookie_init: + image: apache/bookkeeper:4.10.0 + environment: + BK_zkServers: "zk:2181" + BK_advertisedAddress: ${BK_PUBLIC_IP} + restart: on-failure + depends_on: + - zk + command: /opt/bookkeeper/bin/bookkeeper shell metaformat -nonInteractive + + bookie: + image: apache/bookkeeper:4.10.0 + restart: on-failure + environment: + BK_zkServers: "zk:2181" + BK_advertisedAddress: ${BK_PUBLIC_IP} + BK_httpServerPort: 3182 + ports: + - "3181:3181" + - "3182:3182" + volumes: + - ./data/bk:/data + depends_on: + - zk + - bookie_init + + bookie1: + image: apache/bookkeeper:4.10.0 + restart: on-failure + environment: + BOOKIE_PORT: 4181 + BK_zkServers: "zk:2181" + BK_advertisedAddress: ${BK_PUBLIC_IP} + BK_httpServerPort: 3182 + ports: + - "4181:4181" + volumes: + - ./data/bk1:/data + depends_on: + - zk + - bookie_init + + bookie2: + image: apache/bookkeeper:4.10.0 + restart: on-failure + environment: + BOOKIE_PORT: 4182 + BK_zkServers: "zk:2181" + BK_advertisedAddress: ${BK_PUBLIC_IP} + BK_httpServerPort: 3182 + ports: + - "4182:4182" + volumes: + - ./data/bk2:/data + depends_on: + - zk + - bookie_init + + + + diff --git a/apache-bookkeeper/pom.xml b/apache-bookkeeper/pom.xml new file mode 100644 index 0000000000..61bd582fd3 --- /dev/null +++ b/apache-bookkeeper/pom.xml @@ -0,0 +1,69 @@ + + + + 4.0.0 + apache-bookkeeper + 0.0.1-SNAPSHOT + apache-bookkeeper + jar + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + org.apache.bookkeeper + bookkeeper-server + ${org.apache.bookkeeper.version} + + + org.slf4j + slf4j-log4j12 + + + + + + org.testcontainers + testcontainers + 1.14.3 + test + + + + + + 4.10.0 + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.3 + + + com.baeldung.tutorials.bookkeeper.Main + true + + + + package + + shade + + + + + + + + + diff --git a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java new file mode 100644 index 0000000000..2fc07c13b3 --- /dev/null +++ b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java @@ -0,0 +1,144 @@ +package com.baeldung.tutorials.bookkeeper; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.Map.Entry; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import org.apache.bookkeeper.client.BKException; +import org.apache.bookkeeper.client.BookKeeper; +import org.apache.bookkeeper.client.BookKeeper.DigestType; +import org.apache.bookkeeper.client.LedgerHandle; +import org.apache.bookkeeper.client.api.LedgerMetadata; +import org.apache.bookkeeper.conf.ClientConfiguration; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.zookeeper.AsyncCallback; + +public class BkHelper { + + private static final Log log = LogFactory.getLog(BkHelper.class); + + public static BookKeeper createBkClient(String zkConnectionString) { + try { + ClientConfiguration cfg = new ClientConfiguration(); + cfg.setMetadataServiceUri("zk+null://zookeeper-host:2131"); + BookKeeper.forConfig(cfg).build(); + + + return new BookKeeper(zkConnectionString); + } + catch(Exception ex) { + throw new RuntimeException(ex); + } + } + + /** + * Creates a Ledger with the given name added as custom metadata + * @param bk + * @param name + * @param password + * @return + */ + public static LedgerHandle createLedger(BookKeeper bk, String name, byte[] password) { + try { + + return bk.createLedger(3,2,2, + DigestType.MAC, + password, + Collections.singletonMap("name", name.getBytes())); + } + catch(Exception ex) { + throw new RuntimeException(ex); + } + } + + /** + * Iterates over all available ledgers and returns the first one that has + * a metadata key 'name' equals to the given name + * @param bk + * @param name + * @return + * @throws Exception + */ + public static Optional findLedgerByName(BookKeeper bk, String name) throws Exception { + + Map ledgers = new HashMap(); + final AtomicInteger returnCode = new AtomicInteger(BKException.Code.OK); + final CountDownLatch processDone = new CountDownLatch(1); + + // There's no standard "list" operation. Instead, BK offers a generalized way to + // iterate over all available ledgers using an async visitor callback. + // The second callback will be called when there are no more ledgers do process or if an + // error occurs. + bk.getLedgerManager() + .asyncProcessLedgers( + (data,cb) -> collectLedgers(bk,data,cb,ledgers), + (rc, s, obj) -> { + returnCode.set(rc); + processDone.countDown(); + }, + null, + BKException.Code.OK, + BKException.Code.ReadException); + + processDone.await(5, TimeUnit.MINUTES); + + log.info("Ledgers collected: total found=" + ledgers.size()); + + byte[] nameBytes = name.getBytes(); + + Optional> entry = ledgers.entrySet().stream().filter((e) -> { + Map meta = e.getValue().getCustomMetadata(); + if ( meta != null ) { + log.info("ledger: " + e.getKey() + ", customMeta=" + meta); + byte[] data = meta.get("name"); + if ( data != null && Arrays.equals(data, nameBytes)) { + return true; + } + else { + return false; + } + } + else { + log.info("ledger: " + e.getKey() + ", no meta"); + return false; + } + }) + .findFirst(); + + + if (entry.isPresent()) { + return Optional.of(entry.get().getKey()); + } + else { + return Optional.empty(); + } + } + + public static void collectLedgers(BookKeeper bk, long ledgerId, AsyncCallback.VoidCallback cb, Map ledgers) { + log.info("ledgerId: " + ledgerId); + + try { + bk.getLedgerManager() + .readLedgerMetadata(ledgerId) + .thenAccept((v) -> { + log.info("Got ledger metadata"); + ledgers.put(ledgerId,v.getValue()); + }) + .thenAccept((v) -> { + cb.processResult(BKException.Code.OK, null, null); + }); + } + catch(Exception ex) { + throw new RuntimeException(ex); + } + } + + +} diff --git a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerReader.java b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerReader.java new file mode 100644 index 0000000000..14eaf7ee58 --- /dev/null +++ b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerReader.java @@ -0,0 +1,5 @@ +package com.baeldung.tutorials.bookkeeper; + +public class LedgerReader { + +} diff --git a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerWriter.java b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerWriter.java new file mode 100644 index 0000000000..fc5de1b86e --- /dev/null +++ b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerWriter.java @@ -0,0 +1,12 @@ +/** + * + */ +package com.baeldung.tutorials.bookkeeper; + +/** + * @author Philippe + * + */ +public class LedgerWriter { + +} diff --git a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/Main.java b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/Main.java new file mode 100644 index 0000000000..0160526832 --- /dev/null +++ b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/Main.java @@ -0,0 +1,13 @@ +package com.baeldung.tutorials.bookkeeper; + +import org.apache.bookkeeper.client.BookKeeper; + +public class Main { + + public static void main(String args[]) { + + BookKeeper bk = BkHelper.createBkClient(args[0]); + System.out.println("Connect OK"); + + } +} \ No newline at end of file diff --git a/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperIntegrationTest.java b/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperIntegrationTest.java new file mode 100644 index 0000000000..3995874ba7 --- /dev/null +++ b/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperIntegrationTest.java @@ -0,0 +1,208 @@ +package com.baeldung.tutorials.bookkeeper; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import org.apache.bookkeeper.client.AsyncCallback.AddCallback; +import org.apache.bookkeeper.client.AsyncCallback.CreateCallback; +import org.apache.bookkeeper.client.AsyncCallback.ReadCallback; +import org.apache.bookkeeper.client.BKException; +import org.apache.bookkeeper.client.BookKeeper; +import org.apache.bookkeeper.client.LedgerEntry; +import org.apache.bookkeeper.client.LedgerHandle; +import org.apache.bookkeeper.client.api.DigestType; +import org.apache.bookkeeper.client.api.ReadHandle; +import org.apache.bookkeeper.client.api.WriteAdvHandle; +import org.apache.bookkeeper.client.api.WriteHandle; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.zookeeper.AsyncCallback; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +class BkHelperIntegrationTest extends BkHelper { + + private static BookKeeper bk; + private byte[] ledgerPassword = "SuperS3cR37".getBytes(); + + private static final Log log = LogFactory.getLog(BkHelperIntegrationTest.class); + + @BeforeAll + static void initBkClient() { + bk = createBkClient("192.168.99.101:2181"); + } + + @Test + void whenCreateLedger_thenSuccess() throws Exception { + + LedgerHandle lh = bk.createLedger(BookKeeper.DigestType.MAC, ledgerPassword); + assertNotNull(lh); + assertNotNull(lh.getId()); + + CreateCallback cb = (rc, ll, ctx) -> { + + }; + + bk.asyncCreateLedger(3, 2, 2, BookKeeper.DigestType.MAC, "passwd".getBytes(), cb, null, Collections.emptyMap()); + //lh.get + +// CompletableFuture cf = bk.newCreateLedgerOp() +// .withDigestType(org.apache.bookkeeper.client.api.DigestType.MAC) +// .withPassword("password".getBytes()) +// .makeAdv() +// .execute(); + + log.info("[I33] Ledge created: id=" + lh.getId()); + } + + @Test + void whenListLedgers_thenSuccess() throws Exception { + + final AtomicInteger returnCode = new AtomicInteger(BKException.Code.OK); + final CountDownLatch processDone = new CountDownLatch(1); + + // There's no standard "list" operation. Instead, BK offers a generalized way to + // iterate over all available ledgers using an async visitor callback. + // The second callback will be called when there are no more ledgers do process or if an + // error occurs. + bk.getLedgerManager() + .asyncProcessLedgers( + (data,cb) -> processLedger(data,cb), + (rc, s, obj) -> { + returnCode.set(rc); + processDone.countDown(); + }, + null, + BKException.Code.OK, + BKException.Code.ReadException); + + processDone.await(5, TimeUnit.MINUTES); + } + + @Test + void whenWriteEntries_thenSuccess() throws Exception { + + LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); + + long start = System.currentTimeMillis(); + for ( int i = 0 ; i < 1000 ; i++ ) { + byte[] data = new String("message-" + i).getBytes(); + lh.append(data); + } + + byte[] data = new byte[] {}; + + CompletableFuture f = lh.appendAsync(data); + AddCallback cbw = (rc,ll,entryId,ctx) -> { + + }; + + lh.asyncAddEntry(data, cbw, null); + + lh.close(); + long elapsed = System.currentTimeMillis() - start; + log.info("Entries added to ledgerId " + lh.getId() + ". count=1000, elapsed=" + elapsed); + + + } + + @Test + void whenWriteAndReadEntries_thenSuccess() throws Exception { + + LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); + + long start = System.currentTimeMillis(); + for ( int i = 0 ; i < 1000 ; i++ ) { + byte[] data = new String("message-" + i).getBytes(); + lh.append(data); + } + + lh.close(); + long elapsed = System.currentTimeMillis() - start; + log.info("Entries added to ledgerId " + lh.getId() + ", elapsed=" + elapsed); + + Long ledgerId = findLedgerByName(bk,"myledger").orElse(null); + assertNotNull(ledgerId); + + lh = bk.openLedger(ledgerId, BookKeeper.DigestType.MAC, ledgerPassword); + long lastId = lh.readLastConfirmed(); + Enumeration entries = lh.readEntries(0, lastId); + + ReadCallback cbr; + lh.asyncReadEntries(0, lastId, + (rc,ledgerHandle,ee,ctx) -> { + while(ee.hasMoreElements()) { + LedgerEntry e = ee.nextElement(); + } + }, null); + + ReadHandle rh = bk.newOpenLedgerOp() + .withLedgerId(ledgerId) + .withDigestType(DigestType.MAC) + .withPassword("password".getBytes()) + .execute().get(); + + rh.read(0, lastId).forEach((entry) -> { + + }); + + rh.readAsync(0, lastId).thenAccept((ee) -> { + ee.forEach((entry) -> { + // .. + }); + }); + + while(entries.hasMoreElements()) { + LedgerEntry entry = entries.nextElement(); + String msg = new String(entry.getEntry()); + log.info("Entry: id=" + entry.getEntryId() + ", data=" + msg); + } + + } + + private void processLedger(long ledgerId, AsyncCallback.VoidCallback cb) { + log.info("ledgerId: " + ledgerId); + cb.processResult(BKException.Code.OK, null, null); + } + + + private CompletableFuture> listAllLedgers(BookKeeper bk) { + + final List ledgers = Collections.synchronizedList(new ArrayList<>()); + final CountDownLatch processDone = new CountDownLatch(1); + + bk.getLedgerManager() + .asyncProcessLedgers( + (ledgerId,cb) -> { + ledgers.add(ledgerId); + cb.processResult(BKException.Code.OK, null, null); + }, + (rc, s, obj) -> { + processDone.countDown(); + }, + null, BKException.Code.OK, BKException.Code.ReadException); + + CompletableFuture> cf = CompletableFuture.supplyAsync(() -> { + try { + processDone.await(1,TimeUnit.MINUTES); + return ledgers; + } + catch(InterruptedException ie) { + throw new RuntimeException(ie); + } + }); + + return cf; + } + + + +} diff --git a/apache-bookkeeper/src/test/resources/logback-test.xml b/apache-bookkeeper/src/test/resources/logback-test.xml new file mode 100644 index 0000000000..cea0f38eb8 --- /dev/null +++ b/apache-bookkeeper/src/test/resources/logback-test.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + diff --git a/aws-reactive/.sts4-cache/classpath-data.json b/aws-reactive/.sts4-cache/classpath-data.json new file mode 100644 index 0000000000..691f5fce94 --- /dev/null +++ b/aws-reactive/.sts4-cache/classpath-data.json @@ -0,0 +1 @@ +{"name":"aws-reactive","classpathEntries":[{"kind":"binary","path":"C:\\progs\\java\\openjdk11\\lib\\jrt-fs.jar","sourceContainerUrl":"file:/C:/progs/java/openjdk11/lib/src.zip","javadocContainerUrl":"https://docs.oracle.com/javase/11/docs/api/","isSystem":true,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-webflux\\2.2.1.RELEASE\\spring-boot-starter-webflux-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter-webflux/2.2.1.RELEASE/spring-boot-starter-webflux-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter\\2.2.1.RELEASE\\spring-boot-starter-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-logging\\2.2.1.RELEASE\\spring-boot-starter-logging-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\apache\\logging\\log4j\\log4j-to-slf4j\\2.12.1\\log4j-to-slf4j-2.12.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\apache\\logging\\log4j\\log4j-api\\2.12.1\\log4j-api-2.12.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\slf4j\\jul-to-slf4j\\1.7.29\\jul-to-slf4j-1.7.29.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\jakarta\\annotation\\jakarta.annotation-api\\1.3.5\\jakarta.annotation-api-1.3.5.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\yaml\\snakeyaml\\1.25\\snakeyaml-1.25.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/yaml/snakeyaml/1.25/snakeyaml-1.25-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/yaml/snakeyaml/1.25/snakeyaml-1.25-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-json\\2.2.1.RELEASE\\spring-boot-starter-json-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter-json/2.2.1.RELEASE/spring-boot-starter-json-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\jackson\\core\\jackson-databind\\2.10.0\\jackson-databind-2.10.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.10.0/jackson-databind-2.10.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.10.0/jackson-databind-2.10.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\jackson\\datatype\\jackson-datatype-jdk8\\2.10.0\\jackson-datatype-jdk8-2.10.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.0/jackson-datatype-jdk8-2.10.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.0/jackson-datatype-jdk8-2.10.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\jackson\\datatype\\jackson-datatype-jsr310\\2.10.0\\jackson-datatype-jsr310-2.10.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.0/jackson-datatype-jsr310-2.10.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.0/jackson-datatype-jsr310-2.10.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\jackson\\module\\jackson-module-parameter-names\\2.10.0\\jackson-module-parameter-names-2.10.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.10.0/jackson-module-parameter-names-2.10.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.10.0/jackson-module-parameter-names-2.10.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-reactor-netty\\2.2.1.RELEASE\\spring-boot-starter-reactor-netty-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter-reactor-netty/2.2.1.RELEASE/spring-boot-starter-reactor-netty-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\projectreactor\\netty\\reactor-netty\\0.9.1.RELEASE\\reactor-netty-0.9.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/projectreactor/netty/reactor-netty/0.9.1.RELEASE/reactor-netty-0.9.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/projectreactor/netty/reactor-netty/0.9.1.RELEASE/reactor-netty-0.9.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-handler-proxy\\4.1.43.Final\\netty-handler-proxy-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-handler-proxy/4.1.43.Final/netty-handler-proxy-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-handler-proxy/4.1.43.Final/netty-handler-proxy-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-codec-socks\\4.1.43.Final\\netty-codec-socks-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec-socks/4.1.43.Final/netty-codec-socks-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec-socks/4.1.43.Final/netty-codec-socks-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\glassfish\\jakarta.el\\3.0.3\\jakarta.el-3.0.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-validation\\2.2.1.RELEASE\\spring-boot-starter-validation-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter-validation/2.2.1.RELEASE/spring-boot-starter-validation-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\jakarta\\validation\\jakarta.validation-api\\2.0.1\\jakarta.validation-api-2.0.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.1/jakarta.validation-api-2.0.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.1/jakarta.validation-api-2.0.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\hibernate\\validator\\hibernate-validator\\6.0.18.Final\\hibernate-validator-6.0.18.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hibernate/validator/hibernate-validator/6.0.18.Final/hibernate-validator-6.0.18.Final-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\jboss\\logging\\jboss-logging\\3.4.1.Final\\jboss-logging-3.4.1.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\classmate\\1.5.1\\classmate-1.5.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/classmate/1.5.1/classmate-1.5.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/classmate/1.5.1/classmate-1.5.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-web\\5.2.1.RELEASE\\spring-web-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-beans\\5.2.1.RELEASE\\spring-beans-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-webflux\\5.2.1.RELEASE\\spring-webflux-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-webflux/5.2.1.RELEASE/spring-webflux-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-webflux/5.2.1.RELEASE/spring-webflux-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\synchronoss\\cloud\\nio-multipart-parser\\1.1.0\\nio-multipart-parser-1.1.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/synchronoss/cloud/nio-multipart-parser/1.1.0/nio-multipart-parser-1.1.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/synchronoss/cloud/nio-multipart-parser/1.1.0/nio-multipart-parser-1.1.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\synchronoss\\cloud\\nio-stream-storage\\1.1.3\\nio-stream-storage-1.1.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/synchronoss/cloud/nio-stream-storage/1.1.3/nio-stream-storage-1.1.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/synchronoss/cloud/nio-stream-storage/1.1.3/nio-stream-storage-1.1.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\s3\\2.10.27\\s3-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/s3/2.10.27/s3-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/s3/2.10.27/s3-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\aws-xml-protocol\\2.10.27\\aws-xml-protocol-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.10.27/aws-xml-protocol-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.10.27/aws-xml-protocol-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\aws-query-protocol\\2.10.27\\aws-query-protocol-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/aws-query-protocol/2.10.27/aws-query-protocol-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/aws-query-protocol/2.10.27/aws-query-protocol-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\protocol-core\\2.10.27\\protocol-core-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/protocol-core/2.10.27/protocol-core-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/protocol-core/2.10.27/protocol-core-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\sdk-core\\2.10.27\\sdk-core-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/sdk-core/2.10.27/sdk-core-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/sdk-core/2.10.27/sdk-core-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\profiles\\2.10.27\\profiles-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/profiles/2.10.27/profiles-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/profiles/2.10.27/profiles-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\jackson\\core\\jackson-core\\2.10.0\\jackson-core-2.10.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.10.0/jackson-core-2.10.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.10.0/jackson-core-2.10.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\auth\\2.10.27\\auth-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/auth/2.10.27/auth-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/auth/2.10.27/auth-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\eventstream\\eventstream\\1.0.1\\eventstream-1.0.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/eventstream/eventstream/1.0.1/eventstream-1.0.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/eventstream/eventstream/1.0.1/eventstream-1.0.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\http-client-spi\\2.10.27\\http-client-spi-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/http-client-spi/2.10.27/http-client-spi-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/http-client-spi/2.10.27/http-client-spi-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\regions\\2.10.27\\regions-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/regions/2.10.27/regions-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/regions/2.10.27/regions-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\jackson\\core\\jackson-annotations\\2.10.0\\jackson-annotations-2.10.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.0/jackson-annotations-2.10.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.0/jackson-annotations-2.10.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\annotations\\2.10.27\\annotations-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/annotations/2.10.27/annotations-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/annotations/2.10.27/annotations-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\utils\\2.10.27\\utils-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/utils/2.10.27/utils-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/utils/2.10.27/utils-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\aws-core\\2.10.27\\aws-core-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/aws-core/2.10.27/aws-core-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/aws-core/2.10.27/aws-core-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\apache-client\\2.10.27\\apache-client-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/apache-client/2.10.27/apache-client-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/apache-client/2.10.27/apache-client-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.5.10\\httpclient-4.5.10.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/httpcomponents/httpclient/4.5.10/httpclient-4.5.10-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/httpcomponents/httpclient/4.5.10/httpclient-4.5.10-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\commons-codec\\commons-codec\\1.13\\commons-codec-1.13.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/commons-codec/commons-codec/1.13/commons-codec-1.13-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/commons-codec/commons-codec/1.13/commons-codec-1.13-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.4.12\\httpcore-4.4.12.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/httpcomponents/httpcore/4.4.12/httpcore-4.4.12-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/httpcomponents/httpcore/4.4.12/httpcore-4.4.12-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\netty-nio-client\\2.10.27\\netty-nio-client-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/netty-nio-client/2.10.27/netty-nio-client-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/netty-nio-client/2.10.27/netty-nio-client-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-codec-http\\4.1.43.Final\\netty-codec-http-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec-http/4.1.43.Final/netty-codec-http-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec-http/4.1.43.Final/netty-codec-http-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-codec-http2\\4.1.43.Final\\netty-codec-http2-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec-http2/4.1.43.Final/netty-codec-http2-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec-http2/4.1.43.Final/netty-codec-http2-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-codec\\4.1.43.Final\\netty-codec-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec/4.1.43.Final/netty-codec-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec/4.1.43.Final/netty-codec-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-transport\\4.1.43.Final\\netty-transport-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-transport/4.1.43.Final/netty-transport-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-transport/4.1.43.Final/netty-transport-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-resolver\\4.1.43.Final\\netty-resolver-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-resolver/4.1.43.Final/netty-resolver-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-resolver/4.1.43.Final/netty-resolver-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-common\\4.1.43.Final\\netty-common-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-common/4.1.43.Final/netty-common-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-common/4.1.43.Final/netty-common-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-buffer\\4.1.43.Final\\netty-buffer-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-buffer/4.1.43.Final/netty-buffer-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-buffer/4.1.43.Final/netty-buffer-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-handler\\4.1.43.Final\\netty-handler-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-handler/4.1.43.Final/netty-handler-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-handler/4.1.43.Final/netty-handler-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-transport-native-epoll\\4.1.43.Final\\netty-transport-native-epoll-4.1.43.Final-linux-x86_64.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-transport-native-epoll/4.1.43.Final/netty-transport-native-epoll-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-transport-native-epoll/4.1.43.Final/netty-transport-native-epoll-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-transport-native-unix-common\\4.1.43.Final\\netty-transport-native-unix-common-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.43.Final/netty-transport-native-unix-common-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.43.Final/netty-transport-native-unix-common-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\typesafe\\netty\\netty-reactive-streams-http\\2.0.3\\netty-reactive-streams-http-2.0.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/typesafe/netty/netty-reactive-streams-http/2.0.3/netty-reactive-streams-http-2.0.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/typesafe/netty/netty-reactive-streams-http/2.0.3/netty-reactive-streams-http-2.0.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\typesafe\\netty\\netty-reactive-streams\\2.0.3\\netty-reactive-streams-2.0.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/typesafe/netty/netty-reactive-streams/2.0.3/netty-reactive-streams-2.0.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/typesafe/netty/netty-reactive-streams/2.0.3/netty-reactive-streams-2.0.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\reactivestreams\\reactive-streams\\1.0.3\\reactive-streams-1.0.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-test\\2.2.1.RELEASE\\spring-boot-starter-test-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter-test/2.2.1.RELEASE/spring-boot-starter-test-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-test\\2.2.1.RELEASE\\spring-boot-test-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-test/2.2.1.RELEASE/spring-boot-test-2.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-test/2.2.1.RELEASE/spring-boot-test-2.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-test-autoconfigure\\2.2.1.RELEASE\\spring-boot-test-autoconfigure-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-test-autoconfigure/2.2.1.RELEASE/spring-boot-test-autoconfigure-2.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-test-autoconfigure/2.2.1.RELEASE/spring-boot-test-autoconfigure-2.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\jayway\\jsonpath\\json-path\\2.4.0\\json-path-2.4.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\net\\minidev\\json-smart\\2.3\\json-smart-2.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/minidev/json-smart/2.3/json-smart-2.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/minidev/json-smart/2.3/json-smart-2.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\net\\minidev\\accessors-smart\\1.2\\accessors-smart-1.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/minidev/accessors-smart/1.2/accessors-smart-1.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/minidev/accessors-smart/1.2/accessors-smart-1.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\ow2\\asm\\asm\\5.0.4\\asm-5.0.4.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/ow2/asm/asm/5.0.4/asm-5.0.4-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/ow2/asm/asm/5.0.4/asm-5.0.4-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\jakarta\\xml\\bind\\jakarta.xml.bind-api\\2.3.2\\jakarta.xml.bind-api-2.3.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\jakarta\\activation\\jakarta.activation-api\\1.2.1\\jakarta.activation-api-1.2.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\junit\\jupiter\\junit-jupiter\\5.5.2\\junit-jupiter-5.5.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter/5.5.2/junit-jupiter-5.5.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter/5.5.2/junit-jupiter-5.5.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\mockito\\mockito-junit-jupiter\\3.1.0\\mockito-junit-jupiter-3.1.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/mockito/mockito-junit-jupiter/3.1.0/mockito-junit-jupiter-3.1.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/mockito/mockito-junit-jupiter/3.1.0/mockito-junit-jupiter-3.1.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\assertj\\assertj-core\\3.13.2\\assertj-core-3.13.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/assertj/assertj-core/3.13.2/assertj-core-3.13.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/assertj/assertj-core/3.13.2/assertj-core-3.13.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\skyscreamer\\jsonassert\\1.5.0\\jsonassert-1.5.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\vaadin\\external\\google\\android-json\\0.0.20131108.vaadin1\\android-json-0.0.20131108.vaadin1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-core\\5.2.1.RELEASE\\spring-core-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-jcl\\5.2.1.RELEASE\\spring-jcl-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-test\\5.2.1.RELEASE\\spring-test-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-test/5.2.1.RELEASE/spring-test-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-test/5.2.1.RELEASE/spring-test-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\xmlunit\\xmlunit-core\\2.6.3\\xmlunit-core-2.6.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/xmlunit/xmlunit-core/2.6.3/xmlunit-core-2.6.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/xmlunit/xmlunit-core/2.6.3/xmlunit-core-2.6.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\projectreactor\\reactor-test\\3.3.0.RELEASE\\reactor-test-3.3.0.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/projectreactor/reactor-test/3.3.0.RELEASE/reactor-test-3.3.0.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/projectreactor/reactor-test/3.3.0.RELEASE/reactor-test-3.3.0.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\projectreactor\\reactor-core\\3.3.0.RELEASE\\reactor-core-3.3.0.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/projectreactor/reactor-core/3.3.0.RELEASE/reactor-core-3.3.0.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/projectreactor/reactor-core/3.3.0.RELEASE/reactor-core-3.3.0.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-devtools\\2.2.1.RELEASE\\spring-boot-devtools-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-devtools/2.2.1.RELEASE/spring-boot-devtools-2.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-devtools/2.2.1.RELEASE/spring-boot-devtools-2.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot\\2.2.1.RELEASE\\spring-boot-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-context\\5.2.1.RELEASE\\spring-context-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-aop\\5.2.1.RELEASE\\spring-aop-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-expression\\5.2.1.RELEASE\\spring-expression-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-autoconfigure\\2.2.1.RELEASE\\spring-boot-autoconfigure-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-configuration-processor\\2.2.1.RELEASE\\spring-boot-configuration-processor-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-configuration-processor/2.2.1.RELEASE/spring-boot-configuration-processor-2.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-configuration-processor/2.2.1.RELEASE/spring-boot-configuration-processor-2.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\projectlombok\\lombok\\1.18.10\\lombok-1.18.10.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/projectlombok/lombok/1.18.10/lombok-1.18.10-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/projectlombok/lombok/1.18.10/lombok-1.18.10-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\slf4j\\slf4j-api\\1.7.30\\slf4j-api-1.7.30.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\ch\\qos\\logback\\logback-classic\\1.2.3\\logback-classic-1.2.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\ch\\qos\\logback\\logback-core\\1.2.3\\logback-core-1.2.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\slf4j\\jcl-over-slf4j\\1.7.30\\jcl-over-slf4j-1.7.30.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.30/jcl-over-slf4j-1.7.30-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.30/jcl-over-slf4j-1.7.30-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\junit\\junit\\4.12\\junit-4.12.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/junit/junit/4.12/junit-4.12-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/junit/junit/4.12/junit-4.12-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\hamcrest\\hamcrest-core\\2.1\\hamcrest-core-2.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hamcrest/hamcrest-core/2.1/hamcrest-core-2.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hamcrest/hamcrest-core/2.1/hamcrest-core-2.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\junit\\jupiter\\junit-jupiter-engine\\5.2.0\\junit-jupiter-engine-5.2.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.2.0/junit-jupiter-engine-5.2.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.2.0/junit-jupiter-engine-5.2.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\apiguardian\\apiguardian-api\\1.0.0\\apiguardian-api-1.0.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\junit\\platform\\junit-platform-engine\\1.5.2\\junit-platform-engine-1.5.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/platform/junit-platform-engine/1.5.2/junit-platform-engine-1.5.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/platform/junit-platform-engine/1.5.2/junit-platform-engine-1.5.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\junit\\jupiter\\junit-jupiter-params\\5.2.0\\junit-jupiter-params-5.2.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.2.0/junit-jupiter-params-5.2.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.2.0/junit-jupiter-params-5.2.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\junit\\jupiter\\junit-jupiter-api\\5.2.0\\junit-jupiter-api-5.2.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.2.0/junit-jupiter-api-5.2.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.2.0/junit-jupiter-api-5.2.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\opentest4j\\opentest4j\\1.1.0\\opentest4j-1.1.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/opentest4j/opentest4j/1.1.0/opentest4j-1.1.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/opentest4j/opentest4j/1.1.0/opentest4j-1.1.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\junit\\platform\\junit-platform-commons\\1.5.2\\junit-platform-commons-1.5.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/platform/junit-platform-commons/1.5.2/junit-platform-commons-1.5.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/platform/junit-platform-commons/1.5.2/junit-platform-commons-1.5.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\hamcrest\\hamcrest\\2.2\\hamcrest-2.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\hamcrest\\hamcrest-all\\1.3\\hamcrest-all-1.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hamcrest/hamcrest-all/1.3/hamcrest-all-1.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hamcrest/hamcrest-all/1.3/hamcrest-all-1.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\net\\bytebuddy\\byte-buddy\\1.10.5\\byte-buddy-1.10.5.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/bytebuddy/byte-buddy/1.10.5/byte-buddy-1.10.5-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/bytebuddy/byte-buddy/1.10.5/byte-buddy-1.10.5-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\mockito\\mockito-core\\3.3.0\\mockito-core-3.3.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/mockito/mockito-core/3.3.0/mockito-core-3.3.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/mockito/mockito-core/3.3.0/mockito-core-3.3.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\net\\bytebuddy\\byte-buddy-agent\\1.10.2\\byte-buddy-agent-1.10.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/bytebuddy/byte-buddy-agent/1.10.2/byte-buddy-agent-1.10.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/bytebuddy/byte-buddy-agent/1.10.2/byte-buddy-agent-1.10.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\objenesis\\objenesis\\2.6\\objenesis-2.6.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/objenesis/objenesis/2.6/objenesis-2.6-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/objenesis/objenesis/2.6/objenesis-2.6-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\apache\\maven\\surefire\\surefire-logger-api\\2.21.0\\surefire-logger-api-2.21.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/maven/surefire/surefire-logger-api/2.21.0/surefire-logger-api-2.21.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/maven/surefire/surefire-logger-api/2.21.0/surefire-logger-api-2.21.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"source","path":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\src\\main\\java","outputFolder":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\target\\classes","javadocContainerUrl":"file:/C:/Users/Philippe/work/baeldung/repo/tutorials/aws-reactive/target/site/apidocs","isSystem":false,"isOwn":true,"isTest":false,"isJavaContent":true},{"kind":"source","path":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\src\\test\\java","outputFolder":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\target\\test-classes","javadocContainerUrl":"file:/C:/Users/Philippe/work/baeldung/repo/tutorials/aws-reactive/target/site/apidocs","isSystem":false,"isOwn":true,"isTest":true,"isJavaContent":true},{"kind":"source","path":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\src\\main\\resources","outputFolder":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\target\\classes","isSystem":false,"isOwn":true,"isTest":false,"isJavaContent":false},{"kind":"source","path":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\src\\test\\resources","outputFolder":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\target\\test-classes","isSystem":false,"isOwn":true,"isTest":true,"isJavaContent":false},{"kind":"source","path":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\src\\test\\java","outputFolder":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\target\\test-classes","javadocContainerUrl":"file:/C:/Users/Philippe/work/baeldung/repo/tutorials/aws-reactive/target/site/apidocs","isSystem":false,"isOwn":true,"isTest":false,"isJavaContent":false}]} \ No newline at end of file From 95133a56fffa0602c01096dc08e6ecd96749ef24 Mon Sep 17 00:00:00 2001 From: Philippe Date: Tue, 9 Jun 2020 10:14:30 -0300 Subject: [PATCH 02/10] [BAEL-2322] ignore data files --- apache-bookkeeper/data/.gitignore | 1 + apache-bookkeeper/data/bk1/.gitignore | 1 + apache-bookkeeper/data/bk2/.gitignore | 1 + apache-bookkeeper/data/zk/.gitignore | 2 ++ 4 files changed, 5 insertions(+) create mode 100644 apache-bookkeeper/data/.gitignore create mode 100644 apache-bookkeeper/data/bk1/.gitignore create mode 100644 apache-bookkeeper/data/bk2/.gitignore create mode 100644 apache-bookkeeper/data/zk/.gitignore diff --git a/apache-bookkeeper/data/.gitignore b/apache-bookkeeper/data/.gitignore new file mode 100644 index 0000000000..fb05d77307 --- /dev/null +++ b/apache-bookkeeper/data/.gitignore @@ -0,0 +1 @@ +/bk/ diff --git a/apache-bookkeeper/data/bk1/.gitignore b/apache-bookkeeper/data/bk1/.gitignore new file mode 100644 index 0000000000..32c9297ccd --- /dev/null +++ b/apache-bookkeeper/data/bk1/.gitignore @@ -0,0 +1 @@ +/bookkeeper/ diff --git a/apache-bookkeeper/data/bk2/.gitignore b/apache-bookkeeper/data/bk2/.gitignore new file mode 100644 index 0000000000..32c9297ccd --- /dev/null +++ b/apache-bookkeeper/data/bk2/.gitignore @@ -0,0 +1 @@ +/bookkeeper/ diff --git a/apache-bookkeeper/data/zk/.gitignore b/apache-bookkeeper/data/zk/.gitignore new file mode 100644 index 0000000000..0da095f9e7 --- /dev/null +++ b/apache-bookkeeper/data/zk/.gitignore @@ -0,0 +1,2 @@ +/myid +/version-2/ From c438f0c84220451485705f0872e12a9da3a45c27 Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 10 Jun 2020 00:32:08 -0300 Subject: [PATCH 03/10] [BAEL-2322] Relocate module --- .../tutorials/bookkeeper/LedgerReader.java | 5 - .../tutorials/bookkeeper/LedgerWriter.java | 12 - .../baeldung/tutorials/bookkeeper/Main.java | 13 - .../bookkeeper/BkHelperIntegrationTest.java | 208 ---------------- .../apache-bookkeeper}/Dockerfile | 0 .../apache-bookkeeper}/data/.gitignore | 0 .../apache-bookkeeper}/data/bk1/.gitignore | 0 .../apache-bookkeeper}/data/bk2/.gitignore | 0 .../apache-bookkeeper}/data/zk/.gitignore | 0 .../apache-bookkeeper}/docker-compose.yml | 0 .../apache-bookkeeper}/pom.xml | 24 +- .../tutorials/bookkeeper/BkHelper.java | 143 ++++++----- .../bookkeeper/BkHelperLiveTest.java | 229 ++++++++++++++++++ .../src/test/resources/logback-test.xml | 0 libraries-data-2/pom.xml | 4 + 15 files changed, 312 insertions(+), 326 deletions(-) delete mode 100644 apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerReader.java delete mode 100644 apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerWriter.java delete mode 100644 apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/Main.java delete mode 100644 apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperIntegrationTest.java rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/Dockerfile (100%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/data/.gitignore (100%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/data/bk1/.gitignore (100%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/data/bk2/.gitignore (100%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/data/zk/.gitignore (100%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/docker-compose.yml (100%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/pom.xml (66%) rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java (56%) create mode 100644 libraries-data-2/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java rename {apache-bookkeeper => libraries-data-2/apache-bookkeeper}/src/test/resources/logback-test.xml (100%) diff --git a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerReader.java b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerReader.java deleted file mode 100644 index 14eaf7ee58..0000000000 --- a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerReader.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.tutorials.bookkeeper; - -public class LedgerReader { - -} diff --git a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerWriter.java b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerWriter.java deleted file mode 100644 index fc5de1b86e..0000000000 --- a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/LedgerWriter.java +++ /dev/null @@ -1,12 +0,0 @@ -/** - * - */ -package com.baeldung.tutorials.bookkeeper; - -/** - * @author Philippe - * - */ -public class LedgerWriter { - -} diff --git a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/Main.java b/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/Main.java deleted file mode 100644 index 0160526832..0000000000 --- a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/Main.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.tutorials.bookkeeper; - -import org.apache.bookkeeper.client.BookKeeper; - -public class Main { - - public static void main(String args[]) { - - BookKeeper bk = BkHelper.createBkClient(args[0]); - System.out.println("Connect OK"); - - } -} \ No newline at end of file diff --git a/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperIntegrationTest.java b/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperIntegrationTest.java deleted file mode 100644 index 3995874ba7..0000000000 --- a/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperIntegrationTest.java +++ /dev/null @@ -1,208 +0,0 @@ -package com.baeldung.tutorials.bookkeeper; - -import static org.junit.jupiter.api.Assertions.*; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; - -import org.apache.bookkeeper.client.AsyncCallback.AddCallback; -import org.apache.bookkeeper.client.AsyncCallback.CreateCallback; -import org.apache.bookkeeper.client.AsyncCallback.ReadCallback; -import org.apache.bookkeeper.client.BKException; -import org.apache.bookkeeper.client.BookKeeper; -import org.apache.bookkeeper.client.LedgerEntry; -import org.apache.bookkeeper.client.LedgerHandle; -import org.apache.bookkeeper.client.api.DigestType; -import org.apache.bookkeeper.client.api.ReadHandle; -import org.apache.bookkeeper.client.api.WriteAdvHandle; -import org.apache.bookkeeper.client.api.WriteHandle; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.zookeeper.AsyncCallback; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -class BkHelperIntegrationTest extends BkHelper { - - private static BookKeeper bk; - private byte[] ledgerPassword = "SuperS3cR37".getBytes(); - - private static final Log log = LogFactory.getLog(BkHelperIntegrationTest.class); - - @BeforeAll - static void initBkClient() { - bk = createBkClient("192.168.99.101:2181"); - } - - @Test - void whenCreateLedger_thenSuccess() throws Exception { - - LedgerHandle lh = bk.createLedger(BookKeeper.DigestType.MAC, ledgerPassword); - assertNotNull(lh); - assertNotNull(lh.getId()); - - CreateCallback cb = (rc, ll, ctx) -> { - - }; - - bk.asyncCreateLedger(3, 2, 2, BookKeeper.DigestType.MAC, "passwd".getBytes(), cb, null, Collections.emptyMap()); - //lh.get - -// CompletableFuture cf = bk.newCreateLedgerOp() -// .withDigestType(org.apache.bookkeeper.client.api.DigestType.MAC) -// .withPassword("password".getBytes()) -// .makeAdv() -// .execute(); - - log.info("[I33] Ledge created: id=" + lh.getId()); - } - - @Test - void whenListLedgers_thenSuccess() throws Exception { - - final AtomicInteger returnCode = new AtomicInteger(BKException.Code.OK); - final CountDownLatch processDone = new CountDownLatch(1); - - // There's no standard "list" operation. Instead, BK offers a generalized way to - // iterate over all available ledgers using an async visitor callback. - // The second callback will be called when there are no more ledgers do process or if an - // error occurs. - bk.getLedgerManager() - .asyncProcessLedgers( - (data,cb) -> processLedger(data,cb), - (rc, s, obj) -> { - returnCode.set(rc); - processDone.countDown(); - }, - null, - BKException.Code.OK, - BKException.Code.ReadException); - - processDone.await(5, TimeUnit.MINUTES); - } - - @Test - void whenWriteEntries_thenSuccess() throws Exception { - - LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); - - long start = System.currentTimeMillis(); - for ( int i = 0 ; i < 1000 ; i++ ) { - byte[] data = new String("message-" + i).getBytes(); - lh.append(data); - } - - byte[] data = new byte[] {}; - - CompletableFuture f = lh.appendAsync(data); - AddCallback cbw = (rc,ll,entryId,ctx) -> { - - }; - - lh.asyncAddEntry(data, cbw, null); - - lh.close(); - long elapsed = System.currentTimeMillis() - start; - log.info("Entries added to ledgerId " + lh.getId() + ". count=1000, elapsed=" + elapsed); - - - } - - @Test - void whenWriteAndReadEntries_thenSuccess() throws Exception { - - LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); - - long start = System.currentTimeMillis(); - for ( int i = 0 ; i < 1000 ; i++ ) { - byte[] data = new String("message-" + i).getBytes(); - lh.append(data); - } - - lh.close(); - long elapsed = System.currentTimeMillis() - start; - log.info("Entries added to ledgerId " + lh.getId() + ", elapsed=" + elapsed); - - Long ledgerId = findLedgerByName(bk,"myledger").orElse(null); - assertNotNull(ledgerId); - - lh = bk.openLedger(ledgerId, BookKeeper.DigestType.MAC, ledgerPassword); - long lastId = lh.readLastConfirmed(); - Enumeration entries = lh.readEntries(0, lastId); - - ReadCallback cbr; - lh.asyncReadEntries(0, lastId, - (rc,ledgerHandle,ee,ctx) -> { - while(ee.hasMoreElements()) { - LedgerEntry e = ee.nextElement(); - } - }, null); - - ReadHandle rh = bk.newOpenLedgerOp() - .withLedgerId(ledgerId) - .withDigestType(DigestType.MAC) - .withPassword("password".getBytes()) - .execute().get(); - - rh.read(0, lastId).forEach((entry) -> { - - }); - - rh.readAsync(0, lastId).thenAccept((ee) -> { - ee.forEach((entry) -> { - // .. - }); - }); - - while(entries.hasMoreElements()) { - LedgerEntry entry = entries.nextElement(); - String msg = new String(entry.getEntry()); - log.info("Entry: id=" + entry.getEntryId() + ", data=" + msg); - } - - } - - private void processLedger(long ledgerId, AsyncCallback.VoidCallback cb) { - log.info("ledgerId: " + ledgerId); - cb.processResult(BKException.Code.OK, null, null); - } - - - private CompletableFuture> listAllLedgers(BookKeeper bk) { - - final List ledgers = Collections.synchronizedList(new ArrayList<>()); - final CountDownLatch processDone = new CountDownLatch(1); - - bk.getLedgerManager() - .asyncProcessLedgers( - (ledgerId,cb) -> { - ledgers.add(ledgerId); - cb.processResult(BKException.Code.OK, null, null); - }, - (rc, s, obj) -> { - processDone.countDown(); - }, - null, BKException.Code.OK, BKException.Code.ReadException); - - CompletableFuture> cf = CompletableFuture.supplyAsync(() -> { - try { - processDone.await(1,TimeUnit.MINUTES); - return ledgers; - } - catch(InterruptedException ie) { - throw new RuntimeException(ie); - } - }); - - return cf; - } - - - -} diff --git a/apache-bookkeeper/Dockerfile b/libraries-data-2/apache-bookkeeper/Dockerfile similarity index 100% rename from apache-bookkeeper/Dockerfile rename to libraries-data-2/apache-bookkeeper/Dockerfile diff --git a/apache-bookkeeper/data/.gitignore b/libraries-data-2/apache-bookkeeper/data/.gitignore similarity index 100% rename from apache-bookkeeper/data/.gitignore rename to libraries-data-2/apache-bookkeeper/data/.gitignore diff --git a/apache-bookkeeper/data/bk1/.gitignore b/libraries-data-2/apache-bookkeeper/data/bk1/.gitignore similarity index 100% rename from apache-bookkeeper/data/bk1/.gitignore rename to libraries-data-2/apache-bookkeeper/data/bk1/.gitignore diff --git a/apache-bookkeeper/data/bk2/.gitignore b/libraries-data-2/apache-bookkeeper/data/bk2/.gitignore similarity index 100% rename from apache-bookkeeper/data/bk2/.gitignore rename to libraries-data-2/apache-bookkeeper/data/bk2/.gitignore diff --git a/apache-bookkeeper/data/zk/.gitignore b/libraries-data-2/apache-bookkeeper/data/zk/.gitignore similarity index 100% rename from apache-bookkeeper/data/zk/.gitignore rename to libraries-data-2/apache-bookkeeper/data/zk/.gitignore diff --git a/apache-bookkeeper/docker-compose.yml b/libraries-data-2/apache-bookkeeper/docker-compose.yml similarity index 100% rename from apache-bookkeeper/docker-compose.yml rename to libraries-data-2/apache-bookkeeper/docker-compose.yml diff --git a/apache-bookkeeper/pom.xml b/libraries-data-2/apache-bookkeeper/pom.xml similarity index 66% rename from apache-bookkeeper/pom.xml rename to libraries-data-2/apache-bookkeeper/pom.xml index 61bd582fd3..46a7982b12 100644 --- a/apache-bookkeeper/pom.xml +++ b/libraries-data-2/apache-bookkeeper/pom.xml @@ -13,6 +13,7 @@ com.baeldung parent-modules 1.0.0-SNAPSHOT + ../../ @@ -41,29 +42,6 @@ 4.10.0 - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.3 - - - com.baeldung.tutorials.bookkeeper.Main - true - - - - package - - shade - - - - - - diff --git a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java b/libraries-data-2/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java similarity index 56% rename from apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java rename to libraries-data-2/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java index 2fc07c13b3..7cba88af19 100644 --- a/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java +++ b/libraries-data-2/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java @@ -1,8 +1,10 @@ package com.baeldung.tutorials.bookkeeper; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Map.Entry; @@ -15,29 +17,22 @@ import org.apache.bookkeeper.client.BookKeeper; import org.apache.bookkeeper.client.BookKeeper.DigestType; import org.apache.bookkeeper.client.LedgerHandle; import org.apache.bookkeeper.client.api.LedgerMetadata; -import org.apache.bookkeeper.conf.ClientConfiguration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.zookeeper.AsyncCallback; public class BkHelper { - + private static final Log log = LogFactory.getLog(BkHelper.class); - + public static BookKeeper createBkClient(String zkConnectionString) { try { - ClientConfiguration cfg = new ClientConfiguration(); - cfg.setMetadataServiceUri("zk+null://zookeeper-host:2131"); - BookKeeper.forConfig(cfg).build(); - - return new BookKeeper(zkConnectionString); - } - catch(Exception ex) { + } catch (Exception ex) { throw new RuntimeException(ex); } } - + /** * Creates a Ledger with the given name added as custom metadata * @param bk @@ -47,17 +42,12 @@ public class BkHelper { */ public static LedgerHandle createLedger(BookKeeper bk, String name, byte[] password) { try { - - return bk.createLedger(3,2,2, - DigestType.MAC, - password, - Collections.singletonMap("name", name.getBytes())); - } - catch(Exception ex) { + return bk.createLedger(3, 2, 2, DigestType.MAC, password, Collections.singletonMap("name", name.getBytes())); + } catch (Exception ex) { throw new RuntimeException(ex); } } - + /** * Iterates over all available ledgers and returns the first one that has * a metadata key 'name' equals to the given name @@ -67,78 +57,101 @@ public class BkHelper { * @throws Exception */ public static Optional findLedgerByName(BookKeeper bk, String name) throws Exception { - - Map ledgers = new HashMap(); + + Map ledgers = new HashMap(); final AtomicInteger returnCode = new AtomicInteger(BKException.Code.OK); - final CountDownLatch processDone = new CountDownLatch(1); - + final CountDownLatch processDone = new CountDownLatch(1); + // There's no standard "list" operation. Instead, BK offers a generalized way to // iterate over all available ledgers using an async visitor callback. // The second callback will be called when there are no more ledgers do process or if an // error occurs. bk.getLedgerManager() - .asyncProcessLedgers( - (data,cb) -> collectLedgers(bk,data,cb,ledgers), - (rc, s, obj) -> { - returnCode.set(rc); - processDone.countDown(); - }, - null, - BKException.Code.OK, - BKException.Code.ReadException); - + .asyncProcessLedgers((ledgerId, cb) -> collectLedgers(bk, ledgerId, cb, ledgers), + (rc, s, obj) -> { + returnCode.set(rc); + processDone.countDown(); + }, null, BKException.Code.OK, BKException.Code.ReadException); + processDone.await(5, TimeUnit.MINUTES); - + log.info("Ledgers collected: total found=" + ledgers.size()); - + byte[] nameBytes = name.getBytes(); - - Optional> entry = ledgers.entrySet().stream().filter((e) -> { - Map meta = e.getValue().getCustomMetadata(); - if ( meta != null ) { - log.info("ledger: " + e.getKey() + ", customMeta=" + meta); - byte[] data = meta.get("name"); - if ( data != null && Arrays.equals(data, nameBytes)) { - return true; - } - else { + + Optional> entry = ledgers.entrySet() + .stream() + .filter((e) -> { + Map meta = e.getValue().getCustomMetadata(); + if (meta != null) { + log.info("ledger: " + e.getKey() + ", customMeta=" + meta); + byte[] data = meta.get("name"); + if (data != null && Arrays.equals(data, nameBytes)) { + return true; + } else { + return false; + } + } else { + log.info("ledger: " + e.getKey() + ", no meta"); return false; } - } - else { - log.info("ledger: " + e.getKey() + ", no meta"); - return false; - } - }) - .findFirst(); - - + }) + .findFirst(); + if (entry.isPresent()) { return Optional.of(entry.get().getKey()); - } - else { + } else { return Optional.empty(); - } + } } - - public static void collectLedgers(BookKeeper bk, long ledgerId, AsyncCallback.VoidCallback cb, Map ledgers) { - log.info("ledgerId: " + ledgerId); - + + public static void collectLedgers(BookKeeper bk, long ledgerId, AsyncCallback.VoidCallback cb, Map ledgers) { + log.debug("ledgerId: " + ledgerId); + try { bk.getLedgerManager() .readLedgerMetadata(ledgerId) .thenAccept((v) -> { - log.info("Got ledger metadata"); - ledgers.put(ledgerId,v.getValue()); + log.debug("Got ledger metadata"); + ledgers.put(ledgerId, v.getValue()); }) .thenAccept((v) -> { cb.processResult(BKException.Code.OK, null, null); }); - } - catch(Exception ex) { + } catch (Exception ex) { throw new RuntimeException(ex); } } + /** + * Return a list with all available Ledgers + * @param bk + * @return + */ + public static List listAllLedgers(BookKeeper bk) { + + final List ledgers = Collections.synchronizedList(new ArrayList<>()); + final CountDownLatch processDone = new CountDownLatch(1); + + bk.getLedgerManager() + .asyncProcessLedgers( + (ledgerId,cb) -> { + ledgers.add(ledgerId); + cb.processResult(BKException.Code.OK, null, null); + }, + (rc, s, obj) -> { + processDone.countDown(); + }, + null, BKException.Code.OK, BKException.Code.ReadException); + + try { + processDone.await(1,TimeUnit.MINUTES); + return ledgers; + } + catch(InterruptedException ie) { + throw new RuntimeException(ie); + } + } + } diff --git a/libraries-data-2/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java b/libraries-data-2/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java new file mode 100644 index 0000000000..2bbf54e2b7 --- /dev/null +++ b/libraries-data-2/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java @@ -0,0 +1,229 @@ +package com.baeldung.tutorials.bookkeeper; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +import org.apache.bookkeeper.client.AsyncCallback.AddCallback; +import org.apache.bookkeeper.client.AsyncCallback.CreateCallback; +import org.apache.bookkeeper.client.AsyncCallback.ReadCallback; +import org.apache.bookkeeper.client.BKException; +import org.apache.bookkeeper.client.BookKeeper; +import org.apache.bookkeeper.client.LedgerEntry; +import org.apache.bookkeeper.client.LedgerHandle; +import org.apache.bookkeeper.client.api.DigestType; +import org.apache.bookkeeper.client.api.LedgerEntries; +import org.apache.bookkeeper.client.api.ReadHandle; +import org.apache.bookkeeper.client.api.WriteAdvHandle; +import org.apache.bookkeeper.client.api.WriteHandle; +import org.apache.bookkeeper.tools.cli.commands.bookie.ListLedgersCommand; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.zookeeper.AsyncCallback; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import com.google.common.collect.Iterables; + +class BkHelperLiveTest extends BkHelper { + + private static BookKeeper bk; + private byte[] ledgerPassword = "SuperS3cR37".getBytes(); + + private static final Log log = LogFactory.getLog(BkHelperLiveTest.class); + + @BeforeAll + static void initBkClient() { + bk = createBkClient("192.168.99.101:2181"); + } + + @Test + void whenCreateLedger_thenSuccess() throws Exception { + + LedgerHandle lh = bk.createLedger(BookKeeper.DigestType.MAC, ledgerPassword); + assertNotNull(lh); + assertNotNull(lh.getId()); + + log.info("[I33] Ledge created: id=" + lh.getId()); + } + + + @Test + void whenCreateLedgerAsync_thenSuccess() throws Exception { + + CompletableFuture cf = bk.newCreateLedgerOp() + .withDigestType(org.apache.bookkeeper.client.api.DigestType.MAC) + .withPassword("password".getBytes()) + .execute(); + + WriteHandle handle = cf.get(1, TimeUnit.MINUTES); + assertNotNull(handle); + handle.close(); + + } + + + @Test + void whenAsyncCreateLedger_thenSuccess() throws Exception { + + CountDownLatch latch = new CountDownLatch(1); + AtomicReference handleRef =new AtomicReference<>(); + + bk.asyncCreateLedger(3, 2, 2, + BookKeeper.DigestType.MAC, + ledgerPassword, + (rc, lh, ctx) -> { + handleRef.set(lh); + latch.countDown(); + }, + null, + Collections.emptyMap()); + + latch.await(1, TimeUnit.MINUTES); + LedgerHandle lh = handleRef.get(); + assertNotNull(lh); + assertFalse(lh.isClosed(),"Ledger should be writeable"); + } + + + @Test + void whenListLedgers_thenSuccess() throws Exception { + + List ledgers = listAllLedgers(bk); + assertNotNull(ledgers); + } + + @Test + void whenWriteEntries_thenSuccess() throws Exception { + + LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); + + long start = System.currentTimeMillis(); + for ( int i = 0 ; i < 1000 ; i++ ) { + byte[] data = new String("message-" + i).getBytes(); + lh.append(data); + } + + lh.close(); + long elapsed = System.currentTimeMillis() - start; + log.info("Entries added to ledgerId " + lh.getId() + ". count=1000, elapsed=" + elapsed); + } + + @Test + void whenWriteEntriesAsync_thenSuccess() throws Exception { + + CompletableFuture f = bk.newCreateLedgerOp() + .withDigestType(DigestType.MAC) + .withPassword(ledgerPassword) + .execute() + .thenApply((wh) -> { + List> ops = new ArrayList<>(); + for( int i = 0; i < 1000 ; i++ ) { + byte[] data = String.format("message-%04d", i).getBytes(); + ops.add(wh.appendAsync(data)); + } + + return CompletableFuture + .allOf(ops.stream().toArray(CompletableFuture[]::new)) + .thenCompose((v) -> wh.closeAsync()); + }); + + f.get(5, TimeUnit.MINUTES); + } + + @Test + void whenWriteAndReadEntriesAsync_thenSuccess() throws Exception { + + CompletableFuture f = bk.newCreateLedgerOp() + .withDigestType(DigestType.MAC) + .withPassword(ledgerPassword) + .execute() + .thenApply((wh) -> { + List> ops = new ArrayList<>(); + for( int i = 0; i < 1000 ; i++ ) { + byte[] data = String.format("message-%04d", i).getBytes(); + ops.add(wh.appendAsync(data)); + } + + + return CompletableFuture + .allOf(ops.stream().toArray(CompletableFuture[]::new)) + .thenCompose((v) -> wh.closeAsync()) + .thenApply((v) -> wh.getId()); + }) + .thenCompose((lf) -> lf); // flatten the + + Long ledgerId = f.get(5, TimeUnit.MINUTES); + log.info("Ledger created with 1000 entries: ledgerId=" + ledgerId); + + // Now let's read data back... + CompletableFuture ef = bk.newOpenLedgerOp() + .withLedgerId(ledgerId) + .withPassword(ledgerPassword) + .withDigestType(DigestType.MAC) + .execute() + .thenCompose((rh) -> { + return rh.readLastAddConfirmedAsync() + .thenCompose((lastId) -> rh.readAsync(0, lastId)); + }); + + LedgerEntries entries = ef.get(5,TimeUnit.MINUTES); + + + long count = 0; + Iterator it = entries.iterator(); + while ( it.hasNext()) { + org.apache.bookkeeper.client.api.LedgerEntry e = it.next(); + String msg = new String(e.getEntryBytes()); + assertEquals(String.format("message-%04d", count),msg); + count++; + } + + assertEquals(1000,count); + + log.info("Got entries: count=" + count); + + } + + + @Test + void whenWriteAndReadEntries_thenSuccess() throws Exception { + + LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); + + long start = System.currentTimeMillis(); + for ( int i = 0 ; i < 1000 ; i++ ) { + byte[] data = new String("message-" + i).getBytes(); + lh.append(data); + } + + lh.close(); + long elapsed = System.currentTimeMillis() - start; + log.info("Entries added to ledgerId " + lh.getId() + ", elapsed=" + elapsed); + + Long ledgerId = findLedgerByName(bk,"myledger").orElse(null); + assertNotNull(ledgerId); + + lh = bk.openLedger(ledgerId, BookKeeper.DigestType.MAC, ledgerPassword); + long lastId = lh.readLastConfirmed(); + Enumeration entries = lh.readEntries(0, lastId); + + while(entries.hasMoreElements()) { + LedgerEntry entry = entries.nextElement(); + String msg = new String(entry.getEntry()); + log.info("Entry: id=" + entry.getEntryId() + ", data=" + msg); + } + } +} diff --git a/apache-bookkeeper/src/test/resources/logback-test.xml b/libraries-data-2/apache-bookkeeper/src/test/resources/logback-test.xml similarity index 100% rename from apache-bookkeeper/src/test/resources/logback-test.xml rename to libraries-data-2/apache-bookkeeper/src/test/resources/logback-test.xml diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml index 2d27ec2107..a05b25956f 100644 --- a/libraries-data-2/pom.xml +++ b/libraries-data-2/pom.xml @@ -216,5 +216,9 @@ + + + apache-bookkeeper + \ No newline at end of file From 01c02be83d979ac02caf4595ea2597598a8dfabf Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 10 Jun 2020 00:38:23 -0300 Subject: [PATCH 04/10] [BAEL-2322] Remove unused Dockerfile --- libraries-data-2/apache-bookkeeper/Dockerfile | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 libraries-data-2/apache-bookkeeper/Dockerfile diff --git a/libraries-data-2/apache-bookkeeper/Dockerfile b/libraries-data-2/apache-bookkeeper/Dockerfile deleted file mode 100644 index 88c6bc281a..0000000000 --- a/libraries-data-2/apache-bookkeeper/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -FROM openjdk:8 -COPY add target/apache-bookkeeper-0.0.1-SNAPSHOT.jar /app.jar From bdcd3214700a866faebccb52cac8dd88fc81be3d Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 10 Jun 2020 01:16:31 -0300 Subject: [PATCH 05/10] [BAEL-2322] Relocating module --- .../apache-bookkeeper/data/.gitignore | 5 + .../apache-bookkeeper/data/bk1/.gitignore | 1 + .../apache-bookkeeper/data/bk2/.gitignore | 1 + .../apache-bookkeeper/docker-compose.yml | 71 ++++++ persistence-modules/apache-bookkeeper/pom.xml | 47 ++++ .../tutorials/bookkeeper/BkHelper.java | 157 ++++++++++++ .../bookkeeper/BkHelperLiveTest.java | 229 ++++++++++++++++++ .../src/test/resources/logback-test.xml | 13 + 8 files changed, 524 insertions(+) create mode 100644 persistence-modules/apache-bookkeeper/data/.gitignore create mode 100644 persistence-modules/apache-bookkeeper/data/bk1/.gitignore create mode 100644 persistence-modules/apache-bookkeeper/data/bk2/.gitignore create mode 100644 persistence-modules/apache-bookkeeper/docker-compose.yml create mode 100644 persistence-modules/apache-bookkeeper/pom.xml create mode 100644 persistence-modules/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java create mode 100644 persistence-modules/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java create mode 100644 persistence-modules/apache-bookkeeper/src/test/resources/logback-test.xml diff --git a/persistence-modules/apache-bookkeeper/data/.gitignore b/persistence-modules/apache-bookkeeper/data/.gitignore new file mode 100644 index 0000000000..43a3e42263 --- /dev/null +++ b/persistence-modules/apache-bookkeeper/data/.gitignore @@ -0,0 +1,5 @@ +bk/bookkeeper/* +bk1/bookkeeper/* +bk2/bookkeeper/* +zk/* + diff --git a/persistence-modules/apache-bookkeeper/data/bk1/.gitignore b/persistence-modules/apache-bookkeeper/data/bk1/.gitignore new file mode 100644 index 0000000000..32c9297ccd --- /dev/null +++ b/persistence-modules/apache-bookkeeper/data/bk1/.gitignore @@ -0,0 +1 @@ +/bookkeeper/ diff --git a/persistence-modules/apache-bookkeeper/data/bk2/.gitignore b/persistence-modules/apache-bookkeeper/data/bk2/.gitignore new file mode 100644 index 0000000000..32c9297ccd --- /dev/null +++ b/persistence-modules/apache-bookkeeper/data/bk2/.gitignore @@ -0,0 +1 @@ +/bookkeeper/ diff --git a/persistence-modules/apache-bookkeeper/docker-compose.yml b/persistence-modules/apache-bookkeeper/docker-compose.yml new file mode 100644 index 0000000000..0ef4c41a4a --- /dev/null +++ b/persistence-modules/apache-bookkeeper/docker-compose.yml @@ -0,0 +1,71 @@ +version: '3.0' +services: + zk: + image: zookeeper:3.6.1 + restart: always + ports: + - "2181:2181" + volumes: + - ./data/zk:/data + + bookie_init: + image: apache/bookkeeper:4.10.0 + environment: + BK_zkServers: "zk:2181" + BK_advertisedAddress: ${BK_PUBLIC_IP} + restart: on-failure + depends_on: + - zk + command: /opt/bookkeeper/bin/bookkeeper shell metaformat -nonInteractive + + bookie: + image: apache/bookkeeper:4.10.0 + restart: on-failure + environment: + BK_zkServers: "zk:2181" + BK_advertisedAddress: ${BK_PUBLIC_IP} + BK_httpServerPort: 3182 + ports: + - "3181:3181" + - "3182:3182" + volumes: + - ./data/bk:/data + depends_on: + - zk + - bookie_init + + bookie1: + image: apache/bookkeeper:4.10.0 + restart: on-failure + environment: + BOOKIE_PORT: 4181 + BK_zkServers: "zk:2181" + BK_advertisedAddress: ${BK_PUBLIC_IP} + BK_httpServerPort: 3182 + ports: + - "4181:4181" + volumes: + - ./data/bk1:/data + depends_on: + - zk + - bookie_init + + bookie2: + image: apache/bookkeeper:4.10.0 + restart: on-failure + environment: + BOOKIE_PORT: 4182 + BK_zkServers: "zk:2181" + BK_advertisedAddress: ${BK_PUBLIC_IP} + BK_httpServerPort: 3182 + ports: + - "4182:4182" + volumes: + - ./data/bk2:/data + depends_on: + - zk + - bookie_init + + + + diff --git a/persistence-modules/apache-bookkeeper/pom.xml b/persistence-modules/apache-bookkeeper/pom.xml new file mode 100644 index 0000000000..46a7982b12 --- /dev/null +++ b/persistence-modules/apache-bookkeeper/pom.xml @@ -0,0 +1,47 @@ + + + + 4.0.0 + apache-bookkeeper + 0.0.1-SNAPSHOT + apache-bookkeeper + jar + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + + + + + org.apache.bookkeeper + bookkeeper-server + ${org.apache.bookkeeper.version} + + + org.slf4j + slf4j-log4j12 + + + + + + org.testcontainers + testcontainers + 1.14.3 + test + + + + + + 4.10.0 + + + + + diff --git a/persistence-modules/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java b/persistence-modules/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java new file mode 100644 index 0000000000..7cba88af19 --- /dev/null +++ b/persistence-modules/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java @@ -0,0 +1,157 @@ +package com.baeldung.tutorials.bookkeeper; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Map.Entry; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import org.apache.bookkeeper.client.BKException; +import org.apache.bookkeeper.client.BookKeeper; +import org.apache.bookkeeper.client.BookKeeper.DigestType; +import org.apache.bookkeeper.client.LedgerHandle; +import org.apache.bookkeeper.client.api.LedgerMetadata; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.zookeeper.AsyncCallback; + +public class BkHelper { + + private static final Log log = LogFactory.getLog(BkHelper.class); + + public static BookKeeper createBkClient(String zkConnectionString) { + try { + return new BookKeeper(zkConnectionString); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + /** + * Creates a Ledger with the given name added as custom metadata + * @param bk + * @param name + * @param password + * @return + */ + public static LedgerHandle createLedger(BookKeeper bk, String name, byte[] password) { + try { + return bk.createLedger(3, 2, 2, DigestType.MAC, password, Collections.singletonMap("name", name.getBytes())); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + /** + * Iterates over all available ledgers and returns the first one that has + * a metadata key 'name' equals to the given name + * @param bk + * @param name + * @return + * @throws Exception + */ + public static Optional findLedgerByName(BookKeeper bk, String name) throws Exception { + + Map ledgers = new HashMap(); + final AtomicInteger returnCode = new AtomicInteger(BKException.Code.OK); + final CountDownLatch processDone = new CountDownLatch(1); + + // There's no standard "list" operation. Instead, BK offers a generalized way to + // iterate over all available ledgers using an async visitor callback. + // The second callback will be called when there are no more ledgers do process or if an + // error occurs. + bk.getLedgerManager() + .asyncProcessLedgers((ledgerId, cb) -> collectLedgers(bk, ledgerId, cb, ledgers), + (rc, s, obj) -> { + returnCode.set(rc); + processDone.countDown(); + }, null, BKException.Code.OK, BKException.Code.ReadException); + + processDone.await(5, TimeUnit.MINUTES); + + log.info("Ledgers collected: total found=" + ledgers.size()); + + byte[] nameBytes = name.getBytes(); + + Optional> entry = ledgers.entrySet() + .stream() + .filter((e) -> { + Map meta = e.getValue().getCustomMetadata(); + if (meta != null) { + log.info("ledger: " + e.getKey() + ", customMeta=" + meta); + byte[] data = meta.get("name"); + if (data != null && Arrays.equals(data, nameBytes)) { + return true; + } else { + return false; + } + } else { + log.info("ledger: " + e.getKey() + ", no meta"); + return false; + } + }) + .findFirst(); + + if (entry.isPresent()) { + return Optional.of(entry.get().getKey()); + } else { + return Optional.empty(); + } + } + + public static void collectLedgers(BookKeeper bk, long ledgerId, AsyncCallback.VoidCallback cb, Map ledgers) { + log.debug("ledgerId: " + ledgerId); + + try { + bk.getLedgerManager() + .readLedgerMetadata(ledgerId) + .thenAccept((v) -> { + log.debug("Got ledger metadata"); + ledgers.put(ledgerId, v.getValue()); + }) + .thenAccept((v) -> { + cb.processResult(BKException.Code.OK, null, null); + }); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + /** + * Return a list with all available Ledgers + * @param bk + * @return + */ + public static List listAllLedgers(BookKeeper bk) { + + final List ledgers = Collections.synchronizedList(new ArrayList<>()); + final CountDownLatch processDone = new CountDownLatch(1); + + bk.getLedgerManager() + .asyncProcessLedgers( + (ledgerId,cb) -> { + ledgers.add(ledgerId); + cb.processResult(BKException.Code.OK, null, null); + }, + (rc, s, obj) -> { + processDone.countDown(); + }, + null, BKException.Code.OK, BKException.Code.ReadException); + + try { + processDone.await(1,TimeUnit.MINUTES); + return ledgers; + } + catch(InterruptedException ie) { + throw new RuntimeException(ie); + } + } + + +} diff --git a/persistence-modules/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java b/persistence-modules/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java new file mode 100644 index 0000000000..2bbf54e2b7 --- /dev/null +++ b/persistence-modules/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java @@ -0,0 +1,229 @@ +package com.baeldung.tutorials.bookkeeper; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +import org.apache.bookkeeper.client.AsyncCallback.AddCallback; +import org.apache.bookkeeper.client.AsyncCallback.CreateCallback; +import org.apache.bookkeeper.client.AsyncCallback.ReadCallback; +import org.apache.bookkeeper.client.BKException; +import org.apache.bookkeeper.client.BookKeeper; +import org.apache.bookkeeper.client.LedgerEntry; +import org.apache.bookkeeper.client.LedgerHandle; +import org.apache.bookkeeper.client.api.DigestType; +import org.apache.bookkeeper.client.api.LedgerEntries; +import org.apache.bookkeeper.client.api.ReadHandle; +import org.apache.bookkeeper.client.api.WriteAdvHandle; +import org.apache.bookkeeper.client.api.WriteHandle; +import org.apache.bookkeeper.tools.cli.commands.bookie.ListLedgersCommand; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.zookeeper.AsyncCallback; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import com.google.common.collect.Iterables; + +class BkHelperLiveTest extends BkHelper { + + private static BookKeeper bk; + private byte[] ledgerPassword = "SuperS3cR37".getBytes(); + + private static final Log log = LogFactory.getLog(BkHelperLiveTest.class); + + @BeforeAll + static void initBkClient() { + bk = createBkClient("192.168.99.101:2181"); + } + + @Test + void whenCreateLedger_thenSuccess() throws Exception { + + LedgerHandle lh = bk.createLedger(BookKeeper.DigestType.MAC, ledgerPassword); + assertNotNull(lh); + assertNotNull(lh.getId()); + + log.info("[I33] Ledge created: id=" + lh.getId()); + } + + + @Test + void whenCreateLedgerAsync_thenSuccess() throws Exception { + + CompletableFuture cf = bk.newCreateLedgerOp() + .withDigestType(org.apache.bookkeeper.client.api.DigestType.MAC) + .withPassword("password".getBytes()) + .execute(); + + WriteHandle handle = cf.get(1, TimeUnit.MINUTES); + assertNotNull(handle); + handle.close(); + + } + + + @Test + void whenAsyncCreateLedger_thenSuccess() throws Exception { + + CountDownLatch latch = new CountDownLatch(1); + AtomicReference handleRef =new AtomicReference<>(); + + bk.asyncCreateLedger(3, 2, 2, + BookKeeper.DigestType.MAC, + ledgerPassword, + (rc, lh, ctx) -> { + handleRef.set(lh); + latch.countDown(); + }, + null, + Collections.emptyMap()); + + latch.await(1, TimeUnit.MINUTES); + LedgerHandle lh = handleRef.get(); + assertNotNull(lh); + assertFalse(lh.isClosed(),"Ledger should be writeable"); + } + + + @Test + void whenListLedgers_thenSuccess() throws Exception { + + List ledgers = listAllLedgers(bk); + assertNotNull(ledgers); + } + + @Test + void whenWriteEntries_thenSuccess() throws Exception { + + LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); + + long start = System.currentTimeMillis(); + for ( int i = 0 ; i < 1000 ; i++ ) { + byte[] data = new String("message-" + i).getBytes(); + lh.append(data); + } + + lh.close(); + long elapsed = System.currentTimeMillis() - start; + log.info("Entries added to ledgerId " + lh.getId() + ". count=1000, elapsed=" + elapsed); + } + + @Test + void whenWriteEntriesAsync_thenSuccess() throws Exception { + + CompletableFuture f = bk.newCreateLedgerOp() + .withDigestType(DigestType.MAC) + .withPassword(ledgerPassword) + .execute() + .thenApply((wh) -> { + List> ops = new ArrayList<>(); + for( int i = 0; i < 1000 ; i++ ) { + byte[] data = String.format("message-%04d", i).getBytes(); + ops.add(wh.appendAsync(data)); + } + + return CompletableFuture + .allOf(ops.stream().toArray(CompletableFuture[]::new)) + .thenCompose((v) -> wh.closeAsync()); + }); + + f.get(5, TimeUnit.MINUTES); + } + + @Test + void whenWriteAndReadEntriesAsync_thenSuccess() throws Exception { + + CompletableFuture f = bk.newCreateLedgerOp() + .withDigestType(DigestType.MAC) + .withPassword(ledgerPassword) + .execute() + .thenApply((wh) -> { + List> ops = new ArrayList<>(); + for( int i = 0; i < 1000 ; i++ ) { + byte[] data = String.format("message-%04d", i).getBytes(); + ops.add(wh.appendAsync(data)); + } + + + return CompletableFuture + .allOf(ops.stream().toArray(CompletableFuture[]::new)) + .thenCompose((v) -> wh.closeAsync()) + .thenApply((v) -> wh.getId()); + }) + .thenCompose((lf) -> lf); // flatten the + + Long ledgerId = f.get(5, TimeUnit.MINUTES); + log.info("Ledger created with 1000 entries: ledgerId=" + ledgerId); + + // Now let's read data back... + CompletableFuture ef = bk.newOpenLedgerOp() + .withLedgerId(ledgerId) + .withPassword(ledgerPassword) + .withDigestType(DigestType.MAC) + .execute() + .thenCompose((rh) -> { + return rh.readLastAddConfirmedAsync() + .thenCompose((lastId) -> rh.readAsync(0, lastId)); + }); + + LedgerEntries entries = ef.get(5,TimeUnit.MINUTES); + + + long count = 0; + Iterator it = entries.iterator(); + while ( it.hasNext()) { + org.apache.bookkeeper.client.api.LedgerEntry e = it.next(); + String msg = new String(e.getEntryBytes()); + assertEquals(String.format("message-%04d", count),msg); + count++; + } + + assertEquals(1000,count); + + log.info("Got entries: count=" + count); + + } + + + @Test + void whenWriteAndReadEntries_thenSuccess() throws Exception { + + LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); + + long start = System.currentTimeMillis(); + for ( int i = 0 ; i < 1000 ; i++ ) { + byte[] data = new String("message-" + i).getBytes(); + lh.append(data); + } + + lh.close(); + long elapsed = System.currentTimeMillis() - start; + log.info("Entries added to ledgerId " + lh.getId() + ", elapsed=" + elapsed); + + Long ledgerId = findLedgerByName(bk,"myledger").orElse(null); + assertNotNull(ledgerId); + + lh = bk.openLedger(ledgerId, BookKeeper.DigestType.MAC, ledgerPassword); + long lastId = lh.readLastConfirmed(); + Enumeration entries = lh.readEntries(0, lastId); + + while(entries.hasMoreElements()) { + LedgerEntry entry = entries.nextElement(); + String msg = new String(entry.getEntry()); + log.info("Entry: id=" + entry.getEntryId() + ", data=" + msg); + } + } +} diff --git a/persistence-modules/apache-bookkeeper/src/test/resources/logback-test.xml b/persistence-modules/apache-bookkeeper/src/test/resources/logback-test.xml new file mode 100644 index 0000000000..cea0f38eb8 --- /dev/null +++ b/persistence-modules/apache-bookkeeper/src/test/resources/logback-test.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + From 0c2aedbe8f01dd349d2551849f2b995a3cf2ab65 Mon Sep 17 00:00:00 2001 From: Philippe Date: Wed, 10 Jun 2020 01:20:24 -0300 Subject: [PATCH 06/10] [BAEL-2322] Relocating module --- .../apache-bookkeeper/data/.gitignore | 1 - .../apache-bookkeeper/data/bk1/.gitignore | 1 - .../apache-bookkeeper/data/bk2/.gitignore | 1 - .../apache-bookkeeper/data/zk/.gitignore | 2 - .../apache-bookkeeper/docker-compose.yml | 71 ------ libraries-data-2/apache-bookkeeper/pom.xml | 47 ---- .../tutorials/bookkeeper/BkHelper.java | 157 ------------ .../bookkeeper/BkHelperLiveTest.java | 229 ------------------ .../src/test/resources/logback-test.xml | 13 - libraries-data-2/pom.xml | 4 - persistence-modules/pom.xml | 1 + 11 files changed, 1 insertion(+), 526 deletions(-) delete mode 100644 libraries-data-2/apache-bookkeeper/data/.gitignore delete mode 100644 libraries-data-2/apache-bookkeeper/data/bk1/.gitignore delete mode 100644 libraries-data-2/apache-bookkeeper/data/bk2/.gitignore delete mode 100644 libraries-data-2/apache-bookkeeper/data/zk/.gitignore delete mode 100644 libraries-data-2/apache-bookkeeper/docker-compose.yml delete mode 100644 libraries-data-2/apache-bookkeeper/pom.xml delete mode 100644 libraries-data-2/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java delete mode 100644 libraries-data-2/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java delete mode 100644 libraries-data-2/apache-bookkeeper/src/test/resources/logback-test.xml diff --git a/libraries-data-2/apache-bookkeeper/data/.gitignore b/libraries-data-2/apache-bookkeeper/data/.gitignore deleted file mode 100644 index fb05d77307..0000000000 --- a/libraries-data-2/apache-bookkeeper/data/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bk/ diff --git a/libraries-data-2/apache-bookkeeper/data/bk1/.gitignore b/libraries-data-2/apache-bookkeeper/data/bk1/.gitignore deleted file mode 100644 index 32c9297ccd..0000000000 --- a/libraries-data-2/apache-bookkeeper/data/bk1/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bookkeeper/ diff --git a/libraries-data-2/apache-bookkeeper/data/bk2/.gitignore b/libraries-data-2/apache-bookkeeper/data/bk2/.gitignore deleted file mode 100644 index 32c9297ccd..0000000000 --- a/libraries-data-2/apache-bookkeeper/data/bk2/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bookkeeper/ diff --git a/libraries-data-2/apache-bookkeeper/data/zk/.gitignore b/libraries-data-2/apache-bookkeeper/data/zk/.gitignore deleted file mode 100644 index 0da095f9e7..0000000000 --- a/libraries-data-2/apache-bookkeeper/data/zk/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/myid -/version-2/ diff --git a/libraries-data-2/apache-bookkeeper/docker-compose.yml b/libraries-data-2/apache-bookkeeper/docker-compose.yml deleted file mode 100644 index 0ef4c41a4a..0000000000 --- a/libraries-data-2/apache-bookkeeper/docker-compose.yml +++ /dev/null @@ -1,71 +0,0 @@ -version: '3.0' -services: - zk: - image: zookeeper:3.6.1 - restart: always - ports: - - "2181:2181" - volumes: - - ./data/zk:/data - - bookie_init: - image: apache/bookkeeper:4.10.0 - environment: - BK_zkServers: "zk:2181" - BK_advertisedAddress: ${BK_PUBLIC_IP} - restart: on-failure - depends_on: - - zk - command: /opt/bookkeeper/bin/bookkeeper shell metaformat -nonInteractive - - bookie: - image: apache/bookkeeper:4.10.0 - restart: on-failure - environment: - BK_zkServers: "zk:2181" - BK_advertisedAddress: ${BK_PUBLIC_IP} - BK_httpServerPort: 3182 - ports: - - "3181:3181" - - "3182:3182" - volumes: - - ./data/bk:/data - depends_on: - - zk - - bookie_init - - bookie1: - image: apache/bookkeeper:4.10.0 - restart: on-failure - environment: - BOOKIE_PORT: 4181 - BK_zkServers: "zk:2181" - BK_advertisedAddress: ${BK_PUBLIC_IP} - BK_httpServerPort: 3182 - ports: - - "4181:4181" - volumes: - - ./data/bk1:/data - depends_on: - - zk - - bookie_init - - bookie2: - image: apache/bookkeeper:4.10.0 - restart: on-failure - environment: - BOOKIE_PORT: 4182 - BK_zkServers: "zk:2181" - BK_advertisedAddress: ${BK_PUBLIC_IP} - BK_httpServerPort: 3182 - ports: - - "4182:4182" - volumes: - - ./data/bk2:/data - depends_on: - - zk - - bookie_init - - - - diff --git a/libraries-data-2/apache-bookkeeper/pom.xml b/libraries-data-2/apache-bookkeeper/pom.xml deleted file mode 100644 index 46a7982b12..0000000000 --- a/libraries-data-2/apache-bookkeeper/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - 4.0.0 - apache-bookkeeper - 0.0.1-SNAPSHOT - apache-bookkeeper - jar - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - ../../ - - - - - org.apache.bookkeeper - bookkeeper-server - ${org.apache.bookkeeper.version} - - - org.slf4j - slf4j-log4j12 - - - - - - org.testcontainers - testcontainers - 1.14.3 - test - - - - - - 4.10.0 - - - - - diff --git a/libraries-data-2/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java b/libraries-data-2/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java deleted file mode 100644 index 7cba88af19..0000000000 --- a/libraries-data-2/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java +++ /dev/null @@ -1,157 +0,0 @@ -package com.baeldung.tutorials.bookkeeper; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Map.Entry; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; - -import org.apache.bookkeeper.client.BKException; -import org.apache.bookkeeper.client.BookKeeper; -import org.apache.bookkeeper.client.BookKeeper.DigestType; -import org.apache.bookkeeper.client.LedgerHandle; -import org.apache.bookkeeper.client.api.LedgerMetadata; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.zookeeper.AsyncCallback; - -public class BkHelper { - - private static final Log log = LogFactory.getLog(BkHelper.class); - - public static BookKeeper createBkClient(String zkConnectionString) { - try { - return new BookKeeper(zkConnectionString); - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } - - /** - * Creates a Ledger with the given name added as custom metadata - * @param bk - * @param name - * @param password - * @return - */ - public static LedgerHandle createLedger(BookKeeper bk, String name, byte[] password) { - try { - return bk.createLedger(3, 2, 2, DigestType.MAC, password, Collections.singletonMap("name", name.getBytes())); - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } - - /** - * Iterates over all available ledgers and returns the first one that has - * a metadata key 'name' equals to the given name - * @param bk - * @param name - * @return - * @throws Exception - */ - public static Optional findLedgerByName(BookKeeper bk, String name) throws Exception { - - Map ledgers = new HashMap(); - final AtomicInteger returnCode = new AtomicInteger(BKException.Code.OK); - final CountDownLatch processDone = new CountDownLatch(1); - - // There's no standard "list" operation. Instead, BK offers a generalized way to - // iterate over all available ledgers using an async visitor callback. - // The second callback will be called when there are no more ledgers do process or if an - // error occurs. - bk.getLedgerManager() - .asyncProcessLedgers((ledgerId, cb) -> collectLedgers(bk, ledgerId, cb, ledgers), - (rc, s, obj) -> { - returnCode.set(rc); - processDone.countDown(); - }, null, BKException.Code.OK, BKException.Code.ReadException); - - processDone.await(5, TimeUnit.MINUTES); - - log.info("Ledgers collected: total found=" + ledgers.size()); - - byte[] nameBytes = name.getBytes(); - - Optional> entry = ledgers.entrySet() - .stream() - .filter((e) -> { - Map meta = e.getValue().getCustomMetadata(); - if (meta != null) { - log.info("ledger: " + e.getKey() + ", customMeta=" + meta); - byte[] data = meta.get("name"); - if (data != null && Arrays.equals(data, nameBytes)) { - return true; - } else { - return false; - } - } else { - log.info("ledger: " + e.getKey() + ", no meta"); - return false; - } - }) - .findFirst(); - - if (entry.isPresent()) { - return Optional.of(entry.get().getKey()); - } else { - return Optional.empty(); - } - } - - public static void collectLedgers(BookKeeper bk, long ledgerId, AsyncCallback.VoidCallback cb, Map ledgers) { - log.debug("ledgerId: " + ledgerId); - - try { - bk.getLedgerManager() - .readLedgerMetadata(ledgerId) - .thenAccept((v) -> { - log.debug("Got ledger metadata"); - ledgers.put(ledgerId, v.getValue()); - }) - .thenAccept((v) -> { - cb.processResult(BKException.Code.OK, null, null); - }); - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } - - /** - * Return a list with all available Ledgers - * @param bk - * @return - */ - public static List listAllLedgers(BookKeeper bk) { - - final List ledgers = Collections.synchronizedList(new ArrayList<>()); - final CountDownLatch processDone = new CountDownLatch(1); - - bk.getLedgerManager() - .asyncProcessLedgers( - (ledgerId,cb) -> { - ledgers.add(ledgerId); - cb.processResult(BKException.Code.OK, null, null); - }, - (rc, s, obj) -> { - processDone.countDown(); - }, - null, BKException.Code.OK, BKException.Code.ReadException); - - try { - processDone.await(1,TimeUnit.MINUTES); - return ledgers; - } - catch(InterruptedException ie) { - throw new RuntimeException(ie); - } - } - - -} diff --git a/libraries-data-2/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java b/libraries-data-2/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java deleted file mode 100644 index 2bbf54e2b7..0000000000 --- a/libraries-data-2/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java +++ /dev/null @@ -1,229 +0,0 @@ -package com.baeldung.tutorials.bookkeeper; - -import static org.junit.jupiter.api.Assertions.*; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.atomic.AtomicReference; -import java.util.stream.Collectors; - -import org.apache.bookkeeper.client.AsyncCallback.AddCallback; -import org.apache.bookkeeper.client.AsyncCallback.CreateCallback; -import org.apache.bookkeeper.client.AsyncCallback.ReadCallback; -import org.apache.bookkeeper.client.BKException; -import org.apache.bookkeeper.client.BookKeeper; -import org.apache.bookkeeper.client.LedgerEntry; -import org.apache.bookkeeper.client.LedgerHandle; -import org.apache.bookkeeper.client.api.DigestType; -import org.apache.bookkeeper.client.api.LedgerEntries; -import org.apache.bookkeeper.client.api.ReadHandle; -import org.apache.bookkeeper.client.api.WriteAdvHandle; -import org.apache.bookkeeper.client.api.WriteHandle; -import org.apache.bookkeeper.tools.cli.commands.bookie.ListLedgersCommand; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.zookeeper.AsyncCallback; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import com.google.common.collect.Iterables; - -class BkHelperLiveTest extends BkHelper { - - private static BookKeeper bk; - private byte[] ledgerPassword = "SuperS3cR37".getBytes(); - - private static final Log log = LogFactory.getLog(BkHelperLiveTest.class); - - @BeforeAll - static void initBkClient() { - bk = createBkClient("192.168.99.101:2181"); - } - - @Test - void whenCreateLedger_thenSuccess() throws Exception { - - LedgerHandle lh = bk.createLedger(BookKeeper.DigestType.MAC, ledgerPassword); - assertNotNull(lh); - assertNotNull(lh.getId()); - - log.info("[I33] Ledge created: id=" + lh.getId()); - } - - - @Test - void whenCreateLedgerAsync_thenSuccess() throws Exception { - - CompletableFuture cf = bk.newCreateLedgerOp() - .withDigestType(org.apache.bookkeeper.client.api.DigestType.MAC) - .withPassword("password".getBytes()) - .execute(); - - WriteHandle handle = cf.get(1, TimeUnit.MINUTES); - assertNotNull(handle); - handle.close(); - - } - - - @Test - void whenAsyncCreateLedger_thenSuccess() throws Exception { - - CountDownLatch latch = new CountDownLatch(1); - AtomicReference handleRef =new AtomicReference<>(); - - bk.asyncCreateLedger(3, 2, 2, - BookKeeper.DigestType.MAC, - ledgerPassword, - (rc, lh, ctx) -> { - handleRef.set(lh); - latch.countDown(); - }, - null, - Collections.emptyMap()); - - latch.await(1, TimeUnit.MINUTES); - LedgerHandle lh = handleRef.get(); - assertNotNull(lh); - assertFalse(lh.isClosed(),"Ledger should be writeable"); - } - - - @Test - void whenListLedgers_thenSuccess() throws Exception { - - List ledgers = listAllLedgers(bk); - assertNotNull(ledgers); - } - - @Test - void whenWriteEntries_thenSuccess() throws Exception { - - LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); - - long start = System.currentTimeMillis(); - for ( int i = 0 ; i < 1000 ; i++ ) { - byte[] data = new String("message-" + i).getBytes(); - lh.append(data); - } - - lh.close(); - long elapsed = System.currentTimeMillis() - start; - log.info("Entries added to ledgerId " + lh.getId() + ". count=1000, elapsed=" + elapsed); - } - - @Test - void whenWriteEntriesAsync_thenSuccess() throws Exception { - - CompletableFuture f = bk.newCreateLedgerOp() - .withDigestType(DigestType.MAC) - .withPassword(ledgerPassword) - .execute() - .thenApply((wh) -> { - List> ops = new ArrayList<>(); - for( int i = 0; i < 1000 ; i++ ) { - byte[] data = String.format("message-%04d", i).getBytes(); - ops.add(wh.appendAsync(data)); - } - - return CompletableFuture - .allOf(ops.stream().toArray(CompletableFuture[]::new)) - .thenCompose((v) -> wh.closeAsync()); - }); - - f.get(5, TimeUnit.MINUTES); - } - - @Test - void whenWriteAndReadEntriesAsync_thenSuccess() throws Exception { - - CompletableFuture f = bk.newCreateLedgerOp() - .withDigestType(DigestType.MAC) - .withPassword(ledgerPassword) - .execute() - .thenApply((wh) -> { - List> ops = new ArrayList<>(); - for( int i = 0; i < 1000 ; i++ ) { - byte[] data = String.format("message-%04d", i).getBytes(); - ops.add(wh.appendAsync(data)); - } - - - return CompletableFuture - .allOf(ops.stream().toArray(CompletableFuture[]::new)) - .thenCompose((v) -> wh.closeAsync()) - .thenApply((v) -> wh.getId()); - }) - .thenCompose((lf) -> lf); // flatten the - - Long ledgerId = f.get(5, TimeUnit.MINUTES); - log.info("Ledger created with 1000 entries: ledgerId=" + ledgerId); - - // Now let's read data back... - CompletableFuture ef = bk.newOpenLedgerOp() - .withLedgerId(ledgerId) - .withPassword(ledgerPassword) - .withDigestType(DigestType.MAC) - .execute() - .thenCompose((rh) -> { - return rh.readLastAddConfirmedAsync() - .thenCompose((lastId) -> rh.readAsync(0, lastId)); - }); - - LedgerEntries entries = ef.get(5,TimeUnit.MINUTES); - - - long count = 0; - Iterator it = entries.iterator(); - while ( it.hasNext()) { - org.apache.bookkeeper.client.api.LedgerEntry e = it.next(); - String msg = new String(e.getEntryBytes()); - assertEquals(String.format("message-%04d", count),msg); - count++; - } - - assertEquals(1000,count); - - log.info("Got entries: count=" + count); - - } - - - @Test - void whenWriteAndReadEntries_thenSuccess() throws Exception { - - LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); - - long start = System.currentTimeMillis(); - for ( int i = 0 ; i < 1000 ; i++ ) { - byte[] data = new String("message-" + i).getBytes(); - lh.append(data); - } - - lh.close(); - long elapsed = System.currentTimeMillis() - start; - log.info("Entries added to ledgerId " + lh.getId() + ", elapsed=" + elapsed); - - Long ledgerId = findLedgerByName(bk,"myledger").orElse(null); - assertNotNull(ledgerId); - - lh = bk.openLedger(ledgerId, BookKeeper.DigestType.MAC, ledgerPassword); - long lastId = lh.readLastConfirmed(); - Enumeration entries = lh.readEntries(0, lastId); - - while(entries.hasMoreElements()) { - LedgerEntry entry = entries.nextElement(); - String msg = new String(entry.getEntry()); - log.info("Entry: id=" + entry.getEntryId() + ", data=" + msg); - } - } -} diff --git a/libraries-data-2/apache-bookkeeper/src/test/resources/logback-test.xml b/libraries-data-2/apache-bookkeeper/src/test/resources/logback-test.xml deleted file mode 100644 index cea0f38eb8..0000000000 --- a/libraries-data-2/apache-bookkeeper/src/test/resources/logback-test.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml index a05b25956f..95ebe9d8dd 100644 --- a/libraries-data-2/pom.xml +++ b/libraries-data-2/pom.xml @@ -217,8 +217,4 @@ - - apache-bookkeeper - - \ No newline at end of file diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index a03ba1ec5d..99692009f0 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -75,6 +75,7 @@ spring-persistence-simple spring-persistence-simple-2 + apache-bookkeeper From 00a5903c463607a88bc0690984ce6fbdec48224f Mon Sep 17 00:00:00 2001 From: Philippe Date: Sun, 14 Jun 2020 16:54:22 -0300 Subject: [PATCH 07/10] [BAEL-2322] Code formatting --- persistence-modules/apache-bookkeeper/pom.xml | 72 ++++---- .../tutorials/bookkeeper/BkHelper.java | 106 +++++------ .../bookkeeper/BkHelperLiveTest.java | 168 +++++++----------- .../src/test/resources/logback-test.xml | 6 +- 4 files changed, 151 insertions(+), 201 deletions(-) diff --git a/persistence-modules/apache-bookkeeper/pom.xml b/persistence-modules/apache-bookkeeper/pom.xml index 46a7982b12..0beea7f1fc 100644 --- a/persistence-modules/apache-bookkeeper/pom.xml +++ b/persistence-modules/apache-bookkeeper/pom.xml @@ -1,46 +1,46 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - 4.0.0 - apache-bookkeeper - 0.0.1-SNAPSHOT - apache-bookkeeper - jar + 4.0.0 + apache-bookkeeper + 0.0.1-SNAPSHOT + apache-bookkeeper + jar - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - ../../ - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + - - - org.apache.bookkeeper - bookkeeper-server - ${org.apache.bookkeeper.version} - - - org.slf4j - slf4j-log4j12 - - - + + + org.apache.bookkeeper + bookkeeper-server + ${org.apache.bookkeeper.version} + + + org.slf4j + slf4j-log4j12 + + + - - org.testcontainers - testcontainers - 1.14.3 - test - - - + + org.testcontainers + testcontainers + 1.14.3 + test + - - 4.10.0 - + + + + 4.10.0 + diff --git a/persistence-modules/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java b/persistence-modules/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java index 7cba88af19..55f5d7b09f 100644 --- a/persistence-modules/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java +++ b/persistence-modules/apache-bookkeeper/src/main/java/com/baeldung/tutorials/bookkeeper/BkHelper.java @@ -6,8 +6,8 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.Map.Entry; +import java.util.Optional; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @@ -23,7 +23,7 @@ import org.apache.zookeeper.AsyncCallback; public class BkHelper { - private static final Log log = LogFactory.getLog(BkHelper.class); + private static final Log LOG = LogFactory.getLog(BkHelper.class); public static BookKeeper createBkClient(String zkConnectionString) { try { @@ -57,7 +57,6 @@ public class BkHelper { * @throws Exception */ public static Optional findLedgerByName(BookKeeper bk, String name) throws Exception { - Map ledgers = new HashMap(); final AtomicInteger returnCode = new AtomicInteger(BKException.Code.OK); final CountDownLatch processDone = new CountDownLatch(1); @@ -67,52 +66,51 @@ public class BkHelper { // The second callback will be called when there are no more ledgers do process or if an // error occurs. bk.getLedgerManager() - .asyncProcessLedgers((ledgerId, cb) -> collectLedgers(bk, ledgerId, cb, ledgers), - (rc, s, obj) -> { - returnCode.set(rc); - processDone.countDown(); - }, null, BKException.Code.OK, BKException.Code.ReadException); - + .asyncProcessLedgers( + (ledgerId, cb) -> collectLedgers(bk, ledgerId, cb, ledgers), + (rc, s, obj) -> { + returnCode.set(rc); + processDone.countDown(); + }, + null, + BKException.Code.OK, BKException.Code.ReadException); processDone.await(5, TimeUnit.MINUTES); - - log.info("Ledgers collected: total found=" + ledgers.size()); + LOG.info("Ledgers collected: total found=" + ledgers.size()); byte[] nameBytes = name.getBytes(); - Optional> entry = ledgers.entrySet() - .stream() - .filter((e) -> { - Map meta = e.getValue().getCustomMetadata(); - if (meta != null) { - log.info("ledger: " + e.getKey() + ", customMeta=" + meta); - byte[] data = meta.get("name"); - if (data != null && Arrays.equals(data, nameBytes)) { - return true; - } else { - return false; - } - } else { - log.info("ledger: " + e.getKey() + ", no meta"); - return false; - } - }) - .findFirst(); - + .stream() + .filter((e) -> { + Map meta = e.getValue() + .getCustomMetadata(); + if (meta != null) { + LOG.info("ledger: " + e.getKey() + ", customMeta=" + meta); + byte[] data = meta.get("name"); + if (data != null && Arrays.equals(data, nameBytes)) { + return true; + } else { + return false; + } + } else { + LOG.info("ledger: " + e.getKey() + ", no meta"); + return false; + } + }) + .findFirst(); if (entry.isPresent()) { - return Optional.of(entry.get().getKey()); + return Optional.of(entry.get() + .getKey()); } else { return Optional.empty(); } } public static void collectLedgers(BookKeeper bk, long ledgerId, AsyncCallback.VoidCallback cb, Map ledgers) { - log.debug("ledgerId: " + ledgerId); - try { bk.getLedgerManager() .readLedgerMetadata(ledgerId) .thenAccept((v) -> { - log.debug("Got ledger metadata"); + LOG.debug("Got ledger metadata"); ledgers.put(ledgerId, v.getValue()); }) .thenAccept((v) -> { @@ -122,36 +120,30 @@ public class BkHelper { throw new RuntimeException(ex); } } - + /** * Return a list with all available Ledgers * @param bk * @return */ public static List listAllLedgers(BookKeeper bk) { - final List ledgers = Collections.synchronizedList(new ArrayList<>()); - final CountDownLatch processDone = new CountDownLatch(1); - + final CountDownLatch processDone = new CountDownLatch(1); + bk.getLedgerManager() - .asyncProcessLedgers( - (ledgerId,cb) -> { - ledgers.add(ledgerId); - cb.processResult(BKException.Code.OK, null, null); - }, - (rc, s, obj) -> { - processDone.countDown(); - }, - null, BKException.Code.OK, BKException.Code.ReadException); - - try { - processDone.await(1,TimeUnit.MINUTES); - return ledgers; - } - catch(InterruptedException ie) { - throw new RuntimeException(ie); - } + .asyncProcessLedgers((ledgerId, cb) -> { + ledgers.add(ledgerId); + cb.processResult(BKException.Code.OK, null, null); + }, + (rc, s, obj) -> { + processDone.countDown(); + }, null, BKException.Code.OK, BKException.Code.ReadException); + + try { + processDone.await(1, TimeUnit.MINUTES); + return ledgers; + } catch (InterruptedException ie) { + throw new RuntimeException(ie); + } } - - } diff --git a/persistence-modules/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java b/persistence-modules/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java index 2bbf54e2b7..84a8ce3db8 100644 --- a/persistence-modules/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java +++ b/persistence-modules/apache-bookkeeper/src/test/java/com/baeldung/tutorials/bookkeeper/BkHelperLiveTest.java @@ -1,9 +1,10 @@ package com.baeldung.tutorials.bookkeeper; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.Enumeration; import java.util.Iterator; @@ -11,163 +12,128 @@ import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; -import java.util.stream.Collectors; -import org.apache.bookkeeper.client.AsyncCallback.AddCallback; -import org.apache.bookkeeper.client.AsyncCallback.CreateCallback; -import org.apache.bookkeeper.client.AsyncCallback.ReadCallback; -import org.apache.bookkeeper.client.BKException; import org.apache.bookkeeper.client.BookKeeper; import org.apache.bookkeeper.client.LedgerEntry; import org.apache.bookkeeper.client.LedgerHandle; import org.apache.bookkeeper.client.api.DigestType; import org.apache.bookkeeper.client.api.LedgerEntries; -import org.apache.bookkeeper.client.api.ReadHandle; -import org.apache.bookkeeper.client.api.WriteAdvHandle; import org.apache.bookkeeper.client.api.WriteHandle; -import org.apache.bookkeeper.tools.cli.commands.bookie.ListLedgersCommand; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.zookeeper.AsyncCallback; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import com.google.common.collect.Iterables; - class BkHelperLiveTest extends BkHelper { - private static BookKeeper bk; private byte[] ledgerPassword = "SuperS3cR37".getBytes(); - - private static final Log log = LogFactory.getLog(BkHelperLiveTest.class); - + private static final Log LOG = LogFactory.getLog(BkHelperLiveTest.class); + @BeforeAll static void initBkClient() { - bk = createBkClient("192.168.99.101:2181"); + bk = createBkClient("192.168.99.101:2181"); } - + @Test void whenCreateLedger_thenSuccess() throws Exception { - LedgerHandle lh = bk.createLedger(BookKeeper.DigestType.MAC, ledgerPassword); assertNotNull(lh); assertNotNull(lh.getId()); - - log.info("[I33] Ledge created: id=" + lh.getId()); + LOG.info("[I33] Ledge created: id=" + lh.getId()); } - - + @Test void whenCreateLedgerAsync_thenSuccess() throws Exception { - + CompletableFuture cf = bk.newCreateLedgerOp() .withDigestType(org.apache.bookkeeper.client.api.DigestType.MAC) .withPassword("password".getBytes()) .execute(); - + WriteHandle handle = cf.get(1, TimeUnit.MINUTES); assertNotNull(handle); handle.close(); } - @Test void whenAsyncCreateLedger_thenSuccess() throws Exception { - CountDownLatch latch = new CountDownLatch(1); - AtomicReference handleRef =new AtomicReference<>(); - - bk.asyncCreateLedger(3, 2, 2, - BookKeeper.DigestType.MAC, - ledgerPassword, + AtomicReference handleRef = new AtomicReference<>(); + + bk.asyncCreateLedger(3, 2, 2, BookKeeper.DigestType.MAC, ledgerPassword, (rc, lh, ctx) -> { handleRef.set(lh); latch.countDown(); - }, - null, - Collections.emptyMap()); - + }, null, Collections.emptyMap()); latch.await(1, TimeUnit.MINUTES); LedgerHandle lh = handleRef.get(); - assertNotNull(lh); - assertFalse(lh.isClosed(),"Ledger should be writeable"); + assertNotNull(lh); + assertFalse(lh.isClosed(), "Ledger should be writeable"); } - @Test void whenListLedgers_thenSuccess() throws Exception { - List ledgers = listAllLedgers(bk); assertNotNull(ledgers); } - + @Test void whenWriteEntries_thenSuccess() throws Exception { - - LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); - + LedgerHandle lh = createLedger(bk, "myledger", ledgerPassword); long start = System.currentTimeMillis(); - for ( int i = 0 ; i < 1000 ; i++ ) { + for (int i = 0; i < 1000; i++) { byte[] data = new String("message-" + i).getBytes(); lh.append(data); - } - + } lh.close(); long elapsed = System.currentTimeMillis() - start; - log.info("Entries added to ledgerId " + lh.getId() + ". count=1000, elapsed=" + elapsed); + LOG.info("Entries added to ledgerId " + lh.getId() + ". count=1000, elapsed=" + elapsed); } - - @Test + + @Test void whenWriteEntriesAsync_thenSuccess() throws Exception { - CompletableFuture f = bk.newCreateLedgerOp() .withDigestType(DigestType.MAC) .withPassword(ledgerPassword) .execute() - .thenApply((wh) -> { - List> ops = new ArrayList<>(); - for( int i = 0; i < 1000 ; i++ ) { - byte[] data = String.format("message-%04d", i).getBytes(); + .thenApply((wh) -> { + List> ops = new ArrayList<>(); + for (int i = 0; i < 1000; i++) { + byte[] data = String.format("message-%04d", i) + .getBytes(); ops.add(wh.appendAsync(data)); - } - - return CompletableFuture - .allOf(ops.stream().toArray(CompletableFuture[]::new)) - .thenCompose((v) -> wh.closeAsync()); - }); - + } + return CompletableFuture.allOf(ops.stream() + .toArray(CompletableFuture[]::new)) + .thenCompose((v) -> wh.closeAsync()); + }); f.get(5, TimeUnit.MINUTES); } - - @Test + + @Test void whenWriteAndReadEntriesAsync_thenSuccess() throws Exception { - CompletableFuture f = bk.newCreateLedgerOp() .withDigestType(DigestType.MAC) .withPassword(ledgerPassword) .execute() - .thenApply((wh) -> { - List> ops = new ArrayList<>(); - for( int i = 0; i < 1000 ; i++ ) { - byte[] data = String.format("message-%04d", i).getBytes(); + .thenApply((wh) -> { + List> ops = new ArrayList<>(); + for (int i = 0; i < 1000; i++) { + byte[] data = String.format("message-%04d", i) + .getBytes(); ops.add(wh.appendAsync(data)); } - - - return CompletableFuture - .allOf(ops.stream().toArray(CompletableFuture[]::new)) + return CompletableFuture.allOf(ops.stream() + .toArray(CompletableFuture[]::new)) .thenCompose((v) -> wh.closeAsync()) .thenApply((v) -> wh.getId()); }) - .thenCompose((lf) -> lf); // flatten the - + .thenCompose((lf) -> lf); // flatten the futures Long ledgerId = f.get(5, TimeUnit.MINUTES); - log.info("Ledger created with 1000 entries: ledgerId=" + ledgerId); - + LOG.info("Ledger created with 1000 entries: ledgerId=" + ledgerId); + // Now let's read data back... CompletableFuture ef = bk.newOpenLedgerOp() .withLedgerId(ledgerId) @@ -175,55 +141,45 @@ class BkHelperLiveTest extends BkHelper { .withDigestType(DigestType.MAC) .execute() .thenCompose((rh) -> { - return rh.readLastAddConfirmedAsync() - .thenCompose((lastId) -> rh.readAsync(0, lastId)); + return rh.readLastAddConfirmedAsync() + .thenCompose((lastId) -> rh.readAsync(0, lastId)); }); + LedgerEntries entries = ef.get(5, TimeUnit.MINUTES); - LedgerEntries entries = ef.get(5,TimeUnit.MINUTES); - - + // Check all writes where OK long count = 0; Iterator it = entries.iterator(); - while ( it.hasNext()) { + while (it.hasNext()) { org.apache.bookkeeper.client.api.LedgerEntry e = it.next(); String msg = new String(e.getEntryBytes()); - assertEquals(String.format("message-%04d", count),msg); + assertEquals(String.format("message-%04d", count), msg); count++; } - - assertEquals(1000,count); - - log.info("Got entries: count=" + count); - + assertEquals(1000, count); + LOG.info("Got entries: count=" + count); } - @Test void whenWriteAndReadEntries_thenSuccess() throws Exception { - - LedgerHandle lh = createLedger(bk,"myledger",ledgerPassword); - + LedgerHandle lh = createLedger(bk, "myledger", ledgerPassword); long start = System.currentTimeMillis(); - for ( int i = 0 ; i < 1000 ; i++ ) { + for (int i = 0; i < 1000; i++) { byte[] data = new String("message-" + i).getBytes(); lh.append(data); - } - + } lh.close(); long elapsed = System.currentTimeMillis() - start; - log.info("Entries added to ledgerId " + lh.getId() + ", elapsed=" + elapsed); - - Long ledgerId = findLedgerByName(bk,"myledger").orElse(null); + LOG.info("Entries added to ledgerId " + lh.getId() + ", elapsed=" + elapsed); + + Long ledgerId = findLedgerByName(bk, "myledger").orElse(null); assertNotNull(ledgerId); - lh = bk.openLedger(ledgerId, BookKeeper.DigestType.MAC, ledgerPassword); long lastId = lh.readLastConfirmed(); Enumeration entries = lh.readEntries(0, lastId); - - while(entries.hasMoreElements()) { + while (entries.hasMoreElements()) { LedgerEntry entry = entries.nextElement(); String msg = new String(entry.getEntry()); - log.info("Entry: id=" + entry.getEntryId() + ", data=" + msg); + LOG.info("Entry: id=" + entry.getEntryId() + ", data=" + msg); } } } diff --git a/persistence-modules/apache-bookkeeper/src/test/resources/logback-test.xml b/persistence-modules/apache-bookkeeper/src/test/resources/logback-test.xml index cea0f38eb8..bfe6eee60c 100644 --- a/persistence-modules/apache-bookkeeper/src/test/resources/logback-test.xml +++ b/persistence-modules/apache-bookkeeper/src/test/resources/logback-test.xml @@ -1,8 +1,10 @@ - + - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - + %msg%n From 6f4948782cf4fa767dd3081396b81ae703ee471c Mon Sep 17 00:00:00 2001 From: Philippe Date: Sun, 14 Jun 2020 16:54:49 -0300 Subject: [PATCH 08/10] [BAEL-2322] Code formatting --- persistence-modules/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index 99692009f0..63a7a4deb9 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -75,7 +75,7 @@ spring-persistence-simple spring-persistence-simple-2 - apache-bookkeeper + apache-bookkeeper From 2f9308f15fe29e6d3ef62bf58fa5e6010b1cba46 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sun, 21 Jun 2020 20:49:45 -0300 Subject: [PATCH 09/10] BAEL-2322: PR fix --- aws-reactive/.sts4-cache/classpath-data.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 aws-reactive/.sts4-cache/classpath-data.json diff --git a/aws-reactive/.sts4-cache/classpath-data.json b/aws-reactive/.sts4-cache/classpath-data.json deleted file mode 100644 index 691f5fce94..0000000000 --- a/aws-reactive/.sts4-cache/classpath-data.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"aws-reactive","classpathEntries":[{"kind":"binary","path":"C:\\progs\\java\\openjdk11\\lib\\jrt-fs.jar","sourceContainerUrl":"file:/C:/progs/java/openjdk11/lib/src.zip","javadocContainerUrl":"https://docs.oracle.com/javase/11/docs/api/","isSystem":true,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-webflux\\2.2.1.RELEASE\\spring-boot-starter-webflux-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter-webflux/2.2.1.RELEASE/spring-boot-starter-webflux-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter\\2.2.1.RELEASE\\spring-boot-starter-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter/2.2.1.RELEASE/spring-boot-starter-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-logging\\2.2.1.RELEASE\\spring-boot-starter-logging-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter-logging/2.2.1.RELEASE/spring-boot-starter-logging-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\apache\\logging\\log4j\\log4j-to-slf4j\\2.12.1\\log4j-to-slf4j-2.12.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\apache\\logging\\log4j\\log4j-api\\2.12.1\\log4j-api-2.12.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\slf4j\\jul-to-slf4j\\1.7.29\\jul-to-slf4j-1.7.29.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/slf4j/jul-to-slf4j/1.7.29/jul-to-slf4j-1.7.29-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\jakarta\\annotation\\jakarta.annotation-api\\1.3.5\\jakarta.annotation-api-1.3.5.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\yaml\\snakeyaml\\1.25\\snakeyaml-1.25.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/yaml/snakeyaml/1.25/snakeyaml-1.25-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/yaml/snakeyaml/1.25/snakeyaml-1.25-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-json\\2.2.1.RELEASE\\spring-boot-starter-json-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter-json/2.2.1.RELEASE/spring-boot-starter-json-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\jackson\\core\\jackson-databind\\2.10.0\\jackson-databind-2.10.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.10.0/jackson-databind-2.10.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.10.0/jackson-databind-2.10.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\jackson\\datatype\\jackson-datatype-jdk8\\2.10.0\\jackson-datatype-jdk8-2.10.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.0/jackson-datatype-jdk8-2.10.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.0/jackson-datatype-jdk8-2.10.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\jackson\\datatype\\jackson-datatype-jsr310\\2.10.0\\jackson-datatype-jsr310-2.10.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.0/jackson-datatype-jsr310-2.10.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.0/jackson-datatype-jsr310-2.10.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\jackson\\module\\jackson-module-parameter-names\\2.10.0\\jackson-module-parameter-names-2.10.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.10.0/jackson-module-parameter-names-2.10.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.10.0/jackson-module-parameter-names-2.10.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-reactor-netty\\2.2.1.RELEASE\\spring-boot-starter-reactor-netty-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter-reactor-netty/2.2.1.RELEASE/spring-boot-starter-reactor-netty-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\projectreactor\\netty\\reactor-netty\\0.9.1.RELEASE\\reactor-netty-0.9.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/projectreactor/netty/reactor-netty/0.9.1.RELEASE/reactor-netty-0.9.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/projectreactor/netty/reactor-netty/0.9.1.RELEASE/reactor-netty-0.9.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-handler-proxy\\4.1.43.Final\\netty-handler-proxy-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-handler-proxy/4.1.43.Final/netty-handler-proxy-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-handler-proxy/4.1.43.Final/netty-handler-proxy-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-codec-socks\\4.1.43.Final\\netty-codec-socks-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec-socks/4.1.43.Final/netty-codec-socks-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec-socks/4.1.43.Final/netty-codec-socks-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\glassfish\\jakarta.el\\3.0.3\\jakarta.el-3.0.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-validation\\2.2.1.RELEASE\\spring-boot-starter-validation-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter-validation/2.2.1.RELEASE/spring-boot-starter-validation-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\jakarta\\validation\\jakarta.validation-api\\2.0.1\\jakarta.validation-api-2.0.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.1/jakarta.validation-api-2.0.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.1/jakarta.validation-api-2.0.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\hibernate\\validator\\hibernate-validator\\6.0.18.Final\\hibernate-validator-6.0.18.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hibernate/validator/hibernate-validator/6.0.18.Final/hibernate-validator-6.0.18.Final-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\jboss\\logging\\jboss-logging\\3.4.1.Final\\jboss-logging-3.4.1.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\classmate\\1.5.1\\classmate-1.5.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/classmate/1.5.1/classmate-1.5.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/classmate/1.5.1/classmate-1.5.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-web\\5.2.1.RELEASE\\spring-web-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-beans\\5.2.1.RELEASE\\spring-beans-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-webflux\\5.2.1.RELEASE\\spring-webflux-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-webflux/5.2.1.RELEASE/spring-webflux-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-webflux/5.2.1.RELEASE/spring-webflux-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\synchronoss\\cloud\\nio-multipart-parser\\1.1.0\\nio-multipart-parser-1.1.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/synchronoss/cloud/nio-multipart-parser/1.1.0/nio-multipart-parser-1.1.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/synchronoss/cloud/nio-multipart-parser/1.1.0/nio-multipart-parser-1.1.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\synchronoss\\cloud\\nio-stream-storage\\1.1.3\\nio-stream-storage-1.1.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/synchronoss/cloud/nio-stream-storage/1.1.3/nio-stream-storage-1.1.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/synchronoss/cloud/nio-stream-storage/1.1.3/nio-stream-storage-1.1.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\s3\\2.10.27\\s3-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/s3/2.10.27/s3-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/s3/2.10.27/s3-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\aws-xml-protocol\\2.10.27\\aws-xml-protocol-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.10.27/aws-xml-protocol-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/aws-xml-protocol/2.10.27/aws-xml-protocol-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\aws-query-protocol\\2.10.27\\aws-query-protocol-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/aws-query-protocol/2.10.27/aws-query-protocol-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/aws-query-protocol/2.10.27/aws-query-protocol-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\protocol-core\\2.10.27\\protocol-core-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/protocol-core/2.10.27/protocol-core-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/protocol-core/2.10.27/protocol-core-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\sdk-core\\2.10.27\\sdk-core-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/sdk-core/2.10.27/sdk-core-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/sdk-core/2.10.27/sdk-core-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\profiles\\2.10.27\\profiles-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/profiles/2.10.27/profiles-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/profiles/2.10.27/profiles-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\jackson\\core\\jackson-core\\2.10.0\\jackson-core-2.10.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.10.0/jackson-core-2.10.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.10.0/jackson-core-2.10.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\auth\\2.10.27\\auth-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/auth/2.10.27/auth-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/auth/2.10.27/auth-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\eventstream\\eventstream\\1.0.1\\eventstream-1.0.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/eventstream/eventstream/1.0.1/eventstream-1.0.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/eventstream/eventstream/1.0.1/eventstream-1.0.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\http-client-spi\\2.10.27\\http-client-spi-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/http-client-spi/2.10.27/http-client-spi-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/http-client-spi/2.10.27/http-client-spi-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\regions\\2.10.27\\regions-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/regions/2.10.27/regions-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/regions/2.10.27/regions-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\fasterxml\\jackson\\core\\jackson-annotations\\2.10.0\\jackson-annotations-2.10.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.0/jackson-annotations-2.10.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.0/jackson-annotations-2.10.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\annotations\\2.10.27\\annotations-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/annotations/2.10.27/annotations-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/annotations/2.10.27/annotations-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\utils\\2.10.27\\utils-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/utils/2.10.27/utils-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/utils/2.10.27/utils-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\aws-core\\2.10.27\\aws-core-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/aws-core/2.10.27/aws-core-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/aws-core/2.10.27/aws-core-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\apache-client\\2.10.27\\apache-client-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/apache-client/2.10.27/apache-client-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/apache-client/2.10.27/apache-client-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.5.10\\httpclient-4.5.10.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/httpcomponents/httpclient/4.5.10/httpclient-4.5.10-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/httpcomponents/httpclient/4.5.10/httpclient-4.5.10-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\commons-codec\\commons-codec\\1.13\\commons-codec-1.13.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/commons-codec/commons-codec/1.13/commons-codec-1.13-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/commons-codec/commons-codec/1.13/commons-codec-1.13-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.4.12\\httpcore-4.4.12.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/httpcomponents/httpcore/4.4.12/httpcore-4.4.12-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/httpcomponents/httpcore/4.4.12/httpcore-4.4.12-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\software\\amazon\\awssdk\\netty-nio-client\\2.10.27\\netty-nio-client-2.10.27.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/netty-nio-client/2.10.27/netty-nio-client-2.10.27-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/software/amazon/awssdk/netty-nio-client/2.10.27/netty-nio-client-2.10.27-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-codec-http\\4.1.43.Final\\netty-codec-http-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec-http/4.1.43.Final/netty-codec-http-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec-http/4.1.43.Final/netty-codec-http-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-codec-http2\\4.1.43.Final\\netty-codec-http2-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec-http2/4.1.43.Final/netty-codec-http2-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec-http2/4.1.43.Final/netty-codec-http2-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-codec\\4.1.43.Final\\netty-codec-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec/4.1.43.Final/netty-codec-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-codec/4.1.43.Final/netty-codec-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-transport\\4.1.43.Final\\netty-transport-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-transport/4.1.43.Final/netty-transport-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-transport/4.1.43.Final/netty-transport-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-resolver\\4.1.43.Final\\netty-resolver-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-resolver/4.1.43.Final/netty-resolver-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-resolver/4.1.43.Final/netty-resolver-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-common\\4.1.43.Final\\netty-common-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-common/4.1.43.Final/netty-common-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-common/4.1.43.Final/netty-common-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-buffer\\4.1.43.Final\\netty-buffer-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-buffer/4.1.43.Final/netty-buffer-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-buffer/4.1.43.Final/netty-buffer-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-handler\\4.1.43.Final\\netty-handler-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-handler/4.1.43.Final/netty-handler-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-handler/4.1.43.Final/netty-handler-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-transport-native-epoll\\4.1.43.Final\\netty-transport-native-epoll-4.1.43.Final-linux-x86_64.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-transport-native-epoll/4.1.43.Final/netty-transport-native-epoll-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-transport-native-epoll/4.1.43.Final/netty-transport-native-epoll-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\netty\\netty-transport-native-unix-common\\4.1.43.Final\\netty-transport-native-unix-common-4.1.43.Final.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.43.Final/netty-transport-native-unix-common-4.1.43.Final-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.43.Final/netty-transport-native-unix-common-4.1.43.Final-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\typesafe\\netty\\netty-reactive-streams-http\\2.0.3\\netty-reactive-streams-http-2.0.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/typesafe/netty/netty-reactive-streams-http/2.0.3/netty-reactive-streams-http-2.0.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/typesafe/netty/netty-reactive-streams-http/2.0.3/netty-reactive-streams-http-2.0.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\typesafe\\netty\\netty-reactive-streams\\2.0.3\\netty-reactive-streams-2.0.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/typesafe/netty/netty-reactive-streams/2.0.3/netty-reactive-streams-2.0.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/typesafe/netty/netty-reactive-streams/2.0.3/netty-reactive-streams-2.0.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\reactivestreams\\reactive-streams\\1.0.3\\reactive-streams-1.0.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-test\\2.2.1.RELEASE\\spring-boot-starter-test-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-starter-test/2.2.1.RELEASE/spring-boot-starter-test-2.2.1.RELEASE-sources.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-test\\2.2.1.RELEASE\\spring-boot-test-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-test/2.2.1.RELEASE/spring-boot-test-2.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-test/2.2.1.RELEASE/spring-boot-test-2.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-test-autoconfigure\\2.2.1.RELEASE\\spring-boot-test-autoconfigure-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-test-autoconfigure/2.2.1.RELEASE/spring-boot-test-autoconfigure-2.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-test-autoconfigure/2.2.1.RELEASE/spring-boot-test-autoconfigure-2.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\jayway\\jsonpath\\json-path\\2.4.0\\json-path-2.4.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/jayway/jsonpath/json-path/2.4.0/json-path-2.4.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\net\\minidev\\json-smart\\2.3\\json-smart-2.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/minidev/json-smart/2.3/json-smart-2.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/minidev/json-smart/2.3/json-smart-2.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\net\\minidev\\accessors-smart\\1.2\\accessors-smart-1.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/minidev/accessors-smart/1.2/accessors-smart-1.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/minidev/accessors-smart/1.2/accessors-smart-1.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\ow2\\asm\\asm\\5.0.4\\asm-5.0.4.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/ow2/asm/asm/5.0.4/asm-5.0.4-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/ow2/asm/asm/5.0.4/asm-5.0.4-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\jakarta\\xml\\bind\\jakarta.xml.bind-api\\2.3.2\\jakarta.xml.bind-api-2.3.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\jakarta\\activation\\jakarta.activation-api\\1.2.1\\jakarta.activation-api-1.2.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\junit\\jupiter\\junit-jupiter\\5.5.2\\junit-jupiter-5.5.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter/5.5.2/junit-jupiter-5.5.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter/5.5.2/junit-jupiter-5.5.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\mockito\\mockito-junit-jupiter\\3.1.0\\mockito-junit-jupiter-3.1.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/mockito/mockito-junit-jupiter/3.1.0/mockito-junit-jupiter-3.1.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/mockito/mockito-junit-jupiter/3.1.0/mockito-junit-jupiter-3.1.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\assertj\\assertj-core\\3.13.2\\assertj-core-3.13.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/assertj/assertj-core/3.13.2/assertj-core-3.13.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/assertj/assertj-core/3.13.2/assertj-core-3.13.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\skyscreamer\\jsonassert\\1.5.0\\jsonassert-1.5.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\com\\vaadin\\external\\google\\android-json\\0.0.20131108.vaadin1\\android-json-0.0.20131108.vaadin1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-core\\5.2.1.RELEASE\\spring-core-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-jcl\\5.2.1.RELEASE\\spring-jcl-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-test\\5.2.1.RELEASE\\spring-test-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-test/5.2.1.RELEASE/spring-test-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-test/5.2.1.RELEASE/spring-test-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\xmlunit\\xmlunit-core\\2.6.3\\xmlunit-core-2.6.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/xmlunit/xmlunit-core/2.6.3/xmlunit-core-2.6.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/xmlunit/xmlunit-core/2.6.3/xmlunit-core-2.6.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\projectreactor\\reactor-test\\3.3.0.RELEASE\\reactor-test-3.3.0.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/projectreactor/reactor-test/3.3.0.RELEASE/reactor-test-3.3.0.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/projectreactor/reactor-test/3.3.0.RELEASE/reactor-test-3.3.0.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\io\\projectreactor\\reactor-core\\3.3.0.RELEASE\\reactor-core-3.3.0.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/projectreactor/reactor-core/3.3.0.RELEASE/reactor-core-3.3.0.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/io/projectreactor/reactor-core/3.3.0.RELEASE/reactor-core-3.3.0.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-devtools\\2.2.1.RELEASE\\spring-boot-devtools-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-devtools/2.2.1.RELEASE/spring-boot-devtools-2.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-devtools/2.2.1.RELEASE/spring-boot-devtools-2.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot\\2.2.1.RELEASE\\spring-boot-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot/2.2.1.RELEASE/spring-boot-2.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-context\\5.2.1.RELEASE\\spring-context-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-aop\\5.2.1.RELEASE\\spring-aop-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\spring-expression\\5.2.1.RELEASE\\spring-expression-5.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-autoconfigure\\2.2.1.RELEASE\\spring-boot-autoconfigure-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.2.1.RELEASE/spring-boot-autoconfigure-2.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\springframework\\boot\\spring-boot-configuration-processor\\2.2.1.RELEASE\\spring-boot-configuration-processor-2.2.1.RELEASE.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-configuration-processor/2.2.1.RELEASE/spring-boot-configuration-processor-2.2.1.RELEASE-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/springframework/boot/spring-boot-configuration-processor/2.2.1.RELEASE/spring-boot-configuration-processor-2.2.1.RELEASE-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\projectlombok\\lombok\\1.18.10\\lombok-1.18.10.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/projectlombok/lombok/1.18.10/lombok-1.18.10-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/projectlombok/lombok/1.18.10/lombok-1.18.10-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\slf4j\\slf4j-api\\1.7.30\\slf4j-api-1.7.30.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\ch\\qos\\logback\\logback-classic\\1.2.3\\logback-classic-1.2.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\ch\\qos\\logback\\logback-core\\1.2.3\\logback-core-1.2.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\slf4j\\jcl-over-slf4j\\1.7.30\\jcl-over-slf4j-1.7.30.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.30/jcl-over-slf4j-1.7.30-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.30/jcl-over-slf4j-1.7.30-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\junit\\junit\\4.12\\junit-4.12.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/junit/junit/4.12/junit-4.12-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/junit/junit/4.12/junit-4.12-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\hamcrest\\hamcrest-core\\2.1\\hamcrest-core-2.1.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hamcrest/hamcrest-core/2.1/hamcrest-core-2.1-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hamcrest/hamcrest-core/2.1/hamcrest-core-2.1-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\junit\\jupiter\\junit-jupiter-engine\\5.2.0\\junit-jupiter-engine-5.2.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.2.0/junit-jupiter-engine-5.2.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.2.0/junit-jupiter-engine-5.2.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\apiguardian\\apiguardian-api\\1.0.0\\apiguardian-api-1.0.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\junit\\platform\\junit-platform-engine\\1.5.2\\junit-platform-engine-1.5.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/platform/junit-platform-engine/1.5.2/junit-platform-engine-1.5.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/platform/junit-platform-engine/1.5.2/junit-platform-engine-1.5.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\junit\\jupiter\\junit-jupiter-params\\5.2.0\\junit-jupiter-params-5.2.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.2.0/junit-jupiter-params-5.2.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.2.0/junit-jupiter-params-5.2.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\junit\\jupiter\\junit-jupiter-api\\5.2.0\\junit-jupiter-api-5.2.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.2.0/junit-jupiter-api-5.2.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.2.0/junit-jupiter-api-5.2.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\opentest4j\\opentest4j\\1.1.0\\opentest4j-1.1.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/opentest4j/opentest4j/1.1.0/opentest4j-1.1.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/opentest4j/opentest4j/1.1.0/opentest4j-1.1.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\junit\\platform\\junit-platform-commons\\1.5.2\\junit-platform-commons-1.5.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/platform/junit-platform-commons/1.5.2/junit-platform-commons-1.5.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/junit/platform/junit-platform-commons/1.5.2/junit-platform-commons-1.5.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\hamcrest\\hamcrest\\2.2\\hamcrest-2.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\hamcrest\\hamcrest-all\\1.3\\hamcrest-all-1.3.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hamcrest/hamcrest-all/1.3/hamcrest-all-1.3-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/hamcrest/hamcrest-all/1.3/hamcrest-all-1.3-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\net\\bytebuddy\\byte-buddy\\1.10.5\\byte-buddy-1.10.5.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/bytebuddy/byte-buddy/1.10.5/byte-buddy-1.10.5-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/bytebuddy/byte-buddy/1.10.5/byte-buddy-1.10.5-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\mockito\\mockito-core\\3.3.0\\mockito-core-3.3.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/mockito/mockito-core/3.3.0/mockito-core-3.3.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/mockito/mockito-core/3.3.0/mockito-core-3.3.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\net\\bytebuddy\\byte-buddy-agent\\1.10.2\\byte-buddy-agent-1.10.2.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/bytebuddy/byte-buddy-agent/1.10.2/byte-buddy-agent-1.10.2-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/net/bytebuddy/byte-buddy-agent/1.10.2/byte-buddy-agent-1.10.2-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\objenesis\\objenesis\\2.6\\objenesis-2.6.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/objenesis/objenesis/2.6/objenesis-2.6-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/objenesis/objenesis/2.6/objenesis-2.6-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"binary","path":"C:\\Users\\Philippe\\.m2\\repository\\org\\apache\\maven\\surefire\\surefire-logger-api\\2.21.0\\surefire-logger-api-2.21.0.jar","sourceContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/maven/surefire/surefire-logger-api/2.21.0/surefire-logger-api-2.21.0-sources.jar","javadocContainerUrl":"file:/C:/Users/Philippe/.m2/repository/org/apache/maven/surefire/surefire-logger-api/2.21.0/surefire-logger-api-2.21.0-javadoc.jar","isSystem":false,"isOwn":false,"isTest":false,"isJavaContent":false},{"kind":"source","path":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\src\\main\\java","outputFolder":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\target\\classes","javadocContainerUrl":"file:/C:/Users/Philippe/work/baeldung/repo/tutorials/aws-reactive/target/site/apidocs","isSystem":false,"isOwn":true,"isTest":false,"isJavaContent":true},{"kind":"source","path":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\src\\test\\java","outputFolder":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\target\\test-classes","javadocContainerUrl":"file:/C:/Users/Philippe/work/baeldung/repo/tutorials/aws-reactive/target/site/apidocs","isSystem":false,"isOwn":true,"isTest":true,"isJavaContent":true},{"kind":"source","path":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\src\\main\\resources","outputFolder":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\target\\classes","isSystem":false,"isOwn":true,"isTest":false,"isJavaContent":false},{"kind":"source","path":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\src\\test\\resources","outputFolder":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\target\\test-classes","isSystem":false,"isOwn":true,"isTest":true,"isJavaContent":false},{"kind":"source","path":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\src\\test\\java","outputFolder":"C:\\Users\\Philippe\\work\\baeldung\\repo\\tutorials\\aws-reactive\\target\\test-classes","javadocContainerUrl":"file:/C:/Users/Philippe/work/baeldung/repo/tutorials/aws-reactive/target/site/apidocs","isSystem":false,"isOwn":true,"isTest":false,"isJavaContent":false}]} \ No newline at end of file From 6646f3e8a611bb95a110abfce06b3f0de7752405 Mon Sep 17 00:00:00 2001 From: Philippe Date: Sun, 21 Jun 2020 20:56:01 -0300 Subject: [PATCH 10/10] BAEL-2322: PR fix --- libraries-data-2/pom.xml | 1 - persistence-modules/pom.xml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml index 95ebe9d8dd..05b8722708 100644 --- a/libraries-data-2/pom.xml +++ b/libraries-data-2/pom.xml @@ -216,5 +216,4 @@ - \ No newline at end of file diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index 63a7a4deb9..efef4f2015 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -14,6 +14,7 @@ activejdbc + apache-bookkeeper apache-cayenne core-java-persistence deltaspike @@ -75,7 +76,6 @@ spring-persistence-simple spring-persistence-simple-2 - apache-bookkeeper