Release Notes -- Apache Jackrabbit Oak -- Version 1.8.17

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

Bug

    [OAK-8232] - Node#setPrimaryType(String) does not create child nodes defined as autoCreated
    [OAK-8591] - Conflict exception on commit

Test
 
    [OAK-8532] - Osgi based test to verify tika setup is working
    [OAK-8535] - oak-it-osgi fails with encrypted credentials in settings.xml

Task
        
    [OAK-8449] - LastRev check/fix in DocumentNodeStore MBean
    [OAK-8594] - Update Oak 1.8 to Jackrabbit 2.16.5



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/
