Release Notes -- Apache Jackrabbit Oak -- Version 1.0.6

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

Bug Fixes

   [OAK-2047] - Missing privileges after repository upgrade
   [OAK-2049] - ArrayIndexOutOfBoundsException in Segment.getRefId()
   [OAK-2053] - Excessive memory usage with Oracle Java 6
   [OAK-2059] - Reindexing can include hidden nodes in the index
   [OAK-2062] - Range queries and relative properties resultset should be consistent with JR2
   [OAK-2068] - Lucene index: "reindex" property is automatically set to true
   [OAK-2073] - Prevent against integer overflow in compaction check
   [OAK-2078] - Prevent null/empty passwords in ldap provider
   [OAK-2084] - The query engine should not return hidden nodes
   [OAK-2088] - AsyncIndexUpdate can leave orphaned checkpoint in case of abrupt shutdown
   [OAK-2099] - AIOOBE in Segment#toString
   [OAK-2102] - Oak-run add option to remove all unreferenced checkpoints
   [OAK-2111] - Rename FileStoreCorruptException to SegmentNotFoundException and update the NodeStore contract

Improvements

   [OAK-1880] - Omit Configuration Retrieval for PreAuthContext
   [OAK-2004] - Add a way to pause the background async indexer
   [OAK-2007] - MongoBlobStore improvements
   [OAK-2051] - Provide option to use  Configuration SPI in JAAS authentication when running within AppServer
   [OAK-2060] - MBean to provide consolidated cache stats 
   [OAK-2069] - Log details of _lastRev recovery
   [OAK-2087] - Record time when checpoint is created in SegmentNodeStore
   [OAK-2090] - Improve logging in compaction and cleanup operation in SegmentMK
   [OAK-2091] - Improve logging in MongoDocumentStore
   [OAK-2094] - Oak Upgrade should depend on oak-jcr with a 'test' scope
   [OAK-2100] - Change NodeStore#release method to return a boolean
   [OAK-2104] - IndexStatsMBean should expose the time upto which the repository state has been indexed

New Features

   [OAK-1893] - MBean to dump Lucene Index content and related stats
   [OAK-1906] - Adding information to a  Standard MBean interface using annotations

Task

   [OAK-2085] - Move CacheStats humanReadableByteCount to Oak Commons IOUtils

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

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/
