Release Notes -- Apache Jackrabbit Oak -- Version 1.8.26

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


Bug

        [OAK-9616] - Node.setPrimaryType() does not always support expanded names
        [OAK-9677] - Standby mode not working anymore in Oak 1.8.25


Task

        [OAK-8820] - Update slf4j dependency to 1.7.29
        [OAK-9611] - Bump netty dependency from 4.1.66.Final to 4.1.68.Final
        [OAK-9641] - Update Logback version to 1.2.8
        [OAK-9643] - Update slf4j dependency to 1.7.32
        [OAK-9645] - oak-solr-core - avoid transitive log4j test dependency
        [OAK-9652] - Update Logback version to 1.2.10
        [OAK-9657] - Update Oak 1.8 to Jackrabbit 2.16.9
        [OAK-9661] - Upgrade Solr to v8.11.1
        [OAK-9668] - Update H2DB dependency






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/
