From 5ac29ffadcd3f3f38ab71d3aed79e00d1b22a016 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Wed, 30 Jul 2025 22:08:20 +0200 Subject: [PATCH 01/41] BAEL-9141 quarkus-infinispan module code started --- quarkus-modules/quarkus-infinispan/pom.xml | 122 ++++++++++++++++++ .../src/main/docker/Dockerfile.jvm | 98 ++++++++++++++ .../src/main/docker/Dockerfile.legacy-jar | 94 ++++++++++++++ .../src/main/docker/Dockerfile.native | 29 +++++ .../src/main/docker/Dockerfile.native-micro | 32 +++++ .../baeldung/InfinispanEmbeddedCacheDemo.java | 70 ++++++++++ .../src/main/resources/application.properties | 0 7 files changed, 445 insertions(+) create mode 100644 quarkus-modules/quarkus-infinispan/pom.xml create mode 100644 quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.jvm create mode 100644 quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.legacy-jar create mode 100644 quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.native create mode 100644 quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.native-micro create mode 100644 quarkus-modules/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java create mode 100644 quarkus-modules/quarkus-infinispan/src/main/resources/application.properties diff --git a/quarkus-modules/quarkus-infinispan/pom.xml b/quarkus-modules/quarkus-infinispan/pom.xml new file mode 100644 index 000000000000..20da8b078ed5 --- /dev/null +++ b/quarkus-modules/quarkus-infinispan/pom.xml @@ -0,0 +1,122 @@ + + + 4.0.0 + com.baeldung + quarkus-infinispan + 1.0.0-SNAPSHOT + + + + + ${quarkus.platform.group-id} + ${quarkus.platform.artifact-id} + ${quarkus.platform.version} + pom + import + + + + + + + io.quarkiverse.infinispan + quarkus-infinispan-embedded + ${quarkus.infinispan} + + + io.quarkus + quarkus-arc + + + io.quarkus + quarkus-junit5 + test + + + + + + + ${quarkus.platform.group-id} + quarkus-maven-plugin + ${quarkus.platform.version} + true + + + + build + generate-code + generate-code-tests + native-image-agent + + + + + + maven-compiler-plugin + ${compiler-plugin.version} + + true + + + + maven-surefire-plugin + ${surefire-plugin.version} + + + org.jboss.logmanager.LogManager + ${maven.home} + + + + + maven-failsafe-plugin + ${surefire-plugin.version} + + + + integration-test + verify + + + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + + native + + + native + + + + false + true + + + + + + 3.14.0 + 17 + UTF-8 + UTF-8 + quarkus-bom + io.quarkus.platform + 1.0.2 + 3.25.0 + true + 3.5.3 + + + diff --git a/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.jvm b/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.jvm new file mode 100644 index 000000000000..d84064dfa44a --- /dev/null +++ b/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.jvm @@ -0,0 +1,98 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode +# +# Before building the container image run: +# +# ./mvnw package +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/quarkus-infinispan-jvm . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-jvm +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. +# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005 +# when running the container +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-jvm +# +# This image uses the `run-java.sh` script to run the application. +# This scripts computes the command line to execute your Java application, and +# includes memory/GC tuning. +# You can configure the behavior using the following environment properties: +# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") - Be aware that this will override +# the default JVM options, use `JAVA_OPTS_APPEND` to append options +# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options +# in JAVA_OPTS (example: "-Dsome.property=foo") +# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is +# used to calculate a default maximal heap memory based on a containers restriction. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio +# of the container available memory as set here. The default is `50` which means 50% +# of the available memory is used as an upper boundary. You can skip this mechanism by +# setting this value to `0` in which case no `-Xmx` option is added. +# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This +# is used to calculate a default initial heap memory based on the maximum heap memory. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio +# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx` +# is used as the initial heap size. You can skip this mechanism by setting this value +# to `0` in which case no `-Xms` option is added (example: "25") +# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS. +# This is used to calculate the maximum value of the initial heap memory. If used in +# a container without any memory constraints for the container then this option has +# no effect. If there is a memory constraint then `-Xms` is limited to the value set +# here. The default is 4096MB which means the calculated value of `-Xms` never will +# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096") +# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output +# when things are happening. This option, if set to true, will set +# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true"). +# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example: +# true"). +# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787"). +# - CONTAINER_CORE_LIMIT: A calculated core limit as described in +# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2") +# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024"). +# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion. +# (example: "20") +# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking. +# (example: "40") +# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection. +# (example: "4") +# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus +# previous GC times. (example: "90") +# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20") +# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100") +# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should +# contain the necessary JRE command-line options to specify the required GC, which +# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC). +# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080") +# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080") +# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be +# accessed directly. (example: "foo.example.com,bar.example.com") +# +### +FROM registry.access.redhat.com/ubi9/openjdk-17:1.21 + +ENV LANGUAGE='en_US:en' + + +# We make four distinct layers so if there are application changes the library layers can be re-used +COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/ +COPY --chown=185 target/quarkus-app/*.jar /deployments/ +COPY --chown=185 target/quarkus-app/app/ /deployments/app/ +COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/ + +EXPOSE 8080 +USER 185 +ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" + +ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ] + diff --git a/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.legacy-jar b/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.legacy-jar new file mode 100644 index 000000000000..7cd3db3b099c --- /dev/null +++ b/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.legacy-jar @@ -0,0 +1,94 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode +# +# Before building the container image run: +# +# ./mvnw package -Dquarkus.package.jar.type=legacy-jar +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/quarkus-infinispan-legacy-jar . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-legacy-jar +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. +# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005 +# when running the container +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-legacy-jar +# +# This image uses the `run-java.sh` script to run the application. +# This scripts computes the command line to execute your Java application, and +# includes memory/GC tuning. +# You can configure the behavior using the following environment properties: +# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") - Be aware that this will override +# the default JVM options, use `JAVA_OPTS_APPEND` to append options +# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options +# in JAVA_OPTS (example: "-Dsome.property=foo") +# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is +# used to calculate a default maximal heap memory based on a containers restriction. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio +# of the container available memory as set here. The default is `50` which means 50% +# of the available memory is used as an upper boundary. You can skip this mechanism by +# setting this value to `0` in which case no `-Xmx` option is added. +# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This +# is used to calculate a default initial heap memory based on the maximum heap memory. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio +# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx` +# is used as the initial heap size. You can skip this mechanism by setting this value +# to `0` in which case no `-Xms` option is added (example: "25") +# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS. +# This is used to calculate the maximum value of the initial heap memory. If used in +# a container without any memory constraints for the container then this option has +# no effect. If there is a memory constraint then `-Xms` is limited to the value set +# here. The default is 4096MB which means the calculated value of `-Xms` never will +# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096") +# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output +# when things are happening. This option, if set to true, will set +# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true"). +# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example: +# true"). +# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787"). +# - CONTAINER_CORE_LIMIT: A calculated core limit as described in +# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2") +# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024"). +# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion. +# (example: "20") +# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking. +# (example: "40") +# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection. +# (example: "4") +# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus +# previous GC times. (example: "90") +# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20") +# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100") +# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should +# contain the necessary JRE command-line options to specify the required GC, which +# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC). +# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080") +# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080") +# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be +# accessed directly. (example: "foo.example.com,bar.example.com") +# +### +FROM registry.access.redhat.com/ubi9/openjdk-17:1.21 + +ENV LANGUAGE='en_US:en' + + +COPY target/lib/* /deployments/lib/ +COPY target/*-runner.jar /deployments/quarkus-run.jar + +EXPOSE 8080 +USER 185 +ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" + +ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ] diff --git a/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.native b/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.native new file mode 100644 index 000000000000..686b7dc26dc2 --- /dev/null +++ b/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.native @@ -0,0 +1,29 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. +# +# Before building the container image run: +# +# ./mvnw package -Dnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native -t quarkus/quarkus-infinispan . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan +# +# The ` registry.access.redhat.com/ubi9/ubi-minimal:9.5` base image is based on UBI 9. +# To use UBI 8, switch to `quay.io/ubi8/ubi-minimal:8.10`. +### +FROM registry.access.redhat.com/ubi9/ubi-minimal:9.5 +WORKDIR /work/ +RUN chown 1001 /work \ + && chmod "g+rwX" /work \ + && chown 1001:root /work +COPY --chown=1001:root --chmod=0755 target/*-runner /work/application + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.native-micro b/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.native-micro new file mode 100644 index 000000000000..c25d9adb3319 --- /dev/null +++ b/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.native-micro @@ -0,0 +1,32 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. +# It uses a micro base image, tuned for Quarkus native executables. +# It reduces the size of the resulting container image. +# Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. +# +# Before building the container image run: +# +# ./mvnw package -Dnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/quarkus-infinispan . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan +# +# The `quay.io/quarkus/ubi9-quarkus-micro-image:2.0` base image is based on UBI 9. +# To use UBI 8, switch to `quay.io/quarkus/quarkus-micro-image:2.0`. +### +FROM quay.io/quarkus/ubi9-quarkus-micro-image:2.0 +WORKDIR /work/ +RUN chown 1001 /work \ + && chmod "g+rwX" /work \ + && chown 1001:root /work +COPY --chown=1001:root --chmod=0755 target/*-runner /work/application + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/quarkus-modules/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java b/quarkus-modules/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java new file mode 100644 index 000000000000..4c77456fc0de --- /dev/null +++ b/quarkus-modules/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java @@ -0,0 +1,70 @@ +package com.baeldung; + +import java.util.concurrent.TimeUnit; + +import org.infinispan.Cache; +import org.infinispan.configuration.cache.CacheMode; +import org.infinispan.configuration.cache.Configuration; +import org.infinispan.configuration.cache.ConfigurationBuilder; +import org.infinispan.manager.EmbeddedCacheManager; + +import io.quarkus.runtime.QuarkusApplication; +import io.quarkus.runtime.annotations.QuarkusMain; +import jakarta.inject.Inject; + +@QuarkusMain +public class InfinispanEmbeddedCacheDemo implements QuarkusApplication { + + @Inject + private EmbeddedCacheManager cacheManager; + + private Configuration initConfig() { + Configuration cacheConfig = new ConfigurationBuilder().clustering().cacheMode(CacheMode.LOCAL) + // Cache eviction: Limit cache to 100 entries. + .memory().maxCount(100) + // Cache expiration: Entries live for 60 minutes. + .expiration().lifespan(60, TimeUnit.SECONDS) + // Passivation: Write evicted entries to disk. + .persistence().passivation(true).build(); + return cacheConfig; + } + + @Override + public int run(String... args) throws Exception { + // Define a cache called "demoCache" with the above configurations. + cacheManager.defineConfiguration("demoCache", initConfig()); + Cache demoCache = cacheManager.getCache("demoCache"); + + // 3. Build a cache with some data. + for (int i = 0; i < 10; i++) { + demoCache.put("key" + i, "value" + i); + } + + System.out.println("Cache created with initial data: %1$s entries.".formatted(demoCache.size())); + + for (int i = 0; i < 10; i++) { + System.out.println("key" + i + ": " + demoCache.get("key" + i)); + } + + // 4. Cache Expiration: + System.out.println("Waiting 65 seconds to let entries expire..."); + + Thread.sleep(65 * 1000); + + System.out.println("After expiration, key1: " + demoCache.get("key1")); // Expected to be null + + // 5. Cache Eviction: + // Add extra entries to trigger eviction based on the memory limit. + for (int i = 0; i < 200; i++) { + demoCache.put("k" + i, "v" + i); + } + System.out.println("After eviction test, cache size: " + demoCache.size()); + + // 6. Passivation of cache is enabled in the configuration. + // When entries are evicted, they are passivated (written to disk). + + cacheManager.stop(); + return 0; + } + +} diff --git a/quarkus-modules/quarkus-infinispan/src/main/resources/application.properties b/quarkus-modules/quarkus-infinispan/src/main/resources/application.properties new file mode 100644 index 000000000000..e69de29bb2d1 From 3d48491578f23d2d83dd4510a2b22a20198972fb Mon Sep 17 00:00:00 2001 From: vshanbha Date: Sat, 2 Aug 2025 22:25:03 +0200 Subject: [PATCH 02/41] BAEL-9141 quarkus-infinispan module moved to extensions --- quarkus-modules/quarkus-extension/pom.xml | 1 + .../{ => quarkus-extension}/quarkus-infinispan/pom.xml | 7 +++++++ .../quarkus-infinispan/src/main/docker/Dockerfile.jvm | 0 .../src/main/docker/Dockerfile.legacy-jar | 0 .../quarkus-infinispan/src/main/docker/Dockerfile.native | 0 .../src/main/docker/Dockerfile.native-micro | 0 .../java/com/baeldung/InfinispanEmbeddedCacheDemo.java | 0 .../src/main/resources/application.properties | 0 8 files changed, 8 insertions(+) rename quarkus-modules/{ => quarkus-extension}/quarkus-infinispan/pom.xml (95%) rename quarkus-modules/{ => quarkus-extension}/quarkus-infinispan/src/main/docker/Dockerfile.jvm (100%) rename quarkus-modules/{ => quarkus-extension}/quarkus-infinispan/src/main/docker/Dockerfile.legacy-jar (100%) rename quarkus-modules/{ => quarkus-extension}/quarkus-infinispan/src/main/docker/Dockerfile.native (100%) rename quarkus-modules/{ => quarkus-extension}/quarkus-infinispan/src/main/docker/Dockerfile.native-micro (100%) rename quarkus-modules/{ => quarkus-extension}/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java (100%) rename quarkus-modules/{ => quarkus-extension}/quarkus-infinispan/src/main/resources/application.properties (100%) diff --git a/quarkus-modules/quarkus-extension/pom.xml b/quarkus-modules/quarkus-extension/pom.xml index e663319c025f..cdcde626c921 100644 --- a/quarkus-modules/quarkus-extension/pom.xml +++ b/quarkus-modules/quarkus-extension/pom.xml @@ -17,5 +17,6 @@ quarkus-liquibase quarkus-app quarkus-load-shedding + quarkus-infinispan diff --git a/quarkus-modules/quarkus-infinispan/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml similarity index 95% rename from quarkus-modules/quarkus-infinispan/pom.xml rename to quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml index 20da8b078ed5..2d3859544f54 100644 --- a/quarkus-modules/quarkus-infinispan/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml @@ -4,6 +4,13 @@ com.baeldung quarkus-infinispan 1.0.0-SNAPSHOT + quarkus-infinispan + + + com.baeldung.quarkus.extension + quarkus-extension + 1.0-SNAPSHOT + diff --git a/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.jvm b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.jvm similarity index 100% rename from quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.jvm rename to quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.jvm diff --git a/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.legacy-jar b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.legacy-jar similarity index 100% rename from quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.legacy-jar rename to quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.legacy-jar diff --git a/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.native b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.native similarity index 100% rename from quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.native rename to quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.native diff --git a/quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.native-micro b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.native-micro similarity index 100% rename from quarkus-modules/quarkus-infinispan/src/main/docker/Dockerfile.native-micro rename to quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.native-micro diff --git a/quarkus-modules/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java similarity index 100% rename from quarkus-modules/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java rename to quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java diff --git a/quarkus-modules/quarkus-infinispan/src/main/resources/application.properties b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/resources/application.properties similarity index 100% rename from quarkus-modules/quarkus-infinispan/src/main/resources/application.properties rename to quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/resources/application.properties From ca85aeb1ca997733cc52b145bc9a32ac4a52ed3a Mon Sep 17 00:00:00 2001 From: vshanbha Date: Sun, 3 Aug 2025 13:33:55 +0200 Subject: [PATCH 03/41] BAEL-9141 quarkus-infinispan test cases modified --- .../quarkus-infinispan/pom.xml | 16 +++-- .../baeldung/InfinispanEmbeddedCacheDemo.java | 70 ------------------- .../infinispan/InfinispanCacheService.java | 66 +++++++++++++++++ .../InfinispanCacheServiceTest.java | 68 ++++++++++++++++++ 4 files changed, 146 insertions(+), 74 deletions(-) delete mode 100644 quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java create mode 100644 quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java create mode 100644 quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml index 2d3859544f54..4a7db5099bac 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml @@ -28,15 +28,21 @@ io.quarkiverse.infinispan quarkus-infinispan-embedded - ${quarkus.infinispan} + ${quarkus.infinispan.version} io.quarkus quarkus-arc + + io.quarkus + quarkus-junit5 + test + + - io.quarkus - quarkus-junit5 + org.junit.vintage + junit-vintage-engine test @@ -120,10 +126,12 @@ UTF-8 quarkus-bom io.quarkus.platform - 1.0.2 + 1.0.2 + 5.13.4 3.25.0 true 3.5.3 + diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java deleted file mode 100644 index 4c77456fc0de..000000000000 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/InfinispanEmbeddedCacheDemo.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.baeldung; - -import java.util.concurrent.TimeUnit; - -import org.infinispan.Cache; -import org.infinispan.configuration.cache.CacheMode; -import org.infinispan.configuration.cache.Configuration; -import org.infinispan.configuration.cache.ConfigurationBuilder; -import org.infinispan.manager.EmbeddedCacheManager; - -import io.quarkus.runtime.QuarkusApplication; -import io.quarkus.runtime.annotations.QuarkusMain; -import jakarta.inject.Inject; - -@QuarkusMain -public class InfinispanEmbeddedCacheDemo implements QuarkusApplication { - - @Inject - private EmbeddedCacheManager cacheManager; - - private Configuration initConfig() { - Configuration cacheConfig = new ConfigurationBuilder().clustering().cacheMode(CacheMode.LOCAL) - // Cache eviction: Limit cache to 100 entries. - .memory().maxCount(100) - // Cache expiration: Entries live for 60 minutes. - .expiration().lifespan(60, TimeUnit.SECONDS) - // Passivation: Write evicted entries to disk. - .persistence().passivation(true).build(); - return cacheConfig; - } - - @Override - public int run(String... args) throws Exception { - // Define a cache called "demoCache" with the above configurations. - cacheManager.defineConfiguration("demoCache", initConfig()); - Cache demoCache = cacheManager.getCache("demoCache"); - - // 3. Build a cache with some data. - for (int i = 0; i < 10; i++) { - demoCache.put("key" + i, "value" + i); - } - - System.out.println("Cache created with initial data: %1$s entries.".formatted(demoCache.size())); - - for (int i = 0; i < 10; i++) { - System.out.println("key" + i + ": " + demoCache.get("key" + i)); - } - - // 4. Cache Expiration: - System.out.println("Waiting 65 seconds to let entries expire..."); - - Thread.sleep(65 * 1000); - - System.out.println("After expiration, key1: " + demoCache.get("key1")); // Expected to be null - - // 5. Cache Eviction: - // Add extra entries to trigger eviction based on the memory limit. - for (int i = 0; i < 200; i++) { - demoCache.put("k" + i, "v" + i); - } - System.out.println("After eviction test, cache size: " + demoCache.size()); - - // 6. Passivation of cache is enabled in the configuration. - // When entries are evicted, they are passivated (written to disk). - - cacheManager.stop(); - return 0; - } - -} diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java new file mode 100644 index 000000000000..2212fd2abd73 --- /dev/null +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java @@ -0,0 +1,66 @@ +package com.baeldung.quarkus.infinispan; + +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import org.infinispan.Cache; +import org.infinispan.configuration.cache.CacheMode; +import org.infinispan.configuration.cache.Configuration; +import org.infinispan.configuration.cache.ConfigurationBuilder; +import org.infinispan.manager.EmbeddedCacheManager; + +import jakarta.inject.Inject; + +@ApplicationScoped +public class InfinispanCacheService { + + private static final String CACHE_NAME = "demoCache"; + + @Inject + EmbeddedCacheManager cacheManager; + + private Cache demoCache; + + @PostConstruct + void init() { + Configuration cacheConfig = new ConfigurationBuilder() + .clustering().cacheMode(CacheMode.LOCAL) + .memory().maxCount(100) + .expiration().lifespan(60, TimeUnit.SECONDS) + .persistence().passivation(true) + .build(); + + cacheManager.defineConfiguration(CACHE_NAME, cacheConfig); + demoCache = cacheManager.getCache(CACHE_NAME); + } + + public void put(String key, String value) { + demoCache.put(key, value); + } + + public String get(String key) { + return demoCache.get(key); + } + + public void bulkPut(Map entries) { + demoCache.putAll(entries); + } + + public int size() { + return demoCache.size(); + } + + public void clear() { + demoCache.clear(); + } + + public boolean isPassivationEnabled() { + return cacheManager.getCacheConfiguration(CACHE_NAME).persistence().passivation(); + } + + public void stop() { + cacheManager.stop(); + } +} diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java new file mode 100644 index 000000000000..469b43d576f4 --- /dev/null +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java @@ -0,0 +1,68 @@ +package com.baeldung.quarkus.infinispan; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.HashMap; +import java.util.Map; + +import jakarta.inject.Inject; + +import org.junit.jupiter.api.*; + +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +class InfinispanCacheServiceTest { + + @Inject + InfinispanCacheService cacheService; + + @BeforeEach + void clearCache() { + cacheService.clear(); + } + + @Test + void givenNewCache_whenPutEntries_thenTheyAreStored() { + // Given + for (int i = 0; i < 10; i++) { + cacheService.put("key" + i, "value" + i); + } + + // Then + assertEquals(10, cacheService.size()); + assertEquals("value5", cacheService.get("key5")); + } + + @Test + void givenEntryWithTTL_whenWaitForTTLToExpire_thenEntryIsExpired() throws InterruptedException { + // Given + cacheService.put("expireKey", "expireValue"); + + // When + Thread.sleep(65 * 1000); // Wait past the 60-second TTL + + // Then + assertNull(cacheService.get("expireKey")); + } + + @Test + void givenMaxEntryLimit_whenInsertMoreThanLimit_thenEvictionOccurs() { + // Given + Map bulkEntries = new HashMap<>(); + for (int i = 0; i < 200; i++) { + bulkEntries.put("evictKey" + i, "value" + i); + } + + // When + cacheService.bulkPut(bulkEntries); + + // Then + assertTrue(cacheService.size() <= 100); + } + + @Test + void givenCacheConfig_whenChecked_thenPassivationIsEnabled() { + assertTrue(cacheService.isPassivationEnabled(), "Passivation should be enabled"); + } +} From e9528b8c6ba3019745b14beb71b31fa99b2bf2a3 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Fri, 8 Aug 2025 00:20:19 +0200 Subject: [PATCH 04/41] checked implementation of annotation generated cache is indeed infinispan --- .../quarkus-infinispan/pom.xml | 9 +- .../infinispan/InfinispanCacheService.java | 101 ++++++++++-------- .../InfinispanCacheServiceTest.java | 38 +++++-- 3 files changed, 93 insertions(+), 55 deletions(-) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml index 4a7db5099bac..f7f77850912a 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml @@ -25,11 +25,19 @@ + + io.quarkus + quarkus-infinispan-cache + io.quarkiverse.infinispan quarkus-infinispan-embedded ${quarkus.infinispan.version} + + io.quarkus + quarkus-cache + io.quarkus quarkus-arc @@ -127,7 +135,6 @@ quarkus-bom io.quarkus.platform 1.0.2 - 5.13.4 3.25.0 true 3.5.3 diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java index 2212fd2abd73..c7517b8fb3a8 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java @@ -11,56 +11,63 @@ import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.manager.EmbeddedCacheManager; +import io.quarkus.cache.CacheResult; import jakarta.inject.Inject; @ApplicationScoped public class InfinispanCacheService { - private static final String CACHE_NAME = "demoCache"; - - @Inject - EmbeddedCacheManager cacheManager; - - private Cache demoCache; - - @PostConstruct - void init() { - Configuration cacheConfig = new ConfigurationBuilder() - .clustering().cacheMode(CacheMode.LOCAL) - .memory().maxCount(100) - .expiration().lifespan(60, TimeUnit.SECONDS) - .persistence().passivation(true) - .build(); - - cacheManager.defineConfiguration(CACHE_NAME, cacheConfig); - demoCache = cacheManager.getCache(CACHE_NAME); - } - - public void put(String key, String value) { - demoCache.put(key, value); - } - - public String get(String key) { - return demoCache.get(key); - } - - public void bulkPut(Map entries) { - demoCache.putAll(entries); - } - - public int size() { - return demoCache.size(); - } - - public void clear() { - demoCache.clear(); - } - - public boolean isPassivationEnabled() { - return cacheManager.getCacheConfiguration(CACHE_NAME).persistence().passivation(); - } - - public void stop() { - cacheManager.stop(); - } + public static final String CACHE_NAME = "demoCache"; + + public static final String ANOTHER_CACHE = "anotherCache"; + + @Inject + EmbeddedCacheManager cacheManager; + + private Cache demoCache; + + + @PostConstruct + void init() { + Configuration cacheConfig = new ConfigurationBuilder().clustering().cacheMode(CacheMode.LOCAL).memory() + .maxCount(10).expiration().lifespan(600, TimeUnit.MILLISECONDS).persistence().passivation(true) + .build(); + + cacheManager.defineConfiguration(CACHE_NAME, cacheConfig); + demoCache = cacheManager.getCache(CACHE_NAME); + } + + + public void put(String key, String value) { + demoCache.put(key, value); + } + + public String get(String key) { + return demoCache.get(key); + } + + @CacheResult(cacheName = ANOTHER_CACHE) + String getValueFromCache(String key) { + return key + "Value"; + } + + public void bulkPut(Map entries) { + demoCache.putAll(entries); + } + + public int size() { + return demoCache.size(); + } + + public void clear() { + demoCache.clear(); + } + + public boolean isPassivationEnabled() { + return cacheManager.getCacheConfiguration(CACHE_NAME).persistence().passivation(); + } + + public void stop() { + cacheManager.stop(); + } } diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java index 469b43d576f4..778b15f4a765 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java @@ -1,15 +1,19 @@ package com.baeldung.quarkus.infinispan; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.HashMap; import java.util.Map; -import jakarta.inject.Inject; - -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import io.quarkus.cache.Cache; +import io.quarkus.cache.CacheName; import io.quarkus.test.junit.QuarkusTest; +import jakarta.inject.Inject; @QuarkusTest class InfinispanCacheServiceTest { @@ -17,11 +21,16 @@ class InfinispanCacheServiceTest { @Inject InfinispanCacheService cacheService; + @CacheName(InfinispanCacheService.ANOTHER_CACHE) + @Inject + Cache anotherCache; + @BeforeEach void clearCache() { cacheService.clear(); } + @Test void givenNewCache_whenPutEntries_thenTheyAreStored() { // Given @@ -40,7 +49,7 @@ void givenEntryWithTTL_whenWaitForTTLToExpire_thenEntryIsExpired() throws Interr cacheService.put("expireKey", "expireValue"); // When - Thread.sleep(65 * 1000); // Wait past the 60-second TTL + Thread.sleep(1000); // Wait past the 600-ms TTL // Then assertNull(cacheService.get("expireKey")); @@ -56,13 +65,28 @@ void givenMaxEntryLimit_whenInsertMoreThanLimit_thenEvictionOccurs() { // When cacheService.bulkPut(bulkEntries); - // Then - assertTrue(cacheService.size() <= 100); + assertTrue(cacheService.size() <= 10); } @Test void givenCacheConfig_whenChecked_thenPassivationIsEnabled() { assertTrue(cacheService.isPassivationEnabled(), "Passivation should be enabled"); } + + @Test + void givenCacheWithStorage_whenQuarkusAnnotatedMethodCalled_thenTheyAreStoredInCache() { + + // TODO check that this indeed Infispan cache + // Given + for (int i = 0; i < 10; i++) { + cacheService.getValueFromCache("storedKey" + i); + } + +// System.out.println(demoCache instanceof io.quarkus.cache.infinispan.runtime.InfinispanCacheImpl); + + String storedValue5 = (String) anotherCache.get("storedKey5", null).await().indefinitely(); + // Then + assertEquals("storedKey5Value",storedValue5); + } } From 927c9c4c8f98e06db5ae58b1c0c94cc263a9d09c Mon Sep 17 00:00:00 2001 From: vshanbha Date: Fri, 8 Aug 2025 19:10:50 +0200 Subject: [PATCH 05/41] tests related to quarkus-infinispan-cache extention --- .../quarkus-extension/quarkus-infinispan/pom.xml | 4 ---- .../infinispan/InfinispanCacheServiceTest.java | 13 +++++++------ 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml index f7f77850912a..3c6aeccaa5f2 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml @@ -34,10 +34,6 @@ quarkus-infinispan-embedded ${quarkus.infinispan.version} - - io.quarkus - quarkus-cache - io.quarkus quarkus-arc diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java index 778b15f4a765..e02a6394e3fd 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java @@ -75,16 +75,17 @@ void givenCacheConfig_whenChecked_thenPassivationIsEnabled() { } @Test - void givenCacheWithStorage_whenQuarkusAnnotatedMethodCalled_thenTheyAreStoredInCache() { - - // TODO check that this indeed Infispan cache - // Given + void givenCacheAnnotation_whenInstanceChecked_thenItIsInfinispanCache() { + assertTrue(anotherCache instanceof io.quarkus.cache.infinispan.runtime.InfinispanCacheImpl); + } + + @Test + void givenCache_whenQuarkusAnnotatedMethodCalled_thenTheyAreStoredInCache() { + // Given for (int i = 0; i < 10; i++) { cacheService.getValueFromCache("storedKey" + i); } -// System.out.println(demoCache instanceof io.quarkus.cache.infinispan.runtime.InfinispanCacheImpl); - String storedValue5 = (String) anotherCache.get("storedKey5", null).await().indefinitely(); // Then assertEquals("storedKey5Value",storedValue5); From 74ab9ffcceb9b73bbc81914583e6f5b7852140a0 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Sun, 10 Aug 2025 13:17:15 +0200 Subject: [PATCH 06/41] module renamed, removed references to quarkus-infinispan-cache --- quarkus-modules/quarkus-extension/pom.xml | 2 +- .../pom.xml | 11 ++---- .../src/main/docker/Dockerfile.jvm | 0 .../src/main/docker/Dockerfile.legacy-jar | 0 .../src/main/docker/Dockerfile.native | 0 .../src/main/docker/Dockerfile.native-micro | 0 .../infinispan/InfinispanCacheService.java | 23 ++++++----- .../src/main/resources/application.properties | 0 .../InfinispanCacheServiceTest.java | 38 +++++++++---------- 9 files changed, 33 insertions(+), 41 deletions(-) rename quarkus-modules/quarkus-extension/{quarkus-infinispan => quarkus-infinispan-embedded}/pom.xml (93%) rename quarkus-modules/quarkus-extension/{quarkus-infinispan => quarkus-infinispan-embedded}/src/main/docker/Dockerfile.jvm (100%) rename quarkus-modules/quarkus-extension/{quarkus-infinispan => quarkus-infinispan-embedded}/src/main/docker/Dockerfile.legacy-jar (100%) rename quarkus-modules/quarkus-extension/{quarkus-infinispan => quarkus-infinispan-embedded}/src/main/docker/Dockerfile.native (100%) rename quarkus-modules/quarkus-extension/{quarkus-infinispan => quarkus-infinispan-embedded}/src/main/docker/Dockerfile.native-micro (100%) rename quarkus-modules/quarkus-extension/{quarkus-infinispan => quarkus-infinispan-embedded}/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java (75%) rename quarkus-modules/quarkus-extension/{quarkus-infinispan => quarkus-infinispan-embedded}/src/main/resources/application.properties (100%) rename quarkus-modules/quarkus-extension/{quarkus-infinispan => quarkus-infinispan-embedded}/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java (72%) diff --git a/quarkus-modules/quarkus-extension/pom.xml b/quarkus-modules/quarkus-extension/pom.xml index cdcde626c921..91a32991cd12 100644 --- a/quarkus-modules/quarkus-extension/pom.xml +++ b/quarkus-modules/quarkus-extension/pom.xml @@ -17,6 +17,6 @@ quarkus-liquibase quarkus-app quarkus-load-shedding - quarkus-infinispan + quarkus-infinispan-embedded diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml similarity index 93% rename from quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml rename to quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml index 3c6aeccaa5f2..a357586a3856 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml @@ -1,10 +1,11 @@ - + 4.0.0 com.baeldung - quarkus-infinispan + quarkus-infinispan-embedded 1.0.0-SNAPSHOT - quarkus-infinispan + quarkus-infinispan-embedded com.baeldung.quarkus.extension @@ -25,10 +26,6 @@ - - io.quarkus - quarkus-infinispan-cache - io.quarkiverse.infinispan quarkus-infinispan-embedded diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.jvm b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.jvm similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.jvm rename to quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.jvm diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.legacy-jar b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.legacy-jar similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.legacy-jar rename to quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.legacy-jar diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.native b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.native rename to quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.native-micro b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native-micro similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/docker/Dockerfile.native-micro rename to quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native-micro diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java similarity index 75% rename from quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java rename to quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java index c7517b8fb3a8..31a4ab549ae2 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java @@ -6,12 +6,13 @@ import jakarta.annotation.PostConstruct; import jakarta.enterprise.context.ApplicationScoped; import org.infinispan.Cache; +import org.infinispan.commons.api.CacheContainerAdmin; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.manager.EmbeddedCacheManager; -import io.quarkus.cache.CacheResult; +//import io.quarkus.cache.CacheResult; import jakarta.inject.Inject; @ApplicationScoped @@ -19,8 +20,6 @@ public class InfinispanCacheService { public static final String CACHE_NAME = "demoCache"; - public static final String ANOTHER_CACHE = "anotherCache"; - @Inject EmbeddedCacheManager cacheManager; @@ -30,11 +29,11 @@ public class InfinispanCacheService { @PostConstruct void init() { Configuration cacheConfig = new ConfigurationBuilder().clustering().cacheMode(CacheMode.LOCAL).memory() - .maxCount(10).expiration().lifespan(600, TimeUnit.MILLISECONDS).persistence().passivation(true) - .build(); + .maxCount(10).expiration().lifespan(600, TimeUnit.MILLISECONDS).persistence().passivation(true).build(); - cacheManager.defineConfiguration(CACHE_NAME, cacheConfig); - demoCache = cacheManager.getCache(CACHE_NAME); + demoCache = cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE) + .getOrCreateCache(CACHE_NAME, cacheConfig); +// demoCache = cacheManager.getCache(CACHE_NAME); } @@ -45,11 +44,11 @@ public void put(String key, String value) { public String get(String key) { return demoCache.get(key); } - - @CacheResult(cacheName = ANOTHER_CACHE) - String getValueFromCache(String key) { - return key + "Value"; - } +// +// @CacheResult(cacheName = CACHE_NAME) +// String getValueFromCache(String key) { +// return key + "Value"; +// } public void bulkPut(Map entries) { demoCache.putAll(entries); diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/resources/application.properties b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/resources/application.properties similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan/src/main/resources/application.properties rename to quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/resources/application.properties diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java similarity index 72% rename from quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java rename to quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java index e02a6394e3fd..67420d11ae88 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java @@ -7,11 +7,11 @@ import java.util.HashMap; import java.util.Map; +import org.infinispan.Cache; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +// import io.quarkiverse.infinispan.embedded.Embedded; -import io.quarkus.cache.Cache; -import io.quarkus.cache.CacheName; import io.quarkus.test.junit.QuarkusTest; import jakarta.inject.Inject; @@ -21,9 +21,9 @@ class InfinispanCacheServiceTest { @Inject InfinispanCacheService cacheService; - @CacheName(InfinispanCacheService.ANOTHER_CACHE) - @Inject - Cache anotherCache; +// @Embedded(InfinispanCacheService.CACHE_NAME) +// @Inject +// Cache anotherCache; @BeforeEach void clearCache() { @@ -74,20 +74,16 @@ void givenCacheConfig_whenChecked_thenPassivationIsEnabled() { assertTrue(cacheService.isPassivationEnabled(), "Passivation should be enabled"); } - @Test - void givenCacheAnnotation_whenInstanceChecked_thenItIsInfinispanCache() { - assertTrue(anotherCache instanceof io.quarkus.cache.infinispan.runtime.InfinispanCacheImpl); - } - - @Test - void givenCache_whenQuarkusAnnotatedMethodCalled_thenTheyAreStoredInCache() { - // Given - for (int i = 0; i < 10; i++) { - cacheService.getValueFromCache("storedKey" + i); - } - - String storedValue5 = (String) anotherCache.get("storedKey5", null).await().indefinitely(); - // Then - assertEquals("storedKey5Value",storedValue5); - } + +// @Test +// void givenCache_whenQuarkusAnnotatedMethodCalled_thenTheyAreStoredInCache() { +// // Given +// for (int i = 0; i < 10; i++) { +// cacheService.getValueFromCache("storedKey" + i); +// } +// +// String storedValue5 = (String) anotherCache.get("storedKey5"); +// // Then +// assertEquals("storedKey5Value",storedValue5); +// } } From d849494e114c4cb21f0f1707baeec7fe4f7aa0b3 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Sun, 10 Aug 2025 21:27:40 +0200 Subject: [PATCH 07/41] BAEL-9141 services split into two classes --- .../quarkus-infinispan-embedded/pom.xml | 4 ++ .../InfinispanAnnotatedCacheService.java | 22 ++++++++++ .../infinispan/InfinispanCacheService.java | 7 ---- .../InfinispanCacheServiceTest.java | 42 +++++++++++-------- 4 files changed, 51 insertions(+), 24 deletions(-) create mode 100644 quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml index a357586a3856..bfd99b9a8483 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml @@ -31,6 +31,10 @@ quarkus-infinispan-embedded ${quarkus.infinispan.version} + + io.quarkus + quarkus-infinispan-cache + io.quarkus quarkus-arc diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java new file mode 100644 index 000000000000..b8dc676db2e3 --- /dev/null +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java @@ -0,0 +1,22 @@ +package com.baeldung.quarkus.infinispan; + +import io.quarkus.cache.Cache; +import io.quarkus.cache.CacheName; +import io.quarkus.cache.CacheResult; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +@ApplicationScoped +public class InfinispanAnnotatedCacheService { + + public static final String CACHE_NAME = "anotherCache"; + + @CacheName(CACHE_NAME) + @Inject + Cache anotherCache; + + @CacheResult(cacheName = CACHE_NAME) + String getValueFromCache(String key) { + return key + "Value"; + } +} diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java index 31a4ab549ae2..d23d8844eeaf 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java @@ -12,7 +12,6 @@ import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.manager.EmbeddedCacheManager; -//import io.quarkus.cache.CacheResult; import jakarta.inject.Inject; @ApplicationScoped @@ -33,7 +32,6 @@ void init() { demoCache = cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE) .getOrCreateCache(CACHE_NAME, cacheConfig); -// demoCache = cacheManager.getCache(CACHE_NAME); } @@ -44,11 +42,6 @@ public void put(String key, String value) { public String get(String key) { return demoCache.get(key); } -// -// @CacheResult(cacheName = CACHE_NAME) -// String getValueFromCache(String key) { -// return key + "Value"; -// } public void bulkPut(Map entries) { demoCache.putAll(entries); diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java index 67420d11ae88..e179aa8ec426 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java @@ -7,11 +7,11 @@ import java.util.HashMap; import java.util.Map; -import org.infinispan.Cache; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -// import io.quarkiverse.infinispan.embedded.Embedded; +import io.quarkus.cache.Cache; +import io.quarkus.cache.CacheName; import io.quarkus.test.junit.QuarkusTest; import jakarta.inject.Inject; @@ -20,10 +20,13 @@ class InfinispanCacheServiceTest { @Inject InfinispanCacheService cacheService; + + @Inject + InfinispanAnnotatedCacheService annotatedCacheService; -// @Embedded(InfinispanCacheService.CACHE_NAME) -// @Inject -// Cache anotherCache; + @CacheName(InfinispanAnnotatedCacheService.CACHE_NAME) + @Inject + Cache anotherCache; @BeforeEach void clearCache() { @@ -74,16 +77,21 @@ void givenCacheConfig_whenChecked_thenPassivationIsEnabled() { assertTrue(cacheService.isPassivationEnabled(), "Passivation should be enabled"); } - -// @Test -// void givenCache_whenQuarkusAnnotatedMethodCalled_thenTheyAreStoredInCache() { -// // Given -// for (int i = 0; i < 10; i++) { -// cacheService.getValueFromCache("storedKey" + i); -// } -// -// String storedValue5 = (String) anotherCache.get("storedKey5"); -// // Then -// assertEquals("storedKey5Value",storedValue5); -// } + @Test + void givenCacheAnnotation_whenInstanceChecked_thenItIsInfinispanCache() { + assertTrue(anotherCache instanceof io.quarkus.cache.infinispan.runtime.InfinispanCacheImpl); + } + + @Test + void givenCache_whenQuarkusAnnotatedMethodCalled_thenTheyAreStoredInCache() { + // Given + for (int i = 0; i < 10; i++) { + annotatedCacheService.getValueFromCache("storedKey" + i); + } + + String storedValue5 = (String)anotherCache.get("storedKey5", null).await().indefinitely(); + // Then + assertEquals("storedKey5Value",storedValue5); + } + } From e6792f414e68a3f7b8b942eabab7684a8dd3f1a3 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Tue, 12 Aug 2025 21:17:41 +0200 Subject: [PATCH 08/41] removed unwanted libraries, more tests added --- .../quarkus-infinispan-embedded/pom.xml | 6 +-- .../InfinispanAnnotatedCacheService.java | 25 +++++++++++ .../InfinispanCacheServiceTest.java | 42 +++++++++++++++---- 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml index bfd99b9a8483..f8904bd62cd9 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml @@ -31,10 +31,6 @@ quarkus-infinispan-embedded ${quarkus.infinispan.version} - - io.quarkus - quarkus-infinispan-cache - io.quarkus quarkus-arc @@ -131,7 +127,7 @@ UTF-8 quarkus-bom io.quarkus.platform - 1.0.2 + 1.1.0 3.25.0 true 3.5.3 diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java index b8dc676db2e3..62e448787372 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java @@ -1,6 +1,9 @@ package com.baeldung.quarkus.infinispan; +import io.quarkiverse.infinispan.embedded.Embedded; import io.quarkus.cache.Cache; +import io.quarkus.cache.CacheInvalidate; +import io.quarkus.cache.CacheInvalidateAll; import io.quarkus.cache.CacheName; import io.quarkus.cache.CacheResult; import jakarta.enterprise.context.ApplicationScoped; @@ -14,9 +17,31 @@ public class InfinispanAnnotatedCacheService { @CacheName(CACHE_NAME) @Inject Cache anotherCache; + + @Embedded(CACHE_NAME) + @Inject + org.infinispan.Cache embeddedCache; @CacheResult(cacheName = CACHE_NAME) String getValueFromCache(String key) { return key + "Value"; } + + public org.infinispan.Cache getEmbeddedCache() { + return embeddedCache; + } + + public Cache getQuarkusCache() { + return anotherCache; + } + + @CacheInvalidateAll(cacheName = CACHE_NAME) + public void clearAll() { + + } + + @CacheInvalidate(cacheName = CACHE_NAME) + public void clear(String key) { + + } } diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java index e179aa8ec426..5e0b2f0920e1 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java @@ -10,8 +10,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import io.quarkus.cache.Cache; -import io.quarkus.cache.CacheName; +import io.quarkiverse.infinispan.embedded.runtime.cache.InfinispanCacheImpl; import io.quarkus.test.junit.QuarkusTest; import jakarta.inject.Inject; @@ -24,10 +23,6 @@ class InfinispanCacheServiceTest { @Inject InfinispanAnnotatedCacheService annotatedCacheService; - @CacheName(InfinispanAnnotatedCacheService.CACHE_NAME) - @Inject - Cache anotherCache; - @BeforeEach void clearCache() { cacheService.clear(); @@ -79,9 +74,14 @@ void givenCacheConfig_whenChecked_thenPassivationIsEnabled() { @Test void givenCacheAnnotation_whenInstanceChecked_thenItIsInfinispanCache() { - assertTrue(anotherCache instanceof io.quarkus.cache.infinispan.runtime.InfinispanCacheImpl); + assertTrue(annotatedCacheService.getQuarkusCache() instanceof InfinispanCacheImpl); } - + + @Test + void givenEmbeddedCache_whenInstanceChecked_thenItIsInfinispanCache() { + assertTrue(annotatedCacheService.getEmbeddedCache() instanceof org.infinispan.Cache); + } + @Test void givenCache_whenQuarkusAnnotatedMethodCalled_thenTheyAreStoredInCache() { // Given @@ -89,9 +89,33 @@ void givenCache_whenQuarkusAnnotatedMethodCalled_thenTheyAreStoredInCache() { annotatedCacheService.getValueFromCache("storedKey" + i); } - String storedValue5 = (String)anotherCache.get("storedKey5", null).await().indefinitely(); + String storedValue5 = (String)annotatedCacheService.getQuarkusCache().get("storedKey5", null).await().indefinitely(); // Then assertEquals("storedKey5Value",storedValue5); + + String embeddedValue9 = annotatedCacheService.getEmbeddedCache().get("storedKey9"); + // Then + assertEquals("storedKey9Value",embeddedValue9); } + @Test + void givenCache_whenInvalidated_thenValueIsCleared() { + for (int i = 0; i < 10; i++) { + annotatedCacheService.getValueFromCache("storedKey" + i); + } + + annotatedCacheService.clear("storedKey5"); + String storedValue5 = annotatedCacheService.getEmbeddedCache().get("storedKey5"); + // Then + assertNull(storedValue5); + + annotatedCacheService.clearAll(); + String embeddedValue9 = annotatedCacheService.getEmbeddedCache().get("storedKey9"); + // Then + assertEquals(annotatedCacheService.getEmbeddedCache().size(), 0); + assertNull(embeddedValue9); + + } + + } From 37a8b9894a2188c61cb7303e2932ef435da1838f Mon Sep 17 00:00:00 2001 From: vshanbha Date: Fri, 15 Aug 2025 13:16:49 +0200 Subject: [PATCH 09/41] BAEL-9141 sysout and delay added to getValueFromCache to simulate long running computation --- .../infinispan/InfinispanAnnotatedCacheService.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java index 62e448787372..70c8e0493ad7 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java @@ -24,6 +24,13 @@ public class InfinispanAnnotatedCacheService { @CacheResult(cacheName = CACHE_NAME) String getValueFromCache(String key) { + // simulate a long running computation + try { + System.out.println("getting value for "+ key); + Thread.sleep(200); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } return key + "Value"; } From 27f91f4bd41422ddda4aacf3a35debd4c30d22a9 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Sat, 16 Aug 2025 14:36:40 +0200 Subject: [PATCH 10/41] BAEL-9141 minor formatting and readability changes --- .../infinispan/InfinispanAnnotatedCacheService.java | 8 ++++++++ .../quarkus/infinispan/InfinispanCacheService.java | 13 +++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java index 70c8e0493ad7..f9ed632b2e01 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java @@ -44,6 +44,14 @@ public Cache getQuarkusCache() { @CacheInvalidateAll(cacheName = CACHE_NAME) public void clearAll() { + // simulate a long running computation + try { + System.out.println("clearing cache " + CACHE_NAME); + Thread.sleep(200); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java index d23d8844eeaf..66e8445e039a 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java @@ -18,23 +18,24 @@ public class InfinispanCacheService { public static final String CACHE_NAME = "demoCache"; - + @Inject EmbeddedCacheManager cacheManager; private Cache demoCache; - @PostConstruct void init() { - Configuration cacheConfig = new ConfigurationBuilder().clustering().cacheMode(CacheMode.LOCAL).memory() - .maxCount(10).expiration().lifespan(600, TimeUnit.MILLISECONDS).persistence().passivation(true).build(); + Configuration cacheConfig = new ConfigurationBuilder() + .clustering().cacheMode(CacheMode.LOCAL) + .memory().maxCount(10) + .expiration().lifespan(600, TimeUnit.MILLISECONDS) + .persistence().passivation(true).build(); demoCache = cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE) .getOrCreateCache(CACHE_NAME, cacheConfig); } - public void put(String key, String value) { demoCache.put(key, value); } @@ -58,7 +59,7 @@ public void clear() { public boolean isPassivationEnabled() { return cacheManager.getCacheConfiguration(CACHE_NAME).persistence().passivation(); } - + public void stop() { cacheManager.stop(); } From f5d07eb99a988d3a31617ab9b18e87387790be29 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Sat, 23 Aug 2025 13:40:41 +0200 Subject: [PATCH 11/41] BAEL-9141 unit test class name modified --- ...acheServiceTest.java => InfinispanCacheServiceUnitTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/{InfinispanCacheServiceTest.java => InfinispanCacheServiceUnitTest.java} (98%) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java similarity index 98% rename from quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java rename to quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java index 5e0b2f0920e1..f08cd37eda35 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceTest.java +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java @@ -15,7 +15,7 @@ import jakarta.inject.Inject; @QuarkusTest -class InfinispanCacheServiceTest { +class InfinispanCacheServiceUnitTest { @Inject InfinispanCacheService cacheService; From 2908648d5690280c1d7f97438e3077682eefbf4f Mon Sep 17 00:00:00 2001 From: vshanbha Date: Sun, 24 Aug 2025 19:30:24 +0200 Subject: [PATCH 12/41] BAEL-9141 junit dependency commented --- .../quarkus-extension/quarkus-infinispan-embedded/pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml index f8904bd62cd9..5c9b347266ad 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml @@ -41,11 +41,13 @@ test + From bd587d0ceca4026647cc106e0730ad99a5c1f1c8 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Sun, 24 Aug 2025 20:14:19 +0200 Subject: [PATCH 13/41] BAEL-9141 junit dependency uncommented --- .../quarkus-extension/quarkus-infinispan-embedded/pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml index 5c9b347266ad..f8904bd62cd9 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml @@ -41,13 +41,11 @@ test - From 9c6acc2310a3fd4dced55519188bcbc0ebe11d0b Mon Sep 17 00:00:00 2001 From: vshanbha Date: Sun, 24 Aug 2025 21:48:57 +0200 Subject: [PATCH 14/41] BAEL-9141 junit dependency setting changed --- .../quarkus-infinispan-embedded/pom.xml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml index f8904bd62cd9..37352f53b908 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml @@ -6,13 +6,11 @@ quarkus-infinispan-embedded 1.0.0-SNAPSHOT quarkus-infinispan-embedded - com.baeldung.quarkus.extension quarkus-extension 1.0-SNAPSHOT - @@ -40,14 +38,7 @@ quarkus-junit5 test - - - org.junit.vintage - junit-vintage-engine - test - - @@ -131,7 +122,7 @@ 3.25.0 true 3.5.3 - + 5.12.2 From 355e37d76ec9181cadfbfdef5d6eafee31650436 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Sun, 24 Aug 2025 21:59:47 +0200 Subject: [PATCH 15/41] BAEL-9141 quarkus platform version changed --- .../quarkus-extension/quarkus-infinispan-embedded/pom.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml index 37352f53b908..043026cfbc32 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml @@ -29,6 +29,12 @@ quarkus-infinispan-embedded ${quarkus.infinispan.version} + + org.infinispan + infinispan-commons + 15.0.15.Final + compile + io.quarkus quarkus-arc @@ -119,7 +125,7 @@ quarkus-bom io.quarkus.platform 1.1.0 - 3.25.0 + 3.22.3 true 3.5.3 5.12.2 From a7edbe97165d22d2283307d92b2770cefe25a00a Mon Sep 17 00:00:00 2001 From: vshanbha Date: Sun, 24 Aug 2025 22:13:18 +0200 Subject: [PATCH 16/41] BAEL-9141 dependency versions of quarkus, junit modified to match another quarkus-mcp-lanchain module --- .../quarkus-infinispan-embedded/pom.xml | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml index 043026cfbc32..96dff0f259e6 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml @@ -14,8 +14,8 @@ - ${quarkus.platform.group-id} - ${quarkus.platform.artifact-id} + io.quarkus.platform + quarkus-bom ${quarkus.platform.version} pom import @@ -32,8 +32,7 @@ org.infinispan infinispan-commons - 15.0.15.Final - compile + ${infinispan.commons.version} io.quarkus @@ -48,7 +47,7 @@ - ${quarkus.platform.group-id} + io.quarkus.platform quarkus-maven-plugin ${quarkus.platform.version} true @@ -118,16 +117,13 @@ - 3.14.0 17 - UTF-8 - UTF-8 - quarkus-bom - io.quarkus.platform - 1.1.0 + 3.14.0 3.22.3 true - 3.5.3 + 3.5.2 + 1.1.0 + 15.0.15.Final 5.12.2 From fae083b83a5ee1708d4474912aa01a87a23d3ae4 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Mon, 25 Aug 2025 09:17:18 +0300 Subject: [PATCH 17/41] remove overridden properties Removed maven.compiler.release and junit-jupiter.version properties. --- .../quarkus-extension/quarkus-infinispan-embedded/pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml index 96dff0f259e6..1679baa7694c 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml @@ -117,14 +117,12 @@ - 17 3.14.0 3.22.3 true 3.5.2 1.1.0 15.0.15.Final - 5.12.2 From d4ce954b9b36693feec8a4c376a70aaa96b5dc0a Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Mon, 25 Aug 2025 09:45:43 +0300 Subject: [PATCH 18/41] update library versions --- .../quarkus-extension/quarkus-infinispan-embedded/pom.xml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml index 1679baa7694c..308dec94525d 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml @@ -32,7 +32,6 @@ org.infinispan infinispan-commons - ${infinispan.commons.version} io.quarkus @@ -64,14 +63,12 @@ maven-compiler-plugin - ${compiler-plugin.version} true maven-surefire-plugin - ${surefire-plugin.version} org.jboss.logmanager.LogManager @@ -81,7 +78,7 @@ maven-failsafe-plugin - ${surefire-plugin.version} + ${maven-failsafe-plugin.version} @@ -117,12 +114,11 @@ - 3.14.0 3.22.3 true - 3.5.2 1.1.0 15.0.15.Final + 5.12.2 From d8ded97bbd3c04a82fd747ea6a5c8705ae18b3e1 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 12:35:25 +0200 Subject: [PATCH 19/41] upgraded quarkus version, removed reference to infinispan-commons --- .../quarkus-extension/quarkus-infinispan-embedded/pom.xml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml index 308dec94525d..2c9e70e8031c 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml @@ -29,10 +29,6 @@ quarkus-infinispan-embedded ${quarkus.infinispan.version} - - org.infinispan - infinispan-commons - io.quarkus quarkus-arc @@ -114,10 +110,9 @@ - 3.22.3 + 3.25.0 true 1.1.0 - 15.0.15.Final 5.12.2 From f12637b63d83b126138672254d53a73d31573599 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 12:46:11 +0200 Subject: [PATCH 20/41] BAEL-9141 moved quarkus-infinispan-embedded to quarkus-modules --- quarkus-modules/pom.xml | 1 + quarkus-modules/quarkus-extension/pom.xml | 1 - .../quarkus-infinispan-embedded/pom.xml | 8 +++----- .../src/main/docker/Dockerfile.jvm | 0 .../src/main/docker/Dockerfile.legacy-jar | 0 .../src/main/docker/Dockerfile.native | 0 .../src/main/docker/Dockerfile.native-micro | 0 .../infinispan/InfinispanAnnotatedCacheService.java | 0 .../quarkus/infinispan/InfinispanCacheService.java | 0 .../src/main/resources/application.properties | 0 .../infinispan/InfinispanCacheServiceUnitTest.java | 0 11 files changed, 4 insertions(+), 6 deletions(-) rename quarkus-modules/{quarkus-extension => }/quarkus-infinispan-embedded/pom.xml (95%) rename quarkus-modules/{quarkus-extension => }/quarkus-infinispan-embedded/src/main/docker/Dockerfile.jvm (100%) rename quarkus-modules/{quarkus-extension => }/quarkus-infinispan-embedded/src/main/docker/Dockerfile.legacy-jar (100%) rename quarkus-modules/{quarkus-extension => }/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native (100%) rename quarkus-modules/{quarkus-extension => }/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native-micro (100%) rename quarkus-modules/{quarkus-extension => }/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java (100%) rename quarkus-modules/{quarkus-extension => }/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java (100%) rename quarkus-modules/{quarkus-extension => }/quarkus-infinispan-embedded/src/main/resources/application.properties (100%) rename quarkus-modules/{quarkus-extension => }/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java (100%) diff --git a/quarkus-modules/pom.xml b/quarkus-modules/pom.xml index 4a5cb4f2c1a0..d78698437001 100644 --- a/quarkus-modules/pom.xml +++ b/quarkus-modules/pom.xml @@ -24,6 +24,7 @@ quarkus-elasticsearch quarkus-funqy + quarkus-infinispan-embedded quarkus-jandex quarkus-kogito quarkus-langchain4j diff --git a/quarkus-modules/quarkus-extension/pom.xml b/quarkus-modules/quarkus-extension/pom.xml index 91a32991cd12..e663319c025f 100644 --- a/quarkus-modules/quarkus-extension/pom.xml +++ b/quarkus-modules/quarkus-extension/pom.xml @@ -17,6 +17,5 @@ quarkus-liquibase quarkus-app quarkus-load-shedding - quarkus-infinispan-embedded diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml similarity index 95% rename from quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml rename to quarkus-modules/quarkus-infinispan-embedded/pom.xml index 2c9e70e8031c..f9b1a8fa71a4 100644 --- a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -2,14 +2,12 @@ 4.0.0 - com.baeldung quarkus-infinispan-embedded - 1.0.0-SNAPSHOT quarkus-infinispan-embedded - com.baeldung.quarkus.extension - quarkus-extension - 1.0-SNAPSHOT + com.baeldung + quarkus-modules + 1.0.0-SNAPSHOT diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.jvm b/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.jvm similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.jvm rename to quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.jvm diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.legacy-jar b/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.legacy-jar similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.legacy-jar rename to quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.legacy-jar diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native b/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native rename to quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native-micro b/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native-micro similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native-micro rename to quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native-micro diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java rename to quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java rename to quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/resources/application.properties b/quarkus-modules/quarkus-infinispan-embedded/src/main/resources/application.properties similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/main/resources/application.properties rename to quarkus-modules/quarkus-infinispan-embedded/src/main/resources/application.properties diff --git a/quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java similarity index 100% rename from quarkus-modules/quarkus-extension/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java rename to quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java From ea3e6635438a6db33078055f1ae7ec2a9c60bf68 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 12:54:25 +0200 Subject: [PATCH 21/41] BAEL-9141 removed override of junit version --- quarkus-modules/quarkus-infinispan-embedded/pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index f9b1a8fa71a4..916295ea92d4 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -111,7 +111,9 @@ 3.25.0 true 1.1.0 + From e91da8ef14f955a9eacb87d976a6f3c15ab015d1 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Mon, 25 Aug 2025 14:13:00 +0300 Subject: [PATCH 22/41] update junit version --- quarkus-modules/quarkus-infinispan-embedded/pom.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index 916295ea92d4..3926f90d89f5 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -111,9 +111,7 @@ 3.25.0 true 1.1.0 - + 5.13.4 From c85a5ee3a077a8e98bc071965db02e22fcada40d Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 13:43:28 +0200 Subject: [PATCH 23/41] BAEL-9141 removed native build config --- .../quarkus-infinispan-embedded/pom.xml | 32 ------------------- 1 file changed, 32 deletions(-) diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index 3926f90d89f5..072ce333af3b 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -39,22 +39,6 @@ - - io.quarkus.platform - quarkus-maven-plugin - ${quarkus.platform.version} - true - - - - build - generate-code - generate-code-tests - native-image-agent - - - - maven-compiler-plugin @@ -91,22 +75,6 @@ - - - - native - - - native - - - - false - true - - - - 3.25.0 true From b00ec1f4ebace7208e943b34c588ab62c0e6867b Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 14:20:43 +0200 Subject: [PATCH 24/41] BAEL-9141 system property added related to zipfs --- quarkus-modules/quarkus-infinispan-embedded/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index 072ce333af3b..ac02e7ca032c 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -51,6 +51,7 @@ org.jboss.logmanager.LogManager ${maven.home} + true From 7770c945e093f70b1b42f725f1fe9c3aa0fc505d Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 15:56:41 +0200 Subject: [PATCH 25/41] BAEL-9141 unit tests disabled. Want to check if build passes without those --- quarkus-modules/quarkus-infinispan-embedded/pom.xml | 1 - .../quarkus/infinispan/InfinispanCacheServiceUnitTest.java | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index ac02e7ca032c..072ce333af3b 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -51,7 +51,6 @@ org.jboss.logmanager.LogManager ${maven.home} - true diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java index f08cd37eda35..8c52b59cf6e4 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java +++ b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java @@ -8,6 +8,7 @@ import java.util.Map; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import io.quarkiverse.infinispan.embedded.runtime.cache.InfinispanCacheImpl; @@ -15,6 +16,7 @@ import jakarta.inject.Inject; @QuarkusTest +@Disabled class InfinispanCacheServiceUnitTest { @Inject From e2d34a534361de05b5d1673db12232fee210c223 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Mon, 25 Aug 2025 17:55:29 +0300 Subject: [PATCH 26/41] remove path config --- quarkus-modules/quarkus-infinispan-embedded/pom.xml | 1 - .../quarkus/infinispan/InfinispanCacheServiceUnitTest.java | 2 -- 2 files changed, 3 deletions(-) diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index 072ce333af3b..2fe0ac2998db 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -67,7 +67,6 @@ - ${project.build.directory}/${project.build.finalName}-runner org.jboss.logmanager.LogManager ${maven.home} diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java index 8c52b59cf6e4..f08cd37eda35 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java +++ b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java @@ -8,7 +8,6 @@ import java.util.Map; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import io.quarkiverse.infinispan.embedded.runtime.cache.InfinispanCacheImpl; @@ -16,7 +15,6 @@ import jakarta.inject.Inject; @QuarkusTest -@Disabled class InfinispanCacheServiceUnitTest { @Inject From 888745e8734126710a24c65822e820cdc84a6dcb Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 19:21:55 +0200 Subject: [PATCH 27/41] BAEL-9141 removed all old code. basic hello world version to test if CI build passes --- .../quarkus-infinispan-embedded/pom.xml | 74 ++++++++--- .../src/main/docker/Dockerfile.jvm | 8 +- .../src/main/docker/Dockerfile.legacy-jar | 8 +- .../src/main/docker/Dockerfile.native | 4 +- .../src/main/docker/Dockerfile.native-micro | 4 +- .../com/baeldung/InfinispanCacheService.java | 16 +++ .../InfinispanAnnotatedCacheService.java | 62 --------- .../infinispan/InfinispanCacheService.java | 66 ---------- .../InfinispanCacheServiceUnitTest.java | 20 +++ .../InfinispanCacheServiceUnitTest.java | 121 ------------------ 10 files changed, 104 insertions(+), 279 deletions(-) create mode 100644 quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/InfinispanCacheService.java delete mode 100644 quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java delete mode 100644 quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java create mode 100644 quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/InfinispanCacheServiceUnitTest.java delete mode 100644 quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index 2fe0ac2998db..954858be84c8 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -1,14 +1,22 @@ - + 4.0.0 + com.baeldung quarkus-infinispan-embedded - quarkus-infinispan-embedded + 1.0.0-SNAPSHOT com.baeldung quarkus-modules 1.0.0-SNAPSHOT + + + 3.14.0 + 3.25.0 + true + 5.13.4 + + @@ -23,24 +31,46 @@ - io.quarkiverse.infinispan - quarkus-infinispan-embedded - ${quarkus.infinispan.version} + io.quarkus + quarkus-rest io.quarkus quarkus-arc - - io.quarkus - quarkus-junit5 - test - + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + + io.quarkus.platform + quarkus-maven-plugin + ${quarkus.platform.version} + true + + + + build + generate-code + generate-code-tests + native-image-agent + + + + maven-compiler-plugin + ${compiler-plugin.version} true @@ -56,7 +86,6 @@ maven-failsafe-plugin - ${maven-failsafe-plugin.version} @@ -67,6 +96,7 @@ + ${project.build.directory}/${project.build.finalName}-runner org.jboss.logmanager.LogManager ${maven.home} @@ -74,11 +104,19 @@ - - 3.25.0 - true - 1.1.0 - 5.13.4 - + + + native + + + native + + + + false + true + + + diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.jvm b/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.jvm index d84064dfa44a..9381d1c6fdb1 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.jvm +++ b/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.jvm @@ -7,11 +7,11 @@ # # Then, build the image with: # -# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/quarkus-infinispan-jvm . +# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/quarkus-infinispan-embedded-jvm . # # Then run the container using: # -# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-jvm +# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-embedded-jvm # # If you want to include the debug port into your docker image # you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. @@ -20,7 +20,7 @@ # # Then run the container using : # -# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-jvm +# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-embedded-jvm # # This image uses the `run-java.sh` script to run the application. # This scripts computes the command line to execute your Java application, and @@ -78,7 +78,7 @@ # accessed directly. (example: "foo.example.com,bar.example.com") # ### -FROM registry.access.redhat.com/ubi9/openjdk-17:1.21 +FROM registry.access.redhat.com/ubi9/openjdk-21:1.21 ENV LANGUAGE='en_US:en' diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.legacy-jar b/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.legacy-jar index 7cd3db3b099c..17d4c8c2d542 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.legacy-jar +++ b/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.legacy-jar @@ -7,11 +7,11 @@ # # Then, build the image with: # -# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/quarkus-infinispan-legacy-jar . +# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/quarkus-infinispan-embedded-legacy-jar . # # Then run the container using: # -# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-legacy-jar +# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-embedded-legacy-jar # # If you want to include the debug port into your docker image # you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. @@ -20,7 +20,7 @@ # # Then run the container using : # -# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-legacy-jar +# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-embedded-legacy-jar # # This image uses the `run-java.sh` script to run the application. # This scripts computes the command line to execute your Java application, and @@ -78,7 +78,7 @@ # accessed directly. (example: "foo.example.com,bar.example.com") # ### -FROM registry.access.redhat.com/ubi9/openjdk-17:1.21 +FROM registry.access.redhat.com/ubi9/openjdk-21:1.21 ENV LANGUAGE='en_US:en' diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native b/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native index 686b7dc26dc2..d5bc9a2d1a6d 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native +++ b/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native @@ -7,11 +7,11 @@ # # Then, build the image with: # -# docker build -f src/main/docker/Dockerfile.native -t quarkus/quarkus-infinispan . +# docker build -f src/main/docker/Dockerfile.native -t quarkus/quarkus-infinispan-embedded . # # Then run the container using: # -# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan +# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-embedded # # The ` registry.access.redhat.com/ubi9/ubi-minimal:9.5` base image is based on UBI 9. # To use UBI 8, switch to `quay.io/ubi8/ubi-minimal:8.10`. diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native-micro b/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native-micro index c25d9adb3319..e487b5668e53 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native-micro +++ b/quarkus-modules/quarkus-infinispan-embedded/src/main/docker/Dockerfile.native-micro @@ -10,11 +10,11 @@ # # Then, build the image with: # -# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/quarkus-infinispan . +# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/quarkus-infinispan-embedded . # # Then run the container using: # -# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan +# docker run -i --rm -p 8080:8080 quarkus/quarkus-infinispan-embedded # # The `quay.io/quarkus/ubi9-quarkus-micro-image:2.0` base image is based on UBI 9. # To use UBI 8, switch to `quay.io/quarkus/quarkus-micro-image:2.0`. diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/InfinispanCacheService.java b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/InfinispanCacheService.java new file mode 100644 index 000000000000..3984539e6cfb --- /dev/null +++ b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/InfinispanCacheService.java @@ -0,0 +1,16 @@ +package com.baeldung; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; + +@Path("/hello") +public class InfinispanCacheService { + + @GET + @Produces(MediaType.TEXT_PLAIN) + public String hello() { + return "Hello from Quarkus REST"; + } +} diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java deleted file mode 100644 index f9ed632b2e01..000000000000 --- a/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.baeldung.quarkus.infinispan; - -import io.quarkiverse.infinispan.embedded.Embedded; -import io.quarkus.cache.Cache; -import io.quarkus.cache.CacheInvalidate; -import io.quarkus.cache.CacheInvalidateAll; -import io.quarkus.cache.CacheName; -import io.quarkus.cache.CacheResult; -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; - -@ApplicationScoped -public class InfinispanAnnotatedCacheService { - - public static final String CACHE_NAME = "anotherCache"; - - @CacheName(CACHE_NAME) - @Inject - Cache anotherCache; - - @Embedded(CACHE_NAME) - @Inject - org.infinispan.Cache embeddedCache; - - @CacheResult(cacheName = CACHE_NAME) - String getValueFromCache(String key) { - // simulate a long running computation - try { - System.out.println("getting value for "+ key); - Thread.sleep(200); - } catch (InterruptedException e) { - e.printStackTrace(System.err); - } - return key + "Value"; - } - - public org.infinispan.Cache getEmbeddedCache() { - return embeddedCache; - } - - public Cache getQuarkusCache() { - return anotherCache; - } - - @CacheInvalidateAll(cacheName = CACHE_NAME) - public void clearAll() { - // simulate a long running computation - try { - System.out.println("clearing cache " + CACHE_NAME); - Thread.sleep(200); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - @CacheInvalidate(cacheName = CACHE_NAME) - public void clear(String key) { - - } -} diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java deleted file mode 100644 index 66e8445e039a..000000000000 --- a/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.baeldung.quarkus.infinispan; - -import java.util.Map; -import java.util.concurrent.TimeUnit; - -import jakarta.annotation.PostConstruct; -import jakarta.enterprise.context.ApplicationScoped; -import org.infinispan.Cache; -import org.infinispan.commons.api.CacheContainerAdmin; -import org.infinispan.configuration.cache.CacheMode; -import org.infinispan.configuration.cache.Configuration; -import org.infinispan.configuration.cache.ConfigurationBuilder; -import org.infinispan.manager.EmbeddedCacheManager; - -import jakarta.inject.Inject; - -@ApplicationScoped -public class InfinispanCacheService { - - public static final String CACHE_NAME = "demoCache"; - - @Inject - EmbeddedCacheManager cacheManager; - - private Cache demoCache; - - @PostConstruct - void init() { - Configuration cacheConfig = new ConfigurationBuilder() - .clustering().cacheMode(CacheMode.LOCAL) - .memory().maxCount(10) - .expiration().lifespan(600, TimeUnit.MILLISECONDS) - .persistence().passivation(true).build(); - - demoCache = cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE) - .getOrCreateCache(CACHE_NAME, cacheConfig); - } - - public void put(String key, String value) { - demoCache.put(key, value); - } - - public String get(String key) { - return demoCache.get(key); - } - - public void bulkPut(Map entries) { - demoCache.putAll(entries); - } - - public int size() { - return demoCache.size(); - } - - public void clear() { - demoCache.clear(); - } - - public boolean isPassivationEnabled() { - return cacheManager.getCacheConfiguration(CACHE_NAME).persistence().passivation(); - } - - public void stop() { - cacheManager.stop(); - } -} diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/InfinispanCacheServiceUnitTest.java b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/InfinispanCacheServiceUnitTest.java new file mode 100644 index 000000000000..de4eadd0f435 --- /dev/null +++ b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/InfinispanCacheServiceUnitTest.java @@ -0,0 +1,20 @@ +package com.baeldung; + +import io.quarkus.test.junit.QuarkusTest; +import org.junit.jupiter.api.Test; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; + +@QuarkusTest +class InfinispanCacheServiceUnitTest { + @Test + void testHelloEndpoint() { + given() + .when().get("/hello") + .then() + .statusCode(200) + .body(is("Hello from Quarkus REST")); + } + +} \ No newline at end of file diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java deleted file mode 100644 index f08cd37eda35..000000000000 --- a/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.baeldung.quarkus.infinispan; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.util.HashMap; -import java.util.Map; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import io.quarkiverse.infinispan.embedded.runtime.cache.InfinispanCacheImpl; -import io.quarkus.test.junit.QuarkusTest; -import jakarta.inject.Inject; - -@QuarkusTest -class InfinispanCacheServiceUnitTest { - - @Inject - InfinispanCacheService cacheService; - - @Inject - InfinispanAnnotatedCacheService annotatedCacheService; - - @BeforeEach - void clearCache() { - cacheService.clear(); - } - - - @Test - void givenNewCache_whenPutEntries_thenTheyAreStored() { - // Given - for (int i = 0; i < 10; i++) { - cacheService.put("key" + i, "value" + i); - } - - // Then - assertEquals(10, cacheService.size()); - assertEquals("value5", cacheService.get("key5")); - } - - @Test - void givenEntryWithTTL_whenWaitForTTLToExpire_thenEntryIsExpired() throws InterruptedException { - // Given - cacheService.put("expireKey", "expireValue"); - - // When - Thread.sleep(1000); // Wait past the 600-ms TTL - - // Then - assertNull(cacheService.get("expireKey")); - } - - @Test - void givenMaxEntryLimit_whenInsertMoreThanLimit_thenEvictionOccurs() { - // Given - Map bulkEntries = new HashMap<>(); - for (int i = 0; i < 200; i++) { - bulkEntries.put("evictKey" + i, "value" + i); - } - - // When - cacheService.bulkPut(bulkEntries); - // Then - assertTrue(cacheService.size() <= 10); - } - - @Test - void givenCacheConfig_whenChecked_thenPassivationIsEnabled() { - assertTrue(cacheService.isPassivationEnabled(), "Passivation should be enabled"); - } - - @Test - void givenCacheAnnotation_whenInstanceChecked_thenItIsInfinispanCache() { - assertTrue(annotatedCacheService.getQuarkusCache() instanceof InfinispanCacheImpl); - } - - @Test - void givenEmbeddedCache_whenInstanceChecked_thenItIsInfinispanCache() { - assertTrue(annotatedCacheService.getEmbeddedCache() instanceof org.infinispan.Cache); - } - - @Test - void givenCache_whenQuarkusAnnotatedMethodCalled_thenTheyAreStoredInCache() { - // Given - for (int i = 0; i < 10; i++) { - annotatedCacheService.getValueFromCache("storedKey" + i); - } - - String storedValue5 = (String)annotatedCacheService.getQuarkusCache().get("storedKey5", null).await().indefinitely(); - // Then - assertEquals("storedKey5Value",storedValue5); - - String embeddedValue9 = annotatedCacheService.getEmbeddedCache().get("storedKey9"); - // Then - assertEquals("storedKey9Value",embeddedValue9); - } - - @Test - void givenCache_whenInvalidated_thenValueIsCleared() { - for (int i = 0; i < 10; i++) { - annotatedCacheService.getValueFromCache("storedKey" + i); - } - - annotatedCacheService.clear("storedKey5"); - String storedValue5 = annotatedCacheService.getEmbeddedCache().get("storedKey5"); - // Then - assertNull(storedValue5); - - annotatedCacheService.clearAll(); - String embeddedValue9 = annotatedCacheService.getEmbeddedCache().get("storedKey9"); - // Then - assertEquals(annotatedCacheService.getEmbeddedCache().size(), 0); - assertNull(embeddedValue9); - - } - - -} From a472b23f69d8d1eaf05a805461348abbaf8cee54 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 19:43:51 +0200 Subject: [PATCH 28/41] BAEL-9141 following configuration of quarkus-clientbasicauth --- .../quarkus-infinispan-embedded/pom.xml | 55 ++++++++++++------- .../{ => quarkus}/InfinispanCacheService.java | 2 +- .../InfinispanCacheServiceUnitTest.java | 2 +- 3 files changed, 36 insertions(+), 23 deletions(-) rename quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/{ => quarkus}/InfinispanCacheService.java (90%) rename quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/{ => quarkus}/InfinispanCacheServiceUnitTest.java (93%) diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index 954858be84c8..fa5552933a74 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -1,7 +1,7 @@ 4.0.0 - com.baeldung + com.baeldung.quarkus quarkus-infinispan-embedded 1.0.0-SNAPSHOT @@ -12,7 +12,7 @@ 3.14.0 - 3.25.0 + 3.12.3 true 5.13.4 @@ -26,6 +26,13 @@ pom import + + org.junit + junit-bom + 5.10.2 + pom + import + @@ -48,6 +55,31 @@ rest-assured test + + + org.junit.jupiter + junit-jupiter + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-params + test + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.vintage + junit-vintage-engine + test + @@ -63,7 +95,6 @@ build generate-code generate-code-tests - native-image-agent @@ -84,24 +115,6 @@ - - maven-failsafe-plugin - - - - integration-test - verify - - - - - - ${project.build.directory}/${project.build.finalName}-runner - org.jboss.logmanager.LogManager - ${maven.home} - - - diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/InfinispanCacheService.java b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/InfinispanCacheService.java similarity index 90% rename from quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/InfinispanCacheService.java rename to quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/InfinispanCacheService.java index 3984539e6cfb..510351455e7a 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/InfinispanCacheService.java +++ b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/InfinispanCacheService.java @@ -1,4 +1,4 @@ -package com.baeldung; +package com.baeldung.quarkus; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/InfinispanCacheServiceUnitTest.java b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/InfinispanCacheServiceUnitTest.java similarity index 93% rename from quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/InfinispanCacheServiceUnitTest.java rename to quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/InfinispanCacheServiceUnitTest.java index de4eadd0f435..0c64b3b43dc8 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/InfinispanCacheServiceUnitTest.java +++ b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/InfinispanCacheServiceUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung; +package com.baeldung.quarkus; import io.quarkus.test.junit.QuarkusTest; import org.junit.jupiter.api.Test; From 27e6d719894eb216aabfecc09b71a23a14191e85 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 20:00:25 +0200 Subject: [PATCH 29/41] BAEL-9141 using newer versions of quarkus --- .../quarkus-infinispan-embedded/pom.xml | 40 ++++--------------- 1 file changed, 7 insertions(+), 33 deletions(-) diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index fa5552933a74..fa2fcd08c387 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -12,7 +12,8 @@ 3.14.0 - 3.12.3 + 3.25.0 + 1.1.0 true 5.13.4 @@ -26,17 +27,15 @@ pom import - - org.junit - junit-bom - 5.10.2 - pom - import - + + io.quarkiverse.infinispan + quarkus-infinispan-embedded + ${quarkus.infinispan.version} + io.quarkus quarkus-rest @@ -55,31 +54,6 @@ rest-assured test - - - org.junit.jupiter - junit-jupiter - - - org.junit.jupiter - junit-jupiter-engine - test - - - org.junit.jupiter - junit-jupiter-params - test - - - org.junit.jupiter - junit-jupiter-api - test - - - org.junit.vintage - junit-vintage-engine - test - From 8c0d89e3997582fcca8f082587a264a555289838 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 20:11:14 +0200 Subject: [PATCH 30/41] BAEL-9141 using older version of Junit --- quarkus-modules/quarkus-infinispan-embedded/pom.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index fa2fcd08c387..3278ab6a72c8 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -12,10 +12,10 @@ 3.14.0 - 3.25.0 + 3.12.3 1.1.0 true - 5.13.4 + 5.10.2 @@ -31,11 +31,13 @@ + io.quarkus quarkus-rest From 1c794f698016e7468318a98f5e029fb1174a6d9f Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 21:10:42 +0200 Subject: [PATCH 31/41] BAEL-9141 infinispan code brought back --- .../quarkus-infinispan-embedded/pom.xml | 63 +++++++-- .../quarkus/InfinispanCacheService.java | 16 --- .../InfinispanAnnotatedCacheService.java | 62 +++++++++ .../infinispan/InfinispanCacheService.java | 66 ++++++++++ .../InfinispanCacheServiceUnitTest.java | 20 --- .../InfinispanCacheServiceUnitTest.java | 121 ++++++++++++++++++ 6 files changed, 303 insertions(+), 45 deletions(-) delete mode 100644 quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/InfinispanCacheService.java create mode 100644 quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java create mode 100644 quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java delete mode 100644 quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/InfinispanCacheServiceUnitTest.java create mode 100644 quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index 3278ab6a72c8..fb6bcede9fb2 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -11,8 +11,7 @@ - 3.14.0 - 3.12.3 + 3.25.0 1.1.0 true 5.10.2 @@ -27,33 +26,59 @@ pom import + + org.junit + junit-bom + ${junit-jupiter.version} + pom + import + - io.quarkus - quarkus-rest + quarkus-arc io.quarkus - quarkus-arc + quarkus-junit5 + test + io.quarkus quarkus-junit5 test - io.rest-assured - rest-assured + org.junit.jupiter + junit-jupiter + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-params + test + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.vintage + junit-vintage-engine test @@ -71,13 +96,13 @@ build generate-code generate-code-tests + native-image-agent maven-compiler-plugin - ${compiler-plugin.version} true @@ -91,6 +116,26 @@ + + maven-failsafe-plugin + ${maven-failsafe-plugin.version} + + + + integration-test + verify + + + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/InfinispanCacheService.java b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/InfinispanCacheService.java deleted file mode 100644 index 510351455e7a..000000000000 --- a/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/InfinispanCacheService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.quarkus; - -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.MediaType; - -@Path("/hello") -public class InfinispanCacheService { - - @GET - @Produces(MediaType.TEXT_PLAIN) - public String hello() { - return "Hello from Quarkus REST"; - } -} diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java new file mode 100644 index 000000000000..f9ed632b2e01 --- /dev/null +++ b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanAnnotatedCacheService.java @@ -0,0 +1,62 @@ +package com.baeldung.quarkus.infinispan; + +import io.quarkiverse.infinispan.embedded.Embedded; +import io.quarkus.cache.Cache; +import io.quarkus.cache.CacheInvalidate; +import io.quarkus.cache.CacheInvalidateAll; +import io.quarkus.cache.CacheName; +import io.quarkus.cache.CacheResult; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +@ApplicationScoped +public class InfinispanAnnotatedCacheService { + + public static final String CACHE_NAME = "anotherCache"; + + @CacheName(CACHE_NAME) + @Inject + Cache anotherCache; + + @Embedded(CACHE_NAME) + @Inject + org.infinispan.Cache embeddedCache; + + @CacheResult(cacheName = CACHE_NAME) + String getValueFromCache(String key) { + // simulate a long running computation + try { + System.out.println("getting value for "+ key); + Thread.sleep(200); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } + return key + "Value"; + } + + public org.infinispan.Cache getEmbeddedCache() { + return embeddedCache; + } + + public Cache getQuarkusCache() { + return anotherCache; + } + + @CacheInvalidateAll(cacheName = CACHE_NAME) + public void clearAll() { + // simulate a long running computation + try { + System.out.println("clearing cache " + CACHE_NAME); + Thread.sleep(200); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + @CacheInvalidate(cacheName = CACHE_NAME) + public void clear(String key) { + + } +} diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java new file mode 100644 index 000000000000..66e8445e039a --- /dev/null +++ b/quarkus-modules/quarkus-infinispan-embedded/src/main/java/com/baeldung/quarkus/infinispan/InfinispanCacheService.java @@ -0,0 +1,66 @@ +package com.baeldung.quarkus.infinispan; + +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import org.infinispan.Cache; +import org.infinispan.commons.api.CacheContainerAdmin; +import org.infinispan.configuration.cache.CacheMode; +import org.infinispan.configuration.cache.Configuration; +import org.infinispan.configuration.cache.ConfigurationBuilder; +import org.infinispan.manager.EmbeddedCacheManager; + +import jakarta.inject.Inject; + +@ApplicationScoped +public class InfinispanCacheService { + + public static final String CACHE_NAME = "demoCache"; + + @Inject + EmbeddedCacheManager cacheManager; + + private Cache demoCache; + + @PostConstruct + void init() { + Configuration cacheConfig = new ConfigurationBuilder() + .clustering().cacheMode(CacheMode.LOCAL) + .memory().maxCount(10) + .expiration().lifespan(600, TimeUnit.MILLISECONDS) + .persistence().passivation(true).build(); + + demoCache = cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE) + .getOrCreateCache(CACHE_NAME, cacheConfig); + } + + public void put(String key, String value) { + demoCache.put(key, value); + } + + public String get(String key) { + return demoCache.get(key); + } + + public void bulkPut(Map entries) { + demoCache.putAll(entries); + } + + public int size() { + return demoCache.size(); + } + + public void clear() { + demoCache.clear(); + } + + public boolean isPassivationEnabled() { + return cacheManager.getCacheConfiguration(CACHE_NAME).persistence().passivation(); + } + + public void stop() { + cacheManager.stop(); + } +} diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/InfinispanCacheServiceUnitTest.java b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/InfinispanCacheServiceUnitTest.java deleted file mode 100644 index 0c64b3b43dc8..000000000000 --- a/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/InfinispanCacheServiceUnitTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.quarkus; - -import io.quarkus.test.junit.QuarkusTest; -import org.junit.jupiter.api.Test; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; - -@QuarkusTest -class InfinispanCacheServiceUnitTest { - @Test - void testHelloEndpoint() { - given() - .when().get("/hello") - .then() - .statusCode(200) - .body(is("Hello from Quarkus REST")); - } - -} \ No newline at end of file diff --git a/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java new file mode 100644 index 000000000000..f08cd37eda35 --- /dev/null +++ b/quarkus-modules/quarkus-infinispan-embedded/src/test/java/com/baeldung/quarkus/infinispan/InfinispanCacheServiceUnitTest.java @@ -0,0 +1,121 @@ +package com.baeldung.quarkus.infinispan; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import io.quarkiverse.infinispan.embedded.runtime.cache.InfinispanCacheImpl; +import io.quarkus.test.junit.QuarkusTest; +import jakarta.inject.Inject; + +@QuarkusTest +class InfinispanCacheServiceUnitTest { + + @Inject + InfinispanCacheService cacheService; + + @Inject + InfinispanAnnotatedCacheService annotatedCacheService; + + @BeforeEach + void clearCache() { + cacheService.clear(); + } + + + @Test + void givenNewCache_whenPutEntries_thenTheyAreStored() { + // Given + for (int i = 0; i < 10; i++) { + cacheService.put("key" + i, "value" + i); + } + + // Then + assertEquals(10, cacheService.size()); + assertEquals("value5", cacheService.get("key5")); + } + + @Test + void givenEntryWithTTL_whenWaitForTTLToExpire_thenEntryIsExpired() throws InterruptedException { + // Given + cacheService.put("expireKey", "expireValue"); + + // When + Thread.sleep(1000); // Wait past the 600-ms TTL + + // Then + assertNull(cacheService.get("expireKey")); + } + + @Test + void givenMaxEntryLimit_whenInsertMoreThanLimit_thenEvictionOccurs() { + // Given + Map bulkEntries = new HashMap<>(); + for (int i = 0; i < 200; i++) { + bulkEntries.put("evictKey" + i, "value" + i); + } + + // When + cacheService.bulkPut(bulkEntries); + // Then + assertTrue(cacheService.size() <= 10); + } + + @Test + void givenCacheConfig_whenChecked_thenPassivationIsEnabled() { + assertTrue(cacheService.isPassivationEnabled(), "Passivation should be enabled"); + } + + @Test + void givenCacheAnnotation_whenInstanceChecked_thenItIsInfinispanCache() { + assertTrue(annotatedCacheService.getQuarkusCache() instanceof InfinispanCacheImpl); + } + + @Test + void givenEmbeddedCache_whenInstanceChecked_thenItIsInfinispanCache() { + assertTrue(annotatedCacheService.getEmbeddedCache() instanceof org.infinispan.Cache); + } + + @Test + void givenCache_whenQuarkusAnnotatedMethodCalled_thenTheyAreStoredInCache() { + // Given + for (int i = 0; i < 10; i++) { + annotatedCacheService.getValueFromCache("storedKey" + i); + } + + String storedValue5 = (String)annotatedCacheService.getQuarkusCache().get("storedKey5", null).await().indefinitely(); + // Then + assertEquals("storedKey5Value",storedValue5); + + String embeddedValue9 = annotatedCacheService.getEmbeddedCache().get("storedKey9"); + // Then + assertEquals("storedKey9Value",embeddedValue9); + } + + @Test + void givenCache_whenInvalidated_thenValueIsCleared() { + for (int i = 0; i < 10; i++) { + annotatedCacheService.getValueFromCache("storedKey" + i); + } + + annotatedCacheService.clear("storedKey5"); + String storedValue5 = annotatedCacheService.getEmbeddedCache().get("storedKey5"); + // Then + assertNull(storedValue5); + + annotatedCacheService.clearAll(); + String embeddedValue9 = annotatedCacheService.getEmbeddedCache().get("storedKey9"); + // Then + assertEquals(annotatedCacheService.getEmbeddedCache().size(), 0); + assertNull(embeddedValue9); + + } + + +} From b9a13c03f251f8fd7ef76a1bbf75c12057377b4e Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 23:23:37 +0200 Subject: [PATCH 32/41] BAEL-9141 quarkus version changed --- .../quarkus-infinispan-embedded/pom.xml | 67 ++++--------------- 1 file changed, 13 insertions(+), 54 deletions(-) diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index fb6bcede9fb2..755d22cfc488 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -11,8 +11,10 @@ - 3.25.0 + 3.14.0 + 3.15.6 1.1.0 + 15.0.15.Final true 5.10.2 @@ -26,13 +28,6 @@ pom import - - org.junit - junit-bom - ${junit-jupiter.version} - pom - import - @@ -42,43 +37,27 @@ quarkus-infinispan-embedded ${quarkus.infinispan.version} + + org.infinispan + infinispan-commons + ${infinispan.commons.version} + io.quarkus - quarkus-arc + quarkus-rest io.quarkus - quarkus-junit5 - test + quarkus-arc - io.quarkus quarkus-junit5 test - org.junit.jupiter - junit-jupiter - - - org.junit.jupiter - junit-jupiter-engine - test - - - org.junit.jupiter - junit-jupiter-params - test - - - org.junit.jupiter - junit-jupiter-api - test - - - org.junit.vintage - junit-vintage-engine + io.rest-assured + rest-assured test @@ -96,13 +75,13 @@ build generate-code generate-code-tests - native-image-agent maven-compiler-plugin + ${compiler-plugin.version} true @@ -116,26 +95,6 @@ - - maven-failsafe-plugin - ${maven-failsafe-plugin.version} - - - - integration-test - verify - - - - - - ${project.build.directory}/${project.build.finalName}-runner - org.jboss.logmanager.LogManager - ${maven.home} - - - - From c48251e2b1e1255f87c02de2529883ccab2513f2 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Mon, 25 Aug 2025 23:33:30 +0200 Subject: [PATCH 33/41] BAEL-9141 removed quarkus-rest dependency as we are not using it --- quarkus-modules/quarkus-infinispan-embedded/pom.xml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/quarkus-modules/quarkus-infinispan-embedded/pom.xml b/quarkus-modules/quarkus-infinispan-embedded/pom.xml index 755d22cfc488..7ac19740e56b 100644 --- a/quarkus-modules/quarkus-infinispan-embedded/pom.xml +++ b/quarkus-modules/quarkus-infinispan-embedded/pom.xml @@ -11,7 +11,6 @@ - 3.14.0 3.15.6 1.1.0 15.0.15.Final @@ -42,10 +41,6 @@ infinispan-commons ${infinispan.commons.version} - - io.quarkus - quarkus-rest - io.quarkus quarkus-arc @@ -55,11 +50,6 @@ quarkus-junit5 test - - io.rest-assured - rest-assured - test - @@ -81,7 +71,6 @@ maven-compiler-plugin - ${compiler-plugin.version} true From cf5ee13a63aedbdb686f6df5d39c52e1817090a9 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Thu, 6 Nov 2025 00:47:07 +0100 Subject: [PATCH 34/41] BAEL-7289 new quarkus-module created with basic hello world code --- quarkus-modules/pom.xml | 1 + quarkus-modules/quarkus-resources/pom.xml | 122 ++++++++++++++++++ .../src/main/docker/Dockerfile.jvm | 98 ++++++++++++++ .../src/main/docker/Dockerfile.legacy-jar | 94 ++++++++++++++ .../src/main/docker/Dockerfile.native | 29 +++++ .../src/main/docker/Dockerfile.native-micro | 32 +++++ .../quarkus/resources/ResourceAccessAPI.java | 16 +++ .../src/main/resources/application.properties | 0 .../resources/ResourceAccessAPIUnitTest.java | 20 +++ 9 files changed, 412 insertions(+) create mode 100644 quarkus-modules/quarkus-resources/pom.xml create mode 100644 quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.jvm create mode 100644 quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.legacy-jar create mode 100644 quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.native create mode 100644 quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.native-micro create mode 100644 quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java create mode 100644 quarkus-modules/quarkus-resources/src/main/resources/application.properties create mode 100644 quarkus-modules/quarkus-resources/src/test/java/com/baeldung/quarkus/resources/ResourceAccessAPIUnitTest.java diff --git a/quarkus-modules/pom.xml b/quarkus-modules/pom.xml index d78698437001..992bd8d21c69 100644 --- a/quarkus-modules/pom.xml +++ b/quarkus-modules/pom.xml @@ -31,6 +31,7 @@ quarkus-management-interface quarkus-mcp-langchain quarkus-panache + quarkus-resources quarkus-testcontainers quarkus-virtual-threads diff --git a/quarkus-modules/quarkus-resources/pom.xml b/quarkus-modules/quarkus-resources/pom.xml new file mode 100644 index 000000000000..64e758c17d25 --- /dev/null +++ b/quarkus-modules/quarkus-resources/pom.xml @@ -0,0 +1,122 @@ + + + 4.0.0 + com.baeldung.quarkus + quarkus-resources + 1.0.0-SNAPSHOT + + com.baeldung + quarkus-modules + 1.0.0-SNAPSHOT + + + 3.15.6 + true + 5.10.2 + + + + + + io.quarkus.platform + quarkus-bom + ${quarkus.platform.version} + pom + import + + + + + + + io.quarkus + quarkus-arc + + + io.quarkus + quarkus-rest + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + + + + + io.quarkus.platform + quarkus-maven-plugin + ${quarkus.platform.version} + true + + + + build + generate-code + generate-code-tests + native-image-agent + + + + + + maven-compiler-plugin + + true + + + + maven-surefire-plugin + + --add-opens java.base/java.lang=ALL-UNNAMED + + org.jboss.logmanager.LogManager + ${maven.home} + + + + + maven-failsafe-plugin + + + + integration-test + verify + + + + + --add-opens java.base/java.lang=ALL-UNNAMED + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + + native + + + native + + + + false + false + true + + + + diff --git a/quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.jvm b/quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.jvm new file mode 100644 index 000000000000..53f8aaa14e45 --- /dev/null +++ b/quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.jvm @@ -0,0 +1,98 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode +# +# Before building the container image run: +# +# ./mvnw package +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/quarkus-resources-jvm . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-resources-jvm +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. +# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005 +# when running the container +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-resources-jvm +# +# This image uses the `run-java.sh` script to run the application. +# This scripts computes the command line to execute your Java application, and +# includes memory/GC tuning. +# You can configure the behavior using the following environment properties: +# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") - Be aware that this will override +# the default JVM options, use `JAVA_OPTS_APPEND` to append options +# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options +# in JAVA_OPTS (example: "-Dsome.property=foo") +# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is +# used to calculate a default maximal heap memory based on a containers restriction. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio +# of the container available memory as set here. The default is `50` which means 50% +# of the available memory is used as an upper boundary. You can skip this mechanism by +# setting this value to `0` in which case no `-Xmx` option is added. +# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This +# is used to calculate a default initial heap memory based on the maximum heap memory. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio +# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx` +# is used as the initial heap size. You can skip this mechanism by setting this value +# to `0` in which case no `-Xms` option is added (example: "25") +# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS. +# This is used to calculate the maximum value of the initial heap memory. If used in +# a container without any memory constraints for the container then this option has +# no effect. If there is a memory constraint then `-Xms` is limited to the value set +# here. The default is 4096MB which means the calculated value of `-Xms` never will +# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096") +# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output +# when things are happening. This option, if set to true, will set +# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true"). +# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example: +# true"). +# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787"). +# - CONTAINER_CORE_LIMIT: A calculated core limit as described in +# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2") +# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024"). +# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion. +# (example: "20") +# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking. +# (example: "40") +# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection. +# (example: "4") +# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus +# previous GC times. (example: "90") +# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20") +# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100") +# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should +# contain the necessary JRE command-line options to specify the required GC, which +# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC). +# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080") +# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080") +# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be +# accessed directly. (example: "foo.example.com,bar.example.com") +# +### +FROM registry.access.redhat.com/ubi9/openjdk-21:1.23 + +ENV LANGUAGE='en_US:en' + + +# We make four distinct layers so if there are application changes the library layers can be re-used +COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/ +COPY --chown=185 target/quarkus-app/*.jar /deployments/ +COPY --chown=185 target/quarkus-app/app/ /deployments/app/ +COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/ + +EXPOSE 8080 +USER 185 +ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" + +ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ] + diff --git a/quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.legacy-jar b/quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.legacy-jar new file mode 100644 index 000000000000..0aa01b327127 --- /dev/null +++ b/quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.legacy-jar @@ -0,0 +1,94 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode +# +# Before building the container image run: +# +# ./mvnw package -Dquarkus.package.jar.type=legacy-jar +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/quarkus-resources-legacy-jar . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-resources-legacy-jar +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. +# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005 +# when running the container +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-resources-legacy-jar +# +# This image uses the `run-java.sh` script to run the application. +# This scripts computes the command line to execute your Java application, and +# includes memory/GC tuning. +# You can configure the behavior using the following environment properties: +# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") - Be aware that this will override +# the default JVM options, use `JAVA_OPTS_APPEND` to append options +# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options +# in JAVA_OPTS (example: "-Dsome.property=foo") +# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is +# used to calculate a default maximal heap memory based on a containers restriction. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio +# of the container available memory as set here. The default is `50` which means 50% +# of the available memory is used as an upper boundary. You can skip this mechanism by +# setting this value to `0` in which case no `-Xmx` option is added. +# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This +# is used to calculate a default initial heap memory based on the maximum heap memory. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio +# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx` +# is used as the initial heap size. You can skip this mechanism by setting this value +# to `0` in which case no `-Xms` option is added (example: "25") +# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS. +# This is used to calculate the maximum value of the initial heap memory. If used in +# a container without any memory constraints for the container then this option has +# no effect. If there is a memory constraint then `-Xms` is limited to the value set +# here. The default is 4096MB which means the calculated value of `-Xms` never will +# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096") +# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output +# when things are happening. This option, if set to true, will set +# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true"). +# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example: +# true"). +# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787"). +# - CONTAINER_CORE_LIMIT: A calculated core limit as described in +# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2") +# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024"). +# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion. +# (example: "20") +# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking. +# (example: "40") +# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection. +# (example: "4") +# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus +# previous GC times. (example: "90") +# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20") +# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100") +# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should +# contain the necessary JRE command-line options to specify the required GC, which +# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC). +# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080") +# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080") +# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be +# accessed directly. (example: "foo.example.com,bar.example.com") +# +### +FROM registry.access.redhat.com/ubi9/openjdk-21:1.23 + +ENV LANGUAGE='en_US:en' + + +COPY target/lib/* /deployments/lib/ +COPY target/*-runner.jar /deployments/quarkus-run.jar + +EXPOSE 8080 +USER 185 +ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" + +ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ] diff --git a/quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.native b/quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.native new file mode 100644 index 000000000000..45eadcba0a75 --- /dev/null +++ b/quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.native @@ -0,0 +1,29 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. +# +# Before building the container image run: +# +# ./mvnw package -Dnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native -t quarkus/quarkus-resources . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-resources +# +# The ` registry.access.redhat.com/ubi9/ubi-minimal:9.6` base image is based on UBI 9. +# To use UBI 8, switch to `quay.io/ubi8/ubi-minimal:8.10`. +### +FROM registry.access.redhat.com/ubi9/ubi-minimal:9.6 +WORKDIR /work/ +RUN chown 1001 /work \ + && chmod "g+rwX" /work \ + && chown 1001:root /work +COPY --chown=1001:root --chmod=0755 target/*-runner /work/application + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.native-micro b/quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.native-micro new file mode 100644 index 000000000000..bd39fb095e41 --- /dev/null +++ b/quarkus-modules/quarkus-resources/src/main/docker/Dockerfile.native-micro @@ -0,0 +1,32 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. +# It uses a micro base image, tuned for Quarkus native executables. +# It reduces the size of the resulting container image. +# Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. +# +# Before building the container image run: +# +# ./mvnw package -Dnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/quarkus-resources . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-resources +# +# The `quay.io/quarkus/ubi9-quarkus-micro-image:2.0` base image is based on UBI 9. +# To use UBI 8, switch to `quay.io/quarkus/quarkus-micro-image:2.0`. +### +FROM quay.io/quarkus/ubi9-quarkus-micro-image:2.0 +WORKDIR /work/ +RUN chown 1001 /work \ + && chmod "g+rwX" /work \ + && chown 1001:root /work +COPY --chown=1001:root --chmod=0755 target/*-runner /work/application + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java b/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java new file mode 100644 index 000000000000..561d741e10ad --- /dev/null +++ b/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java @@ -0,0 +1,16 @@ +package com.baeldung.quarkus.resources; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; + +@Path("/hello") +public class ResourceAccessAPI { + + @GET + @Produces(MediaType.TEXT_PLAIN) + public String hello() { + return "Hello from Quarkus REST"; + } +} diff --git a/quarkus-modules/quarkus-resources/src/main/resources/application.properties b/quarkus-modules/quarkus-resources/src/main/resources/application.properties new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/quarkus-modules/quarkus-resources/src/test/java/com/baeldung/quarkus/resources/ResourceAccessAPIUnitTest.java b/quarkus-modules/quarkus-resources/src/test/java/com/baeldung/quarkus/resources/ResourceAccessAPIUnitTest.java new file mode 100644 index 000000000000..25158b2005db --- /dev/null +++ b/quarkus-modules/quarkus-resources/src/test/java/com/baeldung/quarkus/resources/ResourceAccessAPIUnitTest.java @@ -0,0 +1,20 @@ +package com.baeldung.quarkus.resources; + +import io.quarkus.test.junit.QuarkusTest; +import org.junit.jupiter.api.Test; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; + +@QuarkusTest +class ResourceAccessAPIUnitTest { + @Test + void testHelloEndpoint() { + given() + .when().get("/hello") + .then() + .statusCode(200) + .body(is("Hello from Quarkus REST")); + } + +} \ No newline at end of file From 5ef385f6b94f45bc1cfbf8208f6abcfd6f0fe07c Mon Sep 17 00:00:00 2001 From: vshanbha Date: Thu, 27 Nov 2025 23:22:21 +0100 Subject: [PATCH 35/41] code written for accessing resources --- .../quarkus/resources/ResourceAccessAPI.java | 54 +++++++++++++++++-- .../src/main/resources/application.properties | 1 + .../src/main/resources/config.json | 3 ++ .../src/main/resources/default-resource.txt | 1 + .../main/resources/text/another-resource.txt | 1 + .../resources/ResourceAccessAPIUnitTest.java | 32 +++++++++-- 6 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 quarkus-modules/quarkus-resources/src/main/resources/config.json create mode 100644 quarkus-modules/quarkus-resources/src/main/resources/default-resource.txt create mode 100644 quarkus-modules/quarkus-resources/src/main/resources/text/another-resource.txt diff --git a/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java b/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java index 561d741e10ad..5696b3412ca4 100644 --- a/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java +++ b/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java @@ -1,16 +1,64 @@ package com.baeldung.quarkus.resources; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; -@Path("/hello") +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.stream.Collectors; + +@Path("/resources") public class ResourceAccessAPI { + private static final Logger LOGGER = LoggerFactory.getLogger(ResourceAccessAPI.class); + + @GET + @Path("/hello") + @Produces(MediaType.TEXT_PLAIN) + public Response getHello() throws IOException { + return Response.ok("Hello Quarkus!").build(); + } + + @GET + @Path("/default") + @Produces(MediaType.TEXT_PLAIN) + public Response getDefaultResource() throws IOException { + return Response.ok(readResource("default-resource.txt")).build(); + } + @GET + @Path("/default-nested") @Produces(MediaType.TEXT_PLAIN) - public String hello() { - return "Hello from Quarkus REST"; + public Response getDefaultNestedResource() throws IOException { + return Response.ok(readResource("text/another-resource.txt")).build(); + } + + @GET + @Path("/json") + @Produces(MediaType.APPLICATION_JSON) + public Response getJsonResource() throws IOException { + return Response.ok(readResource("config.json")).build(); + } + + + private String readResource(String resourcePath) throws IOException { + LOGGER.info("Reading resource from path: {}", resourcePath); + try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(resourcePath)) { + if (in == null) { + LOGGER.error("Resource not found at path: {}", resourcePath); + throw new IOException("Resource not found: " + resourcePath); + } + LOGGER.info("Successfully read resource: {}", resourcePath); + return new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)).lines() + .collect(Collectors.joining("\n")); + } } } diff --git a/quarkus-modules/quarkus-resources/src/main/resources/application.properties b/quarkus-modules/quarkus-resources/src/main/resources/application.properties index e69de29bb2d1..663a656de704 100644 --- a/quarkus-modules/quarkus-resources/src/main/resources/application.properties +++ b/quarkus-modules/quarkus-resources/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.native.resources.includes=text/**,*.json,*.txt \ No newline at end of file diff --git a/quarkus-modules/quarkus-resources/src/main/resources/config.json b/quarkus-modules/quarkus-resources/src/main/resources/config.json new file mode 100644 index 000000000000..1587a669681c --- /dev/null +++ b/quarkus-modules/quarkus-resources/src/main/resources/config.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} diff --git a/quarkus-modules/quarkus-resources/src/main/resources/default-resource.txt b/quarkus-modules/quarkus-resources/src/main/resources/default-resource.txt new file mode 100644 index 000000000000..06f60447244d --- /dev/null +++ b/quarkus-modules/quarkus-resources/src/main/resources/default-resource.txt @@ -0,0 +1 @@ +This is the default resource. diff --git a/quarkus-modules/quarkus-resources/src/main/resources/text/another-resource.txt b/quarkus-modules/quarkus-resources/src/main/resources/text/another-resource.txt new file mode 100644 index 000000000000..e975684a4fe6 --- /dev/null +++ b/quarkus-modules/quarkus-resources/src/main/resources/text/another-resource.txt @@ -0,0 +1 @@ +This is another resource from a sub-directory. diff --git a/quarkus-modules/quarkus-resources/src/test/java/com/baeldung/quarkus/resources/ResourceAccessAPIUnitTest.java b/quarkus-modules/quarkus-resources/src/test/java/com/baeldung/quarkus/resources/ResourceAccessAPIUnitTest.java index 25158b2005db..e71130b16812 100644 --- a/quarkus-modules/quarkus-resources/src/test/java/com/baeldung/quarkus/resources/ResourceAccessAPIUnitTest.java +++ b/quarkus-modules/quarkus-resources/src/test/java/com/baeldung/quarkus/resources/ResourceAccessAPIUnitTest.java @@ -1,6 +1,7 @@ package com.baeldung.quarkus.resources; import io.quarkus.test.junit.QuarkusTest; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static io.restassured.RestAssured.given; @@ -9,12 +10,33 @@ @QuarkusTest class ResourceAccessAPIUnitTest { @Test - void testHelloEndpoint() { + @DisplayName("should return content from default resource") + void whenGetDefaultResource_thenReturnsContent() { given() - .when().get("/hello") - .then() - .statusCode(200) - .body(is("Hello from Quarkus REST")); + .when().get("/resources/default") + .then() + .statusCode(200) + .body(is("This is the default resource.")); + } + + @Test + @DisplayName("should return content from nested default resource") + void whenGetDefaultNestedResource_thenReturnsContent() { + given() + .when().get("/resources/default-nested") + .then() + .statusCode(200) + .body(is("This is another resource from a sub-directory.")); + } + + @Test + @DisplayName("should return content from included json resource") + void whenGetJsonResource_thenReturnsContent() { + given() + .when().get("/resources/json") + .then() + .statusCode(200) + .body("version", is("1.0.0")); } } \ No newline at end of file From 993fd6ae723b96bda60ac34eb2b8f3b0b2d9c189 Mon Sep 17 00:00:00 2001 From: vshanbha Date: Thu, 27 Nov 2025 23:39:04 +0100 Subject: [PATCH 36/41] BAEL-7289 modified file name for json file --- .../java/com/baeldung/quarkus/resources/ResourceAccessAPI.java | 2 +- .../src/main/resources/{config.json => resources.json} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename quarkus-modules/quarkus-resources/src/main/resources/{config.json => resources.json} (100%) diff --git a/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java b/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java index 5696b3412ca4..08504ab0c846 100644 --- a/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java +++ b/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java @@ -45,7 +45,7 @@ public Response getDefaultNestedResource() throws IOException { @Path("/json") @Produces(MediaType.APPLICATION_JSON) public Response getJsonResource() throws IOException { - return Response.ok(readResource("config.json")).build(); + return Response.ok(readResource("resources.json")).build(); } diff --git a/quarkus-modules/quarkus-resources/src/main/resources/config.json b/quarkus-modules/quarkus-resources/src/main/resources/resources.json similarity index 100% rename from quarkus-modules/quarkus-resources/src/main/resources/config.json rename to quarkus-modules/quarkus-resources/src/main/resources/resources.json From 2f176b769daf74e2218c8db9fe418e32f8dce69e Mon Sep 17 00:00:00 2001 From: vshanbha Date: Fri, 28 Nov 2025 00:05:02 +0100 Subject: [PATCH 37/41] BAEL-7289 added rest-jackson dependency --- quarkus-modules/quarkus-resources/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/quarkus-modules/quarkus-resources/pom.xml b/quarkus-modules/quarkus-resources/pom.xml index 64e758c17d25..ffc2965b9373 100644 --- a/quarkus-modules/quarkus-resources/pom.xml +++ b/quarkus-modules/quarkus-resources/pom.xml @@ -41,6 +41,10 @@ quarkus-junit5 test + + io.quarkus + quarkus-rest-jackson + io.rest-assured rest-assured From 95e4b4c740b60e6e4e94889577a0b033839916bd Mon Sep 17 00:00:00 2001 From: Vishal Shanbhag <> Date: Fri, 28 Nov 2025 11:36:32 +0100 Subject: [PATCH 38/41] BAEL-7289 removed unwanted hello world route --- quarkus-modules/quarkus-resources/pom.xml | 11 +++++------ .../baeldung/quarkus/resources/ResourceAccessAPI.java | 7 ------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/quarkus-modules/quarkus-resources/pom.xml b/quarkus-modules/quarkus-resources/pom.xml index ffc2965b9373..c65512f817e1 100644 --- a/quarkus-modules/quarkus-resources/pom.xml +++ b/quarkus-modules/quarkus-resources/pom.xml @@ -9,12 +9,6 @@ quarkus-modules 1.0.0-SNAPSHOT - - 3.15.6 - true - 5.10.2 - - @@ -123,4 +117,9 @@ + + 3.15.6 + true + 5.10.2 + diff --git a/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java b/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java index 08504ab0c846..0b6b764356f6 100644 --- a/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java +++ b/quarkus-modules/quarkus-resources/src/main/java/com/baeldung/quarkus/resources/ResourceAccessAPI.java @@ -20,13 +20,6 @@ public class ResourceAccessAPI { private static final Logger LOGGER = LoggerFactory.getLogger(ResourceAccessAPI.class); - @GET - @Path("/hello") - @Produces(MediaType.TEXT_PLAIN) - public Response getHello() throws IOException { - return Response.ok("Hello Quarkus!").build(); - } - @GET @Path("/default") @Produces(MediaType.TEXT_PLAIN) From 477ff9916b93be56b04cecae53dcc3524ba56ba3 Mon Sep 17 00:00:00 2001 From: Vishal Shanbhag <> Date: Fri, 28 Nov 2025 12:23:02 +0100 Subject: [PATCH 39/41] BAEL-7289 added resource-config.json --- .../quarkus-resources/resource-config.json | 7 +++++++ .../src/main/resources/application.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 quarkus-modules/quarkus-resources/src/main/resources/META-INF/native-image/com.baeldung.quarkus/quarkus-resources/resource-config.json diff --git a/quarkus-modules/quarkus-resources/src/main/resources/META-INF/native-image/com.baeldung.quarkus/quarkus-resources/resource-config.json b/quarkus-modules/quarkus-resources/src/main/resources/META-INF/native-image/com.baeldung.quarkus/quarkus-resources/resource-config.json new file mode 100644 index 000000000000..0731ea609972 --- /dev/null +++ b/quarkus-modules/quarkus-resources/src/main/resources/META-INF/native-image/com.baeldung.quarkus/quarkus-resources/resource-config.json @@ -0,0 +1,7 @@ +{ + "resources": [ + { + "pattern": ".*\\.json$" + } + ] +} \ No newline at end of file diff --git a/quarkus-modules/quarkus-resources/src/main/resources/application.properties b/quarkus-modules/quarkus-resources/src/main/resources/application.properties index 663a656de704..fda716c11332 100644 --- a/quarkus-modules/quarkus-resources/src/main/resources/application.properties +++ b/quarkus-modules/quarkus-resources/src/main/resources/application.properties @@ -1 +1 @@ -quarkus.native.resources.includes=text/**,*.json,*.txt \ No newline at end of file +quarkus.native.resources.includes=text/**,*.txt \ No newline at end of file From ca990cc82d4bd5820a4e4434e5c7558a6a68e617 Mon Sep 17 00:00:00 2001 From: Vishal Shanbhag <> Date: Fri, 28 Nov 2025 20:08:52 +0100 Subject: [PATCH 40/41] BAEL-7289 added web resources --- quarkus-modules/quarkus-resources/pom.xml | 6 +++--- .../src/main/resources/META-INF/resources/index.html | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 quarkus-modules/quarkus-resources/src/main/resources/META-INF/resources/index.html diff --git a/quarkus-modules/quarkus-resources/pom.xml b/quarkus-modules/quarkus-resources/pom.xml index c65512f817e1..dcbbe1202fae 100644 --- a/quarkus-modules/quarkus-resources/pom.xml +++ b/quarkus-modules/quarkus-resources/pom.xml @@ -32,12 +32,12 @@ io.quarkus - quarkus-junit5 - test + quarkus-rest-jackson io.quarkus - quarkus-rest-jackson + quarkus-junit5 + test io.rest-assured diff --git a/quarkus-modules/quarkus-resources/src/main/resources/META-INF/resources/index.html b/quarkus-modules/quarkus-resources/src/main/resources/META-INF/resources/index.html new file mode 100644 index 000000000000..9880aa29e63c --- /dev/null +++ b/quarkus-modules/quarkus-resources/src/main/resources/META-INF/resources/index.html @@ -0,0 +1,9 @@ + + + + Quarkus Resources article from Baeldung + + +

