Release Notes -- Apache Jackrabbit -- Version 2.21.6

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

This is Apache Jackrabbit(TM) 2.21.6, 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.6 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.6
----------------------------

Bug

    [JCR-4680] - ConstraintViolationException in VersionManagerImplRestore when target node has a property definition unknown by the frozen node

Improvement

    [JCR-4683] - add test coverage for restore that removes a mixin

Task

    [JCR-4634] - Jackrabbit should build and test with Java 16
    [JCR-4665] - Update Jackrabbit trunk to Oak 1.38.0
    [JCR-4666] - Update mockito dependency to 3.7.7
    [JCR-4668] - Update tomcat dependency to 8.5.63
    [JCR-4669] - update checkstyle-plugin dependency to 3.1.2
    [JCR-4672] - update junit dependency to 4.13.2
    [JCR-4673] - webapp: update htmlunit dependency to 2.47.1
    [JCR-4675] - Update mockito dependency to 3.8.0
    [JCR-4678] - Update tomcat dependency to 8.5.64
    [JCR-4682] - Upgrade Commons VFS to 2.8.0
    [JCR-4684] - Update Tika dependency to 1.26
    [JCR-4685] - webapp: update htmlunit dependency to 2.48.0
    [JCR-4687] - Update tomcat dependency to 8.5.65

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.
