Release Notes -- Apache Jackrabbit Oak -- Version 1.5.7

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.5.7 is an unstable release cut directly from
Jackrabbit Oak trunk, with a focus on new features and other
improvements. For production use we recommend the latest stable 1.4.x
release.

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

Technical task

    [OAK-3403] - Multiplexing store support in Property indexes
    [OAK-3758] - Multiplexing store support in Reference index
    [OAK-4593] - Remove usage of DocumentMK in
    DocumentNodeStoreService

Bug

    [OAK-3072] - LuceneIndexEditorTest#copyOnWriteAndLocks failing on
    windows
    [OAK-4595] - OSGiIT failure LuceneIndexProviderService exception

Improvement

    [OAK-4344] - LdapIdentityProvider always retrieves all attributes
    when looking up an LDAP entity.
    [OAK-4500] - Create tooling for reducing a document-based
    repository to a list of paths
    [OAK-4587] - Don't ignore the cached NULLs in bulk createOrUpdate
    for Mongo
    [OAK-4594] - Remove DocumentNodeState.copyTo()
    [OAK-4605] - Separate persistent cache for diff and local_diff
    [OAK-4613] - Suggest directory should be opened in read only mode
    [OAK-4616] - Record suggestor status in suggest-data node
    [OAK-4622] - SessionDelegate.lock speedup
    [OAK-4624] - Optionally ignore missing blobs during sidegrade

New Feature

    [OAK-4180] - Use another NodeStore as a local cache for a remote
    Document store

Task

    [OAK-4470] - Remove read revision method from DocumentNodeState
    [OAK-4592] - Make DocumentNodeState immutable
    [OAK-4607] - Add support for multiple directory in IndexCopier

In addition to the above-mentioned changes, this release contains
all changes included up to the Apache Jackrabbit Oak 1.4.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 SHA1 and MD5 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
http://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/
