
Release Notes -- Apache Jackrabbit Oak -- Version 1.0.28

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

Technical task

   [OAK-3892] - RDBDocumentStore: StripedNodeDocumentLocks - special case root?
   [OAK-4020] - RDBExport: misleading warning about column names
   [OAK-4021] - RDBDocumentStore: create() for collections other than NODES is broken
   [OAK-4033] - RDBDocumentStore: refactor version check to address driver version as well
   [OAK-4034] - RDBDocumentStore: use and require Oracle 12.1 JDBC driver

Bug

   [OAK-3634] - RDB/MongoDocumentStore may return stale documents
   [OAK-3653] - Incorrect last revision of cached node state
   [OAK-3929] - RevisionGC does not invalidate document cache
   [OAK-4017] - ObservationTest: tearDown() may fail with NPE
   [OAK-4018] - Test failures after upgrading to JR 2.12.0
   [OAK-4036] - LuceneIndexProviderService may miss on registering PreExtractedTextProvider

Improvement

   [OAK-3126] - Enable HybridMapFactory by default
   [OAK-3649] - Extract node document cache from Mongo and RDB document stores
   [OAK-3841] - Change return type of Document.getModCount() to Long
   [OAK-4022] - DocumentNodeStoreService journal write should log write failures

Task

   [OAK-3613] - Backport TarMK revision gc related issues
   [OAK-3651] - Remove HierarchicalCacheInvalidator
   [OAK-3906] - NodeDocumentCache cleanup used inconsistently


In addition to the above-mentioned changes, this release contains
all changes included in previous Apache Jackrabbit Oak 1.0.x releases.

Please note, the backported RDB support for the DocumentNodeStore is considered
experimental at this point and is not yet ready for production use. Feel free 
to try it out and report any issues you may see to the Oak developers.

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/
