Release Notes -- Apache Jackrabbit -- Version 2.13.0

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

This is Apache Jackrabbit(TM) 2.13.0, 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.13.0 is an unstable release cut directly from
Jackrabbit trunk, with a focus on new features and other
improvements. For production use we recommend the latest stable 2.12.x
release.

Changes in Jackrabbit 2.13.0
----------------------------

Bug

    [JCR-2633] - Modified externally exception when modifying mixinTypes with single session
    [JCR-3632] - Test failed under Java 8
    [JCR-3937] - jackrabbit-jcr-commons bundle incorrectly has google dependency in Export-Package uses clause
    [JCR-3948] - LostFromCacheIssueTest failure
    [JCR-3949] - occasional test failure in RepositoryConfigTest.testAutomaticClusterNodeIdCreation()
    [JCR-3950] - CLONE - XSS in DirListingExportHandler
    [JCR-3958] - Endless loop until async upload completes
    [JCR-3965] - RepositoryStatistics is reset per second for bundle cache size which should not be the case for the bundle cache stats
    [JCR-3987] - jackrabbit-jcr-commons JcrUtils.getOrCreateByPath fails if session is not allowed to read root

Improvement

    [JCR-3938] - Require maven 3.x for build

New Feature

    [JCR-3983] - Possibility to parallelize the Garbage Collection

Test

    [JCR-3961] - Some tests in GetInfoTest do not save changes
    [JCR-3962] - NodeReorderTest waits for unexpected events
    [JCR-3963] - Reduce wait timeout for AddEventListenerTest.testNoLocalTrue()
    [JCR-3964] - Skip tests marked as known issues


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