Release Notes -- Apache Jackrabbit -- Version 2.21.9

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

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

Task

    [JCR-4734] - Update tomcat dependency to 8.5.72
    [JCR-4735] - webapp: update htmlunit dependency to 2.54.0
    [JCR-4736] - Update commons-cli dependency to 1.5
    [JCR-4737] - set baseline comparisonVersion to latest stable (2.20.4)
    [JCR-4738] - add tests for setPrimaryType() with expanded name
    [JCR-4739] - avoid use of deprecated API in NodeTypeTest
    [JCR-4740] - add test coverage for mandatory residual child nodes
    [JCR-4744] - Update Logback version to 1.2.7
    [JCR-4745] - Update tomcat dependency to 8.5.73
    [JCR-4746] - Update mockito dependency to 4.1.0
    [JCR-4747] - webapp: update htmlunit dependency to 2.55.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.
