Release Notes -- Apache Jackrabbit -- Version 2.8.2

Introduction
------------

This is Apache Jackrabbit(TM) 2.8.2, a fully compliant implementation of the
Content Repository for Java(TM) Technology API, version 2.0 (JCR 2.0) as
specified in the Java Specification Request 283 (JSR 283).

Apache Jackrabbit 2.8.2 is a patch release that contains fixes and
improvements over Jackrabbit 2.8. Jackrabbit 2.8.x releases are considered
stable and targeted for production use.

Changes since Jackrabbit 2.8.1
------------------------------

Improvements

    [JCR-3900] - LockTest.testNodeLocked: incorrect assumption about when the lock token can be returned
    [JCR-3971] - Make read-permission cache-size in CompiledPermissionsImpl configurable
    [JCR-3972] - Make size of ID-cache in CachingHierarchyManager configurable

Bug fixes

    [JCR-2633] - Modified externally exception when modifying mixinTypes with single session
    [JCR-3915] - undo incorrect change to lock token test
    [JCR-3949] - occasional test failure in RepositoryConfigTest.testAutomaticClusterNodeIdCreation()
    [JCR-3950] - XSS in DirListingExportHandler

In addition to the above-mentioned changes, this release contains
all the changes included up to the Apache Jackrabbit 2.8.1 release.

For more detailed information about all the changes in this and other
Jackrabbit releases, please see the Jackrabbit issue tracker at

    https://issues.apache.org/jira/browse/JCR

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.txt 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
https://svn.apache.org/repos/asf/jackrabbit/dist/KEYS.

About Apache Jackrabbit
-----------------------

Apache Jackrabbit is a fully conforming implementation of the Content
Repository for Java Technology API (JCR). A content repository is a
hierarchical content store with support for structured and unstructured
content, full text search, versioning, transactions, observation, and
more.

For more information, visit http://jackrabbit.apache.org/

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/

Trademarks
----------

Apache Jackrabbit, Jackrabbit, Apache, the Apache feather logo, and the Apache
Jackrabbit project logo are trademarks of The Apache Software Foundation.
