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 11).

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-10048] - DocumentStoreIndexerBase#buildFlatFileStore outputs the wrong path when FlatFileSplitter used
    [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
    [OAK-10078] - antrun for reactor pom fails due to removal of tasks function
    [OAK-10079] - oak-run-commons tests left over: empty "split" folder (next to "src")

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
    [OAK-10076] - Bump netty dependency from 4.1.68.Final to 4.1.86.Final


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/

