
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


                        Apache Commons JCS
                        Version 3.0
                        Release Notes


INTRODUCTION:

This document contains the release notes for the 3.0 version of Apache Commons JCS.
Commons JCS is a distributed caching system written in Java. It is intend to speed up 
applications by providing a means to manage cached data of various dynamic natures.

JCS 3.0 and onwards now targets Java 8.0, making use of features that arrived with Java 8.0 
such as lambdas.

For the advice on upgrading from 2.x to 3.x, see the following page: 

    http://commons.apache.org/proper/commons-jcs/UpgradingFrom2x.html

Changes in this version include:

New features:
o JCS-46:   Add configuration option to specify the datagram 
            time-to-live in UDPDiscoverySender
o           Add configuration option to specify the network interface
            to use for UDP multicast
o JCS-166:  Add configuration option to specify the host to bind the
            LateralTCPListener to
o JCS-122:  Add a log abstraction layer for java.util.logging or log4j2
o           Add a get method to CacheAccess that allows a Supplier to be specified

Fixed Bugs:
o JCS-205:  Fix packaging
o JCS-199:  Properly shut down auxiliary caches
o JCS-182:  Fix NPE while closing data source
o JCS-201:  Fix initialization sequence

Changes:
o JCS-181:  Update dependency to httpclient 4.5.3
o           Update dependency commons-dbcp2
o           Finally require Java 8

Removed:
o JCS-122:  Remove dependency on commons-logging
o           Remove dependency on velocity-tools
o           Remove deprecated code

Historical list of changes: http://commons.apache.org/proper/commons-jcs/changes-report.html

For complete information on Apache Commons JCS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons JCS website:

http://commons.apache.org/proper/commons-jcs/