Release Notes -- Apache Jackrabbit Oak -- Version 1.2.19

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

Technical task

   [OAK-4615] - RDBDocumentStore: in 1.0, cache invalidation is slightly different from 1.2


Bug

    [OAK-3522] - DefaultSyncContext exposes internal path-utility method
    [OAK-3523] - DefaultSyncContext catches ClassCastException
    [OAK-4153] - segment's compareAgainstBaseState wont call childNodeDeleted when deleting last and adding n nodes
    [OAK-4219] - ExternalLoginModuleTestBase doesn't remove synced User/Group accounts
    [OAK-4224] - DefaultSyncContext.sync(ExternalIdentity) should verify IDP
    [OAK-4231] - DefaultSyncContext creates Value of type String for Binary|Inputstream Object
    [OAK-4267] - SyncedIdentity for foreign authorizable always has isGroup set to false
    [OAK-4302] - DefaultSyncContextTest contains duplicate test
    [OAK-4448] - Test failures that rely on expiration time to experience a re-sync.
    [OAK-4600] - In case of branch commits, nodeChildrenCache gets entries for branch revision without "br" prefix
    [OAK-4675] - SNFE thrown while testing FileStore.cleanup() running concurrently with writes
    [OAK-4676] - Index definition on nt:base with analyzed property incorrectly matches query with different property
    [OAK-4679] - Backport OAK-4119, OAK-4101, OAK-4087 and OAK-4344
    [OAK-4790] - Compilation error with JDK 6 in FileIOUtils


Improvement

    [OAK-2690] - Add optional UserConfiguration#getUserPrincipalProvider()
    [OAK-2994] - AbstractSecurityTest#getUserManager(Root) doesn't create new instances
    [OAK-3003] - Improve login performance with huge group membership
    [OAK-3274] - DefaultSyncConfigImpl: add information to "user.membershipExpTime" about minimum expiration time
    [OAK-3518] - Consistently add annotations to DefaultSync* classes
    [OAK-3563] - Improve DefaultSyncContext
    [OAK-3648] - Use StandardTokenizer instead of ClassicTokenizer in OakAnalyzer
    [OAK-3721] - Reduce code duplication in MembershipProvider
    [OAK-3728] - Document indexes in the index itself
    [OAK-4001] - ExternalLoginModule: Make max sync attempts configurable
    [OAK-4005] - LdapIdentityProvider.getEntries() is prone to OOME.
    [OAK-4087] - Replace Sync of configured AutoMembership by Dynamic Principal Generation
    [OAK-4119] - Improvements Take 1
    [OAK-4384] - Benchmarks: add support 'automembership' config option
    [OAK-4385] - Benchmarks: proper init of ExternalPrincipalConfiguration with dynamicMembership
    [OAK-4516] - Configurable option to lucene index defs to index original (unanalyzed value as well)
    [OAK-4623] - Log more information when null DocumentNodeState is read for a child while fetching children
    [OAK-4678] - Backport OAK-4344 and OAK-4005


New Feature

    [OAK-3170] - Implement Group extensions as proposed in JCR-3880
    [OAK-4003] - Add support for Group-Membership actions
    [OAK-4101] - Consider separate external (group) principal management


Task

    [OAK-3211] - Document External Identity Management
    [OAK-4364] - Initial Benchmarks for oak-auth-external
    [OAK-4743] - Update Oak 1.2 and Oak 1.4 to Jackrabbit 2.12.4
    [OAK-4791] - Enable animal sniffer plugin

Test

    [OAK-2742] - Add UserImport tests that run with a non-admin session
    [OAK-4226] - Improve testing of DefaultSyncContext
    [OAK-4248] - More tests for the exposed 'basic' package
    [OAK-4382] - Test failure in ExternalGroupPrincipalProviderTest.testFindPrincipalsByHintTypeGroup


In addition to the above-mentioned changes, this release contains
all changes included up to the Apache Jackrabbit Oak 1.2.18 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/
