diff --git a/README.md b/README.md index c3c9a897..90fba304 100644 --- a/README.md +++ b/README.md @@ -226,6 +226,55 @@ The Liberty session caching feature builds on top of an existing technology call RUN configure.sh ``` + * **Beta: Enhanced Infinispan Client Configuration** - The beta images include enhanced configurability for the Infinispan client setup. The [infinispan-client-setup.sh](releases/latest/beta/helpers/build/infinispan-client-setup.sh) script supports the following environment variables to ensure compatibility between your Liberty features and the Infinispan client: + * `INFINISPAN_CLIENT_VERSION` + - Description: Sets the Infinispan client version. Refer to [Infinispan Release Notes](https://infinispan.org/release-notes) for major version and compatibility details. + - Default: `"15.2.6.Final"` + - **Automatic Dependency Management**: For Infinispan versions < 11.0.0 (e.g., `10.1.3.Final`, `10.1.9.Final`), reactive-streams and rxjava dependencies are automatically removed as they are not required. For versions >= 11.0.0, these dependencies are included as they are required by Liberty's sessionCache-1.0 feature. + * `INFINISPAN_USE_LATEST_PATCH` + - Description: When set to `"true"`, `INFINISPAN_CLIENT_VERSION` will resolve to the latest patch update within its specified major.minor version. + - Default: `"false"` + - Note: This will resolve the highest version string found in [Maven Central](https://mvnrepository.com/artifact/org.infinispan/infinispan-jcache), which includs any non-final releases (e.g., .Dev01, .Beta, or .RC versions). + * **TIP** - Liberty enforces specific API namespaces based on the Java EE / Jakarta EE specification level of your enabled features. When using Jakarta EE 10 features, the runtime environment is strictly `jakarta.*`, necessitating an Infinispan client that aligns with that specification. For further details on lifecycle and Java baseline requirements, refer to the [Infinispan Release Posts](https://infinispan.org/blog/tag/release/) and official [Download pages](https://infinispan.org/download/). + +
+ Infinispan Client Compatibility Table + + | Major Version | Java Baseline | Support Until | Notes | + | :--- | :--- | :--- | :--- | + | **16.0** | Java 17+ | 6 months after 17.0 (Full) | Release versions no longer end with .Final | + | **15.2** | Java 17+ | May 2026 (Full) | | + | **14.0** | Java 11+ | October 2027 (Limited) | | + | **13.0** | Java 8+ | November 2026 (Limited) | | + | **10.x - 12.0**| Java 8 | **javax.*** | End of life | Unsupported | + +
+ + Example Dockerfile for beta with custom Infinispan version: + ```dockerfile + ### Infinispan Session Caching (Beta) ### + FROM icr.io/appcafe/open-liberty:beta AS infinispan-client + + # Specify Infinispan client version (optional, defaults to 15.2.6.Final) + ENV INFINISPAN_CLIENT_VERSION=14.0.5.Final + # Optionally resolve latest patch version + # ENV INFINISPAN_USE_LATEST_PATCH=true + + USER root + RUN infinispan-client-setup.sh + USER 1001 + + FROM icr.io/appcafe/open-liberty:beta AS open-liberty-infinispan + + # Copy Infinispan client jars to Open Liberty shared resources + COPY --chown=1001:0 --from=infinispan-client /opt/ol/wlp/usr/shared/resources/infinispan /opt/ol/wlp/usr/shared/resources/infinispan + + ENV INFINISPAN_SERVICE_NAME=example-infinispan + + # This script will add the requested XML snippets and grow image to be fit-for-purpose + RUN configure.sh + ``` + * **Mount Infinispan Secret** - Finally, the Infinispan generated secret must be mounted as a volume under the mount point of `/platform/bindings/infinispan/secret/` on Liberty containers. The default , for versions latest and 20.0.0.6+, of `/platform/bindings/infinispan/secret/` can to be overridden by setting the `LIBERTY_INFINISPAN_SECRET_DIR` environment variable. When using the Infinispan Operator, this secret is automatically generated as part of the Infinispan service with the name of `-generated-secret`. For the mounting of this secret to succeed, the Infinispan Operator and Liberty must share the same namespace. If they do not share the same namespace, the `INFINISPAN_HOST`, `INFINISPAN_PORT`, `INFINISPAN_USER`, and `INFINISPAN_PASS` environment variables can be used instead(see the Dockerfile example above). For an example of mounting this secret, review the `volumes` and `volumeMounts` portions of the YAML below. ```yaml diff --git a/releases/latest/beta/helpers/build/configuration_snippets/infinispan-client-sessioncache.xml b/releases/latest/beta/helpers/build/configuration_snippets/infinispan-client-sessioncache.xml index e2ec72d2..c3b3f8a6 100644 --- a/releases/latest/beta/helpers/build/configuration_snippets/infinispan-client-sessioncache.xml +++ b/releases/latest/beta/helpers/build/configuration_snippets/infinispan-client-sessioncache.xml @@ -3,16 +3,16 @@ sessionCache-1.0 - + + - diff --git a/releases/latest/beta/helpers/build/infinispan-client-setup.sh b/releases/latest/beta/helpers/build/infinispan-client-setup.sh index ff9b1a21..b50cf775 100755 --- a/releases/latest/beta/helpers/build/infinispan-client-setup.sh +++ b/releases/latest/beta/helpers/build/infinispan-client-setup.sh @@ -3,6 +3,13 @@ set -Eeo pipefail +# Recommended stable baseline for Jakarta EE 10 / JDK 17+ environments. +INFINISPAN_DEFAULT_VERSION="15.2.6.Final" +INFINISPAN_CLIENT_VERSION=${INFINISPAN_CLIENT_VERSION:-$INFINISPAN_DEFAULT_VERSION} + +# Resolves the latest patch release (x.y.Z) within the specified major.minor version. +INFINISPAN_USE_LATEST_PATCH=${INFINISPAN_USE_LATEST_PATCH:-false} + pkgcmd=yum if ! command $pkgcmd then @@ -11,17 +18,62 @@ fi $pkgcmd update -y $pkgcmd install -y maven -mkdir -p /opt/ol/wlp/usr/shared/resources/infinispan -echo ' 4.0.0 io.openliberty openliberty-infinispan-client 1.0 org.infinispan infinispan-jcache-remote 10.1.3.Final ' > /opt/ol/wlp/usr/shared/resources/infinispan/pom.xml -mvn -f /opt/ol/wlp/usr/shared/resources/infinispan/pom.xml versions:use-latest-releases -DallowMajorUpdates=false -mvn -f /opt/ol/wlp/usr/shared/resources/infinispan/pom.xml dependency:copy-dependencies -DoutputDirectory=/opt/ol/wlp/usr/shared/resources/infinispan + +CLIENT_JARS_DIR="/opt/ol/wlp/usr/shared/resources/infinispan" +mkdir -p "${CLIENT_JARS_DIR}" + +cat << EOF > ${CLIENT_JARS_DIR}/pom.xml + + 4.0.0 + io.openliberty + openliberty-infinispan-client + 1.0 + + + + + org.infinispan + infinispan-jcache-remote + ${INFINISPAN_CLIENT_VERSION} + + + +EOF + +if [ "${INFINISPAN_USE_LATEST_PATCH}" = "true" ]; then + echo "Resolving latest Infinispan client patch release (no major upgrades)..." + mvn -f "${CLIENT_JARS_DIR}"/pom.xml versions:use-latest-releases -DallowMajorUpdates=false -DallowMinorUpdates=false +fi + +mvn -f "${CLIENT_JARS_DIR}/pom.xml" dependency:copy-dependencies -DoutputDirectory="${CLIENT_JARS_DIR}" # This fails with dependency errors using microdnf on ubi-minimal, but it is okay to let it fail yum remove -y maven || true -rm -f /opt/ol/wlp/usr/shared/resources/infinispan/pom.xml -rm -f /opt/ol/wlp/usr/shared/resources/infinispan/jboss-transaction-api*.jar -rm -f /opt/ol/wlp/usr/shared/resources/infinispan/reactive-streams-*.jar -rm -f /opt/ol/wlp/usr/shared/resources/infinispan/rxjava-*.jar +rm -f "${CLIENT_JARS_DIR}/pom.xml" + +# Remove unnecessary spec jars +rm -f "${CLIENT_JARS_DIR}"/jboss-transaction-api*.jar +rm -f "${CLIENT_JARS_DIR}"/jakarta.transaction-api*.jar + +# Extract major version set +MAJOR_VERSION=$(echo "${INFINISPAN_CLIENT_VERSION}" | sed -E 's/^([0-9]+)\..*/\1/') +# Reactive streams are required for Infinispan 11+ on Liberty sessionCache-1.0 +# For versions < 11.0.0, remove reactive streams +if [ "${MAJOR_VERSION}" -lt 11 ]; then + echo "Removing reactive-streams and rxjava jars as Infinispan version ${INFINISPAN_CLIENT_VERSION} is < 11.0.0..." + rm -f "${CLIENT_JARS_DIR}"/reactive-streams-*.jar + rm -f "${CLIENT_JARS_DIR}"/rxjava-*.jar +fi + rm -rf ~/.m2 -chown -R 1001:0 /opt/ol/wlp/usr/shared/resources/infinispan -chmod -R g+rw /opt/ol/wlp/usr/shared/resources/infinispan +chown -R 1001:0 "${CLIENT_JARS_DIR}" +chmod -R g+rw "${CLIENT_JARS_DIR}" + +INSTALLED_VERSION=$(find "${CLIENT_JARS_DIR}/" -name "infinispan-jcache-remote-*.jar" -printf "%f" | sed 's/infinispan-jcache-remote-\(.*\).jar/\1/') + +if [ -n "$INSTALLED_VERSION" ]; then + echo "Successfully installed Infinispan client version: ${INSTALLED_VERSION}" +fi + diff --git a/releases/latest/beta/helpers/runtime/docker-server.sh b/releases/latest/beta/helpers/runtime/docker-server.sh index 51a6b252..63c0ded4 100755 --- a/releases/latest/beta/helpers/runtime/docker-server.sh +++ b/releases/latest/beta/helpers/runtime/docker-server.sh @@ -103,6 +103,8 @@ importKeyCert # Infinispan Session Caching if [[ -n "$INFINISPAN_SERVICE_NAME" ]]; then echo "INFINISPAN_SERVICE_NAME(original): ${INFINISPAN_SERVICE_NAME}" + INFINISPAN_SERVICE_NAME_ORIGINAL=${INFINISPAN_SERVICE_NAME} + export INFINISPAN_SERVICE_NAME_ORIGINAL INFINISPAN_SERVICE_NAME=$(echo ${INFINISPAN_SERVICE_NAME} | sed 's/-/_/g' | sed 's/./\U&/g') echo "INFINISPAN_SERVICE_NAME(normalized): ${INFINISPAN_SERVICE_NAME}"