Release Notes -- Apache Jackrabbit Oak -- Version 1.48.0

Introduction
------------

Jackrabbit Oak is a scalable, high-performance hierarchical content
repository designed for use as the foundation of modern world-class
web sites and other demanding content applications.

Apache Jackrabbit Oak 1.48.0 is an incremental feature release based
on and compatible with earlier stable Jackrabbit Oak 1.x
releases. This release is considered stable and targeted for
production use.

While Oak 1.48.0 compiles and tests successfully on Java 17, Javadocs
generation fails on Java 17 (but works as expected on Java 8).

The Oak effort is a part of the Apache Jackrabbit project.
Apache Jackrabbit is a project of the Apache Software Foundation.

Changes in Oak 1.48.0
---------------------

Technical task

    [OAK-10038] - CompositeStoreIT: add workaround for potential NPE in test
    [OAK-10039] - CompositeTestSupport: improve diagnostics

Bug

    [OAK-10022] - ReadOnlyFileStore#collectBlobReferences throws NullPointerException if azure blob with binary references is missing in the tar directory
    [OAK-10033] - Conditions on dates use the wrong range
    [OAK-10051] - oak-run and oak-upgrade JARs incomplete (META-INF/MANIFEST.MF is missing the Main-Class entry)
    [OAK-10063] - AsyncIndexUpdate - Logger not printing complete message
    [OAK-10067] - ExternalGroupPrincipalProvider does not resolve inherited groups that cross IDP boundaries

New Feature

    [OAK-10056] - Provide support for Jakarta Region for AWS S3

Improvement

    [OAK-9800] - Update Maven Plugins and Apache Parent POM to version 29
    [OAK-10031] - Remove unmerged branches and collisions in batches
    [OAK-10034] - Periodically clean up unmerged branch commits and collision markers
    [OAK-10054] - Improved trace level logging of JCR method calls
    [OAK-10055] - Auto refreshing IndexTracker every hour causes online reindexing to fail
    [OAK-10061] - WARN when for an external group a local group with the same name is already present
    [OAK-10071] - Consistently filter duplicate authorizables in iterators
    [OAK-10074] - AutoMembershipProvider consistency with ExternalPrincipalProvider

Task

    [OAK-10040] - Update animal-sniffer dependency to 1.22
    [OAK-10041] - Upgrade maven-bundle-plugin to 5.1.8
    [OAK-10042] - Update checkstyle-plugin dependency to version 3.1.2
    [OAK-10043] - Upgrade maven-versions-plugin to 2.14.1
    [OAK-10044] - Javadoc fixes for JDK 11 compat
    [OAK-10045] - Upgrade gmavenplus-plugin to 1.13.1
    [OAK-10046] - oak-it-osgi: remove unneeded workaround maven-resources-plugin
    [OAK-10047] - oak-core: bump up logging for deprecated Guava based APIs to WARN
    [OAK-10057] - Update Oak trunk and Oak 1.22 to Jackrabbit 2.20.8
    [OAK-10059] - webapp: avoid use of Jackrabbit's transitive commons-collections dependency
    [OAK-10062] - consolidate and update groovy versions to 2.4.21
    [OAK-10065] - avoid-use of groovy-all artefact
    [OAK-10066] - update groovy dependency to 2.5.20
    [OAK-10073] - Additional tests combining dynamic groups and automembership


In addition to the above-mentioned changes, this release contains all
changes up to the previous release.

For more detailed information about all the changes in this and other
Oak releases, please see the Oak issue tracker at

  https://issues.apache.org/jira/browse/OAK

Release Contents
----------------

This release consists of a single source archive packaged as a zip file.
The archive can be unpacked with the jar tool from your JDK installation.
See the README.md file for instructions on how to build this release.

The source archive is accompanied by SHA512 checksums and a
PGP signature that you can use to verify the authenticity of your
download. The public key used for the PGP signature can be found at
https://www.apache.org/dist/jackrabbit/KEYS.

About Apache Jackrabbit Oak
---------------------------

Jackrabbit Oak is a scalable, high-performance hierarchical content
repository designed for use as the foundation of modern world-class
web sites and other demanding content applications.

The Oak effort is a part of the Apache Jackrabbit project.
Apache Jackrabbit is a project of the Apache Software Foundation.

For more information, visit http://jackrabbit.apache.org/oak

About The Apache Software Foundation
------------------------------------

Established in 1999, The Apache Software Foundation provides organizational,
legal, and financial support for more than 140 freely-available,
collaboratively-developed Open Source projects. The pragmatic Apache License
enables individual and commercial users to easily deploy Apache software;
the Foundation's intellectual property framework limits the legal exposure
of its 3,800+ contributors.

For more information, visit http://www.apache.org/

