Release Notes -- Apache Jackrabbit -- Version 2.21.26

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

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

Bug

    [JCR-5041] - Javadoc build is broken due to JCR 2.0 API docs being unavailable

Task

    [JCR-4902] - Update mockito dependency to 5.11.0
    [JCR-4977] - use 'beta' identifier for releases in unstable branch
    [JCR-5026] - standalone: remove remote repository support (RMI and JNDI)
    [JCR-5027] - jackrabbit-webapp: remove RMI support
    [JCR-5032] - jackrabbit-jcr-servlet: deprecate RMI support
    [JCR-5034] - set baseline comparisonVersion to latest stable (2.20.15)
    [JCR-5035] - Update tomcat dependency to 9.0.86
    [JCR-5037] - update aws java sdk version to 1.12.678
    [JCR-5038] - Update spotbugs-maven-plugin to 4.8.3.1
    [JCR-5039] - Update oak-jackrabbit-api.version.used in trunk and 2.20 to Oak 1.22.19
    [JCR-5040] - Update javacc-maven-plugin to version 3.1.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.

