Release Notes -- Apache Jackrabbit -- Version 2.21.12

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

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

Bug

    [JCR-4799] - jackrabbit.client.useSystemProperties undone by SSL config: client certificates no longer work
    [JCR-4814] - FileDataStore: File.renameTo sometimes fails to move temporary file to data record location

Task

    [JCR-4741] - add test coverage for mandatory non-residual child nodes
    [JCR-4804] - Update Tika dependency to 2.4.1
    [JCR-4805] - Update h2db dependency to 2.1.214
    [JCR-4806] - Update tomcat dependency to 8.5.81
    [JCR-4809] - set baseline comparisonVersion to latest stable (2.20.6)
    [JCR-4812] - Update Jackrabbit trunk to Oak 1.44.0
    [JCR-4815] - Update mockito dependency to 4.6.1
    [JCR-4816] - webapp: update htmlunit dependency to 2.63.0
    [JCR-4817] - Update aws java sdk version to 1.12.272
    [JCR-4818] - Update to jacoco version 0.8.8
    [JCR-4819] - Update spotbugs-maven-plugin to 4.7.1.1
    [JCR-4820] - Update maven-assembly-plugin to 3.4.2
    [JCR-4821] - Update javadoc-plugin dependency to 3.4.0
    [JCR-4822] - Update pmd-plugin dependency to 3.17.0
    [JCR-4823] - Update war-plugin dependency to 3.3.2
    [JCR-4824] - Update antrun plugin dependency to 3.1.0
    [JCR-4825] - Update to maven bundle plugin to 5.1.8
    [JCR-4826] - Update maven-jar-plugin to 3.2.2
    [JCR-4827] - Update animal-sniffer dependency to 1.21
    [JCR-4828] - Update build-helper-maven-plugin to version 3.3.0
    [JCR-4829] - Update com.google.guava to 31.1


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.
