Release Notes -- Apache Jackrabbit -- Version 2.21.5

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

This is Apache Jackrabbit(TM) 2.21.5, 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.21.5 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.20.x
release.

Changes in Jackrabbit 2.21.5
----------------------------

Bug

    [JCR-4663] - webdav: check Content-Range on PUT

Task

    [JCR-4650] - set baseline comparisonVersion to latest stable (2.20.2)
    [JCR-4651] - Update Jackrabbit trunk to Oak 1.36.0
    [JCR-4652] - Update tomcat dependency to 8.5.60
    [JCR-4653] - Update httpclient/mime dependencies to 4.5.13
    [JCR-4654] - webapp: update htmlunit dependency to 2.45.0
    [JCR-4655] - Update mockito dependency to 3.6.28
    [JCR-4656] - Upgrade Commons VFS to 2.7.0
    [JCR-4657] - Update Tika dependency to 1.25
    [JCR-4658] - Update httpcore dependency to 4.4.14
    [JCR-4659] - Update tomcat dependency to 8.5.61
    [JCR-4660] - update pmd-plugin dependency to 3.14.0
    [JCR-4661] - webapp: update htmlunit dependency to 2.46.0
    [JCR-4662] - it-osgi: update felix.framework to 7.0.0


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 an SHA512 checksum 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://www.apache.org/dist/jackrabbit/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.
