Release Notes -- Apache Jackrabbit Oak -- Version 1.8.24

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.

Jackrabbit Oak 1.8.24 is a patch release that contains fixes and
improvements over Oak 1.8. Jackrabbit Oak 1.8.x releases are
considered stable and targeted for production use.

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.8.24
---------------------

Technical task
        [OAK-7553] - Extract interface from CommitValueResolver

Bug
        [OAK-9229] - CountingDocumentStore returns documents with incorrect store reference

Improvement

        [OAK-9184] - Very slow, potential endless loop in LucenePropertyIndex.loadDocs()
        [OAK-9230] - CachingCommitValueResolver with negative cache
        [OAK-9231] - Enable negative cache of commit value resolver for oak-run index command
        [OAK-9261] - Upgrade Apache Solr to 8.6.3 and remove Embedded Solr Server




In addition to the above-mentioned changes, this release contains
all changes included up to the Apache Jackrabbit Oak 1.8.x 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/