Hello from Baeldung!

+ + \ No newline at end of file From ff49126e7f484d53262fcc211ed3222b54bf362f Mon Sep 17 00:00:00 2001 From: Vishal Shanbhag <> Date: Mon, 1 Dec 2025 12:22:55 +0100 Subject: [PATCH 41/41] BAEL-7289 test case method names modified --- .../quarkus/resources/ResourceAccessAPIUnitTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quarkus-modules/quarkus-resources/src/test/java/com/baeldung/quarkus/resources/ResourceAccessAPIUnitTest.java b/quarkus-modules/quarkus-resources/src/test/java/com/baeldung/quarkus/resources/ResourceAccessAPIUnitTest.java index e71130b16812..de1480e15dc3 100644 --- a/quarkus-modules/quarkus-resources/src/test/java/com/baeldung/quarkus/resources/ResourceAccessAPIUnitTest.java +++ b/quarkus-modules/quarkus-resources/src/test/java/com/baeldung/quarkus/resources/ResourceAccessAPIUnitTest.java @@ -11,7 +11,7 @@ class ResourceAccessAPIUnitTest { @Test @DisplayName("should return content from default resource") - void whenGetDefaultResource_thenReturnsContent() { + void givenAPI_whenGetDefaultResource_thenReturnsContent() { given() .when().get("/resources/default") .then() @@ -21,7 +21,7 @@ void whenGetDefaultResource_thenReturnsContent() { @Test @DisplayName("should return content from nested default resource") - void whenGetDefaultNestedResource_thenReturnsContent() { + void givenAPI_whenGetDefaultNestedResource_thenReturnsContent() { given() .when().get("/resources/default-nested") .then() @@ -31,7 +31,7 @@ void whenGetDefaultNestedResource_thenReturnsContent() { @Test @DisplayName("should return content from included json resource") - void whenGetJsonResource_thenReturnsContent() { + void givenAPI_whenGetJsonResource_thenReturnsContent() { given() .when().get("/resources/json") .then()