Release Notes -- Apache Jackrabbit Oak -- Version 1.4.4

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.4.4 is a patch release that contains fixes and
improvements over Oak 1.4. Jackrabbit Oak 1.4.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.4.4
---------------------

Technical task

    [OAK-4409] - RDB*Store: bump up recommended DB2 version to 10.5
    [OAK-4425] - RDBDocumentStore: upgrade MySQL JDBC driver dependency to 5.1.39
    [OAK-4482] - RDB*Store: update tomcat-jdbc test dependency
    [OAK-4495] - RDBDocumentStore: consistent handling of invalidate methods
    [OAK-4497] - RDBDocumentStore: potential race condition between update and invalidate can cause stale cache entries


Bug

    [OAK-4296] - Oak-run console's lucene command is broken
    [OAK-4358] - Stale cluster ids can potentially lead to lots of previous docs traversal in NodeDocument.getNewestRevision
    [OAK-4429] - [oak-blob-cloud] S3Backend#getAllIdentifiers should not store all elements in memory
    [OAK-4430] - DataStoreBlobStore#getAllChunkIds fetches DataRecord when not needed
    [OAK-4432] - Ignore files in the root directory of the FileDataStore in #getAllIdentifiers
    [OAK-4437] - Backport OAK-4387 (XPath: querying for nodes named "text"...) to 1.2 and 1.4
    [OAK-4441] - [BlobGC] Writing of strings should be escaped
    [OAK-4493] - Offline compaction persisted mode
    [OAK-4496] - Enable DataStoreBlobStore#getAllRecords to support non-shared DataStore
    [OAK-4499] - LucenePropertyIndexTest#longRepExcerpt is too aggressive


Improvement

    [OAK-4297] - Oak-run console should allow to setup FDS of repository
    [OAK-4368] - Excerpt extraction from the Lucene index should be more selective
    [OAK-4483] - Remove synchronized access requirement from MetricStatisticsProvider#getStats


Task

    [OAK-4418] - Benchmark Results for Oak 1.4
    [OAK-4442] - S3DataStoreService should initialize SharedS3DataStore
    [OAK-4480] - update oak 1.4 to JR 2.12.2


Test

    [OAK-4489] - Improve test coverage on DocumentStore for concurrent query and invalidate


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/
