<commit_before><?xml version='1.0' encoding='UTF-8'?>
<!--
  ~ Copyright (c) 2008-2012, Hazelcast, Inc. All Rights Reserved.
  ~
  ~ Licensed 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.
  -->

<sect1 xml:id="ReleaseNotes" version='5.0' xmlns='http://docbook.org/ns/docbook'
       xmlns:xi="http://www.w3.org/2001/XInclude"
       xmlns:xlink="http://www.w3.org/1999/xlink"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd
       http://www.w3.org/1999/xlink http://www.w3.org/1999/xlink.xsd">
    <title>Release Notes</title>
    <para>Please see,
        <link xlink:href="#Todo">Todo</link>
        page for planned features.
    </para>

    <para>
        <emphasis role="bold">2.5</emphasis>
        <itemizedlist>
            <listitem>
                <para><emphasis role="italic">New Feature:</emphasis>
                    Java Client has now 'near-cache' support. See <link xlink:href="#NativeClientNearCache">Near Cache on Java Client</link>
                for additional details.</para>
            </listitem>
            <listitem>
                <para><emphasis role="italic">New Feature:</emphasis>
                    Management Center alert system, receive alerts based on custom filters. See
                    <link xlink:href="#NativeClientNearCache">Management Center Alert System</link>
                    for additional details.</para>
            </listitem>
            <listitem>
                <para>Management Center has now better support for Hazelcast cluster running in OSGI environment.</para>
            </listitem>
            <listitem>
                <para>Nodes can be easily shutdown or restarted using Management Center interface.</para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=17&amp;state=closed">
                    Fixed issues:</link></para>
                <para>377, 386, 389, 392, 394</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.4.1</emphasis>
        <itemizedlist>
            <listitem>
                <para>Added Hibernate 2nd level cache local/invalidation mode.
                    See <code>com.hazelcast.hibernate.HazelcastLocalCacheRegionFactory</code>.
                </para>
            </listitem>
            <listitem>
                <para>Added quick clear feature for maps.
                </para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=15&amp;state=closed">
                    Fixed issues:</link></para>
                <para>304, 308, 312, 315, 321, 322, 323, 328, 331, 333, 334, 337, 338, 339, 347, 349, 351,
                353, 354, 356, 359, 368</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.4</emphasis>
        <itemizedlist>
            <listitem>
                <para>Client threads is no longer fixed size,
                    now on it is going to use internal Hazelcast cached thread pool.
                </para>
            </listitem>
            <listitem>
                <para>Added ability to restrict outbound ports that Hazelcast uses to connect other nodes.
                    See <link xlink:href="#OutboundPorts">OutboundPorts</link> documentation.
                </para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=15&amp;state=closed">
                    Fixed issues:</link></para>
                <para>168, 251, 260, 262, 267, 268, 269, 270, 274, 275, 276, 277, 279, 282, 284, 288, 290, 292, 301</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.3.1</emphasis>
        <itemizedlist>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=13&amp;state=closed">
                    Fixed issues:</link></para>
                <para>256, 258</para>
            </listitem>
            <listitem>
                <para>Changed
                    <link xlink:href="#hazelcast.partition.migration.interval">
                        <code>hazelcast.partition.migration.interval</code>
                    </link>
                    value from 1 to 0.
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>ILock.newCondition()</code> now throws <code>UnsupportedOperationException</code>.
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.3</emphasis>
        <itemizedlist>
            <listitem>
                <para>Changed <link xlink:href="#hazelcast.max.operation.timeout">
                    <code>hazelcast.max.operation.timeout</code></link> unit from <emphasis>seconds</emphasis>
                     to <emphasis>milliseconds</emphasis>.</para>
            </listitem>
            <listitem>
                <para>Added <link xlink:href="#hazelcast.max.concurrent.operation.limit">
                    <code>hazelcast.max.concurrent.operation.limit</code></link> parameter to be able to limit
                    number of concurrent operations can be submitted to Hazelcast.</para>
            </listitem>
            <listitem>
                <para>
                    Added <link xlink:href="#hazelcast.backup.redo.enabled">
                        <code>hazelcast.backup.redo.enabled</code></link> parameter to enable/disable redo for
                    backup operations.
                </para>
            </listitem>
            <listitem>
                <para>Added <emphasis>MultiMap and Distributed ExecutorService statistics</emphasis> to
                    <link xlink:href="http://hazelcast.com/mancenter.jsp">Management Center</link> application.</para>
            </listitem>
            <listitem>
                <para>
                    <code>MigrationListener</code> has now an additional method to receive failed migration events;
                    <code>void migrationFailed(MigrationEvent migrationEvent)</code>.
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>ItemEvent</code> has now an additional method returning <literal>Member</literal> firing
                    that event; <code>public Member getMember()</code>.
                </para>
            </listitem>
            <listitem>
                <para>
                    Improved out of memory (OOM) error detection and handling. Now it is possible to register custom hook
                    when <code>OutOfMemoryError</code> is thrown.
                    See <code>Hazelcast.setOutOfMemoryHandler(OutOfMemoryHandler)</code> and <code>OutOfMemoryHandler</code>
                    javadocs for additional details.
                </para>
            </listitem>
            <listitem>
                <para>
                    Fixed some issues related to domain name handling and networking/join.
                </para>
            </listitem>
            <listitem>
                <para>
                    During cluster merge after a network split-brain, merging side will now fire <code>MERGING</code>
                    and <code>MERGED</code> before and after <code>RESTARTING</code> and <code>RESTARTED</code>
                    <code>LifecycleEvent</code>s.
                </para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=12&amp;state=closed">
                    Fixed issues:</link></para>
                <para>167, 182, 188, 209, 217, 218, 220, 222, 223, 225, 226, 227, 228, 229,
                    230, 233, 234, 235, 237, 241, 243, 244, 247, 250</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.2</emphasis>
        <itemizedlist>
            <listitem>
                <para>Improved redo logs and added max call/operation timeout. See configuration properties
                    <link xlink:href="#hazelcast.max.operation.timeout"><code>hazelcast.max.operation.timeout</code></link>
                    and <link xlink:href="#hazelcast.redo.giveup.threshold"><code>hazelcast.redo.giveup.threshold</code></link>
                    </para>
            </listitem>
            <listitem>
                <para>Improved domain name handling; Hazelcast will use defined addresses/domain-names in
                TCP-IP Config as they are, without resolving an IP address.</para>
            </listitem>
            <listitem>
                <para>Added <emphasis>Cluster Health Check</emphasis> to
                    <link xlink:href="http://hazelcast.com/mancenter.jsp">Management Center</link> application.</para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=5&amp;state=closed">
                    Fixed issues:</link></para>
                <para>39, 93, 152, 153, 163, 164, 169</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.1.3</emphasis>
        <itemizedlist>
            <listitem>
                <para>Fixed join and split brain issues. Improved domain name handling.</para>
            </listitem>
            <listitem>
                <para>Fixed host aware partition group when all members are lite but one.</para>
            </listitem>
            <listitem>
                <para>Fixed jmx management service dead-lock issue.</para>
            </listitem>
            <listitem>
                <para>Fixed IMap replace-if-same and and remove-if-same concurrency issues.</para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=7&amp;state=closed">Fixed issues:</link></para>
                <para>176, 177, 179, 181, 183, 185, 186, 189, 195, 196, 198</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.1.2</emphasis>
        <itemizedlist>
            <listitem>
                <para>Fixed interruption handling to avoid dead-locks and inconsistency.
                    See configuration property <code>hazelcast.force.throw.interrupted.exception</code>
                    in <link xlink:href="#ConfigurationProperties">ConfigurationProperties</link> page.</para>
            </listitem>
            <listitem>
                <para>Replaced ExecutorService used by migration process with a custom one.</para>
            </listitem>
            <listitem>
                <para>Fixed ExecutorService a memory leak during executor thread termination.</para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=6&amp;state=closed">Fixed issues:</link></para>
                <para>161, 174</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.1.1</emphasis>
        <itemizedlist>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=4&amp;state=closed">Fixed issues:</link></para>
                <para>73, 142, 146, 148, 149, 153, 158, 162, 163, 164</para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=3&amp;state=closed">
                    Fixed issues from 2.0.4 branch:</link></para>
                <para>96, 98, 131, 132, 135, 140, 166</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.1</emphasis>
        <itemizedlist>
            <listitem>
                <para><link xlink:href="#IPv6">IPv6 Support</link>: Hazelcast now supports IPv6 addresses seamlessly.
                </para>
            </listitem>

            <listitem>
                <para><link xlink:href="#MapBackup">Async backup support.</link>
                </para>
            </listitem>

            <listitem>
                <para><link xlink:href="#SpringCache">Spring Cache</link> support: Hazelcast can be used as
                    <link xlink:href="http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/cache.html">
                        Spring Cache
                    </link> provider.
                </para>
            </listitem>

            <listitem>
                <para><link xlink:href="#SpringContext">Spring Dependency Injection</link> support: Hazelcast can apply bean properties
                    or to apply factory callbacks such as <code>ApplicationContextAware</code>, <code>BeanNameAware</code>
                    or to apply bean post-processing such as <code>InitializingBean</code>, <code>@PostConstruct</code> like annotations
                    while using Hazelcast distributed <code>ExecutorService</code> or <code>DistributedTask</code>s or more
                    generally any Hazelcast managed object.
                </para>
            </listitem>

            <listitem>
                <para>Persistence support with Spring-Data <link xlink:href="#SpringMongoDB">MongoDB</link>
                    and <link xlink:href="#SpringJPA">JPA</link> integration.
                </para>
            </listitem>

            <listitem>
                <para>
                    <literal>Member.getUuid()</literal> will return UUID for node.
                </para>
            </listitem>

            <listitem>
                <para><link xlink:href="#HttpSessionClustering">Improved session clustering configuration.</link>
                </para>
            </listitem>

            <listitem>
                <para>Fixed issues:

                    <itemizedlist>
                        <listitem>
                            <para> <link xlink:href="http://code.google.com/p/hazelcast/issues/list">Google Code</link></para>
                            <para>809, 811, 816, 818</para>
                        </listitem>
                        <listitem>
                            <para> <link xlink:href="https://github.com/hazelcast/hazelcast/issues">Github</link></para>
                            <para>6, 7, 92, 98, 99, 101, 102, 103, 104, 108, 109, 110, 114, 116, 117, 118, 119, 120, 126, 127, 128,
                                130, 131, 132, 134, 135</para>
                        </listitem>
                    </itemizedlist>
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.0</emphasis>
        <itemizedlist>
            <listitem>
                <para>New Elastic Memory<superscript>(Enterprise Edition Only)</superscript>: By default, Hazelcast
                    stores your distributed data (map entries, queue items) into Java heap which is subject to garbage
                    collection. As your heap gets bigger, garbage collection might cause your application to pause tens
                    of seconds, badly effecting your application performance and response times. Elastic Memory is
                    Hazelcast with off-heap memory storage to avoid GC pauses. Even if you have terabytes of cache
                    in-memory with lots of updates, GC will have almost no effect; resulting in more predictable latency
                    and throughput.
                </para>
            </listitem>

            <listitem>
                <para>Security Framework<superscript>(Enterprise Edition Only)</superscript>: Hazelcast Security is JAAS
                    based pluggable security framework which can be used to authenticate both cluster members and
                    clients and do access control checks on client operations. With the security framework, take control
                    of who can be part of the cluster or connect as client and which operations are allowed or not.
                </para>
            </listitem>

            <listitem>
                <para>Native C# Client<superscript>(Enterprise Edition Only)</superscript>: Just like our Native Java
                    Client, it supports all map, multimap, queue, topic operations including listeners and queries.
                </para>
            </listitem>

            <listitem>
                <para>Distributed Backups: Data owned by a member will be evenly backed up by all the other members. In
                    other word, every member takes equal responsibility to backup every other node. This leads to better
                    memory usage and less influence in the cluster when you add/remove nodes. The new backup system
                    makes it possible to form backup-groups so that you can have backups and owners fall into different
                    groups.
                </para>
            </listitem>
            <listitem>
                <para>Parallel IO: Number of socket selector threads can be configured. You can have more IO threads, if
                    you have good number of CPU/cores and high-throughput network.
                </para>
            </listitem>
            <listitem>
                <para>Connection Management: Hazelcast 2.0 is more tolerant to connection failures. On connection
                    failure it tries to repair it
                    before declaring the member as dead. So now it is ok to have short socket disconnections… No problem
                    if your virtual server migrates to a new host.
                </para>
            </listitem>
            <listitem>
                <para>Listeners such as migration, membership and map indexes can be added with configuration.</para>
            </listitem>
            <listitem>
                <para>New Event Objects: Event Listeners for Queue/List/Set/Topic were delivering the item itself on
                    event methods. That’s
                    why the items had to be deserialized by Hazelcast Threads before invoking the listeners. Sometimes
                    this was causing class loader problems too. With 2.0, we have introduced new event containers for
                    Queue/List/Set and Topic just like Map has EntryEvent. The new listeners now receive ItemEvent and
                    Message objects respectively. The actual items are deserialized only if you call the appropriate get
                    method on the event objects. This is where we brake the compatibility with the older versions of
                    Hazelcast.
                </para>
            </listitem>
            <listitem>
                <para>ClientConfig API: We had too many of factory methods to instantiate a HazelcastClient. Now all we
                    need is<literal>HazelcastClient.newHazelcastClient(ClientConfig)</literal>.
                </para>
            </listitem>
            <listitem>
                <para>SSL communication support among cluster nodes.
                </para>
            </listitem>
            <listitem>
                <para>Distributed MultiMap value collection can be either List or Set.
                </para>
            </listitem>
            <listitem>
                <para>SuperClient is renamed to LiteMember to avoid confusion. Be careful! It is a member, not a
                    client.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>IMap.set (key, value, ttl, TimeUnit)</literal>
                    implementation, which is optimized
                    <literal>put(key, value)</literal>
                    operation as set doesn’t return the old value.
                </para>
            </listitem>

            <listitem>
                <para>
                    <literal>HazelcastInstance.getLifecycleService().kill()</literal>
                    will forcefully kill the node. Useful for testing.
                </para>
            </listitem>
            <listitem>
                <para><literal>forceUnlock</literal>, to unlock the locked entry from any node and any thread regardless
                    of the owner.
                </para>
            </listitem>
            <listitem>
                <para>Enum type query support..
                    <literal>new SqlPredicate (“level = Level.WARNING”)</literal>
                    for example
                </para>
            </listitem>
            <listitem>
                <para>Fixed issues: 430, 459, 471, 567, 574, 582, 629, 632, 646, 666, 686, 669, 690, 692, 693, 695, 698,
                    705, 708,
                    710, 711, 712, 713, 714, 715, 719 , 721, 722, 724, 727, 728, 729, 730, 731, 732, 733, 735, 738, 739,
                    740, 741, 742, 747,
                    751, 752, 754, 756, 758, 759, 760, 761, 765, 767, 770, 773, 779, 781, 782, 783, 787, 790, 795, 796
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">1.9.4</emphasis>
        <itemizedlist>
            <listitem>
                <para>New
                    <link xlink:href="#WanReplication">WAN Replication</link>
                    (synchronization of separate active clusters)
                </para>
            </listitem>
            <listitem>
                <para>New
                    <link xlink:href="#DataAffinity">Data Affinity</link>
                    (co-location of related entries) feature.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <link xlink:href="#EC2AutoDiscovery">EC2 Auto Discovery</link>
                    for your Hazelcast cluster
                    running on Amazon EC2 platform.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <link xlink:href="http://www.hazelcast.com/docs/1.9.4/javadoc/com/hazelcast/core/ICountDownLatch.html">
                        Distributed CountDownLatch implementation.
                    </link>
                </para>
            </listitem>
            <listitem>
                <para>New
                    <link xlink:href="http://www.hazelcast.com/docs/1.9.4/javadoc/com/hazelcast/core/ISemaphore.html">
                        Distributed Semaphore implementation.
                    </link>
                </para>
            </listitem>
            <listitem>
                <para>Improvement: Distribution contains HTML and PDF documentation besides Javadoc.</para>
            </listitem>
            <listitem>
                <para>Improvement: Better TCP/IP and multicast join support. Handling more edge cases like
                    multiple nodes starting at the same time.
                </para>
            </listitem>
            <listitem>
                <para>Improvement: Memcache protocol: Better integration between Java and Memcache clients.
                    Put from memcache, get from Java client.
                </para>
            </listitem>
            <listitem>
                <para>Monitoring Tool is removed from the project.</para>
            </listitem>
            <listitem>
                <para>200+ commits 25+ bug fixes and several other enhancements.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.9.3</emphasis>
        <itemizedlist>
            <listitem>
                <para>Re-implementation of distributed queue.
                    <itemizedlist>
                        <listitem>
                            <para>Configurable backup-count and synchronous backup.</para>
                        </listitem>
                        <listitem>
                            <para>Persistence support based on backing MapStore</para>
                        </listitem>
                        <listitem>
                            <para>Auto-recovery from backing MapStore on startup.</para>
                        </listitem>
                    </itemizedlist>
                </para>
            </listitem>
            <listitem>
                <para>Re-implementation of distributed list supporting index based operations.
                </para>
            </listitem>
            <listitem>
                <para>New distributed semaphore implementation.</para>
            </listitem>
            <listitem>
                <para>Optimized
                    <literal>IMap.putAll</literal>
                    for much faster bulk writes.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>IMap.getAll</literal>
                    for bulk reads which is calling
                    <literal>MapLoader.loadAll</literal>
                    if necessary.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>IMap.tryLockAndGet</literal>
                    and
                    <literal>IMap.putAndUnlock</literal>
                    API
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>IMap.putTransient</literal>
                    API for storing only in-memory.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>IMap.addLocalEntryListener()</literal>
                    for listening locally
                    owned entry events.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>IMap.flush()</literal>
                    for flushing the dirty entries into
                    MapStore.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>MapLoader.getAllKeys</literal>
                    API for auto-pre-populating the
                    map when cluster starts.
                </para>
            </listitem>
            <listitem>
                <para>Support for min. initial cluster size to enable equally partitioned start.
                </para>
            </listitem>
            <listitem>
                <para>Graceful shutdown.</para>
            </listitem>
            <listitem>
                <para>Faster dead-member detection.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.9</emphasis>
        <itemizedlist>
            <listitem>
                <para>Memcache interface support. Memcache clients written in any language can
                    access Hazelcast cluster.
                </para>
            </listitem>
            <listitem>
                <para>RESTful access support.
                    <code>http://&lt;ip&gt;:5701/hazelcast/rest/maps/mymap/key1</code>
                </para>
            </listitem>
            <listitem>
                <para>Split-brain (network partitioning) handling</para>
            </listitem>
            <listitem>
                <para>New LifecycleService API to restart, pause Hazelcast instances and listen for
                    the lifecycle events.
                </para>
            </listitem>
            <listitem>
                <para>New asynchronous put and get support for IMap via IMap.asyncPut() and
                    IMap.asyncGet()
                </para>
            </listitem>
            <listitem>
                <para>New AtomicNumber API; distributed implementation of
                    java.util.concurrent.atomic.AtomicLong
                </para>
            </listitem>
            <listitem>
                <para>So many bug fixes.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.8.4</emphasis>
        <itemizedlist>
            <listitem>
                <para>Significant performance gain for multi-core servers. Higher CPU utilization
                    and lower latency.
                </para>
            </listitem>
            <listitem>
                <para>Reduced the cost of map entries by 50%.</para>
            </listitem>
            <listitem>
                <para>Better thread management. No more idle threads.</para>
            </listitem>
            <listitem>
                <para>Queue Statistics API and the queue statistics panel on the Monitoring Tool.
                </para>
            </listitem>
            <listitem>
                <para>Monitoring Tool enhancements. More responsive and robust.</para>
            </listitem>
            <listitem>
                <para>Distribution contains hazelcast-all-&lt;version&gt;.jar to simplify jar
                    dependency.
                </para>
            </listitem>
            <listitem>
                <para>So many bug fixes.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.8.3</emphasis>
        <itemizedlist>
            <listitem>
                <para>Bug fixes</para>
            </listitem>
            <listitem>
                <para>Sorted index optimization for map queries.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.8.2</emphasis>
        <itemizedlist>
            <listitem>
                <para>A major bug fix</para>
            </listitem>
            <listitem>
                <para>Minor optimizations</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.8.1</emphasis>
        <itemizedlist>
            <listitem>
                <para>Hazelcast Cluster Monitoring Tool (see the hazelcast-monitor-1.8.1.war in the
                    distro)
                </para>
            </listitem>
            <listitem>
                <para>New Partition API. Partition and key owner, migration listeners.</para>
            </listitem>
            <listitem>
                <para>New IMap.lockMap() API.</para>
            </listitem>
            <listitem>
                <para>New Multicast+TCP/IP join feature. Try multicast first, if not found, try
                    tcp/ip.
                </para>
            </listitem>
            <listitem>
                <para>New Hazelcast.getExecutorService(name) API. Have separate named
                    ExecutorServices. Do not let your big tasks blocking your small ones.
                </para>
            </listitem>
            <listitem>
                <para>New Logging API. Build your own logging. or simply use Log4j or get logs as
                    LogEvents.
                </para>
            </listitem>
            <listitem>
                <para>New MapStatistics API. Get statistics for your Map operations and entries.
                </para>
            </listitem>
            <listitem>
                <para>HazelcastClient automatically updates the member list. no need to pass all
                    members.
                </para>
            </listitem>
            <listitem>
                <para>Ability to start the cluster members evenly partitioned. so no migration.
                </para>
            </listitem>
            <listitem>
                <para>So many bug fixes and enhancements.</para>
            </listitem>
            <listitem>
                <para>There are some minor Config API change. Just make sure to re-compile.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.8</emphasis>
        <itemizedlist>
            <listitem>
                <para>Java clients for accessing the cluster remotely. (C# is next)</para>
            </listitem>
            <listitem>
                <para>Distributed Query for maps. Both Criteria API and SQL support.</para>
            </listitem>
            <listitem>
                <para>Near cache for distributed maps.</para>
            </listitem>
            <listitem>
                <para>TTL (time-to-live) for each individual map entry.</para>
            </listitem>
            <listitem>
                <para>IMap.put(key,value, ttl, timeunit)</para>
            </listitem>
            <listitem>
                <para>IMap.putIfAbsent(key,value, ttl, timeunit)</para>
            </listitem>
            <listitem>
                <para>Many bug fixes.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.7.1</emphasis>
        <itemizedlist>
            <listitem>
                <para>Multiple Hazelcast members on the same JVM. New
                    <literal>HazelcastInstance</literal>
                    API.
                </para>
            </listitem>
            <listitem>
                <para>Better API based configuration support.</para>
            </listitem>
            <listitem>
                <para>Many performance optimizations. Fastest Hazelcast ever!</para>
            </listitem>
            <listitem>
                <para>Smoother data migration enables better response times during joins.</para>
            </listitem>
            <listitem>
                <para>Many bug fixes.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.7</emphasis>
        <itemizedlist>
            <listitem>
                <para>Persistence via Loader/Store interface for distributed map.</para>
            </listitem>
            <listitem>
                <para>Socket level encryption. Both symmetric and asymmetric encryption supported.
                </para>
            </listitem>
            <listitem>
                <para>New JMX support. (many thanks to Marco)</para>
            </listitem>
            <listitem>
                <para>New Hibernate second level cache provider (many thanks to Leo)</para>
            </listitem>
            <listitem>
                <para>Instance events for getting notified when a data structure instance (map,
                    queue, topic etc.) is created or destroyed.
                </para>
            </listitem>
            <listitem>
                <para>Eviction listener.
                    <literal>EntryListener.entryEvicted(EntryEvent)</literal>
                </para>
            </listitem>
            <listitem>
                <para>Fully 'maven'ized.</para>
            </listitem>
            <listitem>
                <para>Modularized...</para>
            </listitem>
            <listitem>
                <para>hazelcast (core library)</para>
            </listitem>
            <listitem>
                <para>hazelcast-wm (http session clustering tool)</para>
            </listitem>
            <listitem>
                <para>hazelcast-ra (JCA adaptor)</para>
            </listitem>
            <listitem>
                <para>hazelcast-hibernate (hibernate cache provider)</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.6</emphasis>
        <itemizedlist>
            <listitem>
                <para>Support for synchronous backups and configurable backup-count for maps.
                </para>
            </listitem>
            <listitem>
                <para>Eviction support. Timed eviction for queues. LRU, LFU and time based eviction
                    for maps.
                </para>
            </listitem>
            <listitem>
                <para>Statistics/history for entries. create/update time, number of hits, cost. see
                    <literal>IMap.getMapEntry(key)</literal>
                </para>
            </listitem>
            <listitem>
                <para>
                    <literal>MultiMap</literal>
                    implementation. similar to google-collections and
                    apache-common-collections
                    <literal>MultiMap</literal>
                    but distributed and
                    thread-safe.
                </para>
            </listitem>
            <listitem>
                <para>Being able to
                    <literal>destroy()</literal>
                    the data structures when not needed
                    anymore.
                </para>
            </listitem>
            <listitem>
                <para>Being able to Hazelcast.shutdown() the local member.</para>
            </listitem>
            <listitem>
                <para>Get the list of all data structure instances
                    via<literal>Hazelcast.getInstances()</literal>.
                </para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.5</emphasis>
        <itemizedlist>
            <listitem>
                <para>Major internal refactoring</para>
            </listitem>
            <listitem>
                <para>Full implementation of<literal>java.util.concurrent.BlockingQueue</literal>.
                    Now queues can have configurable capacity limits.
                </para>
            </listitem>
            <listitem>
                <para>Super Clients (a.k.a LiteMember): Members with no storage. If
                    <literal>-Dhazelcast.super.client=true</literal>
                    JVM parameter is set, that
                    JVM will join the cluster as a 'super client' which will not be a 'data
                    partition' (no data on that node) but will have super fast access to the cluster
                    just like any regular member does.
                </para>
            </listitem>
            <listitem>
                <para>Http Session sharing support for Hazelcast Web Manager. Different webapps can
                    share the same sessions.
                </para>
            </listitem>
            <listitem>
                <para>Ability to separate clusters by creating groups.
                    <link xlink:href="#ConfigGroup">ConfigGroup</link>
                </para>
            </listitem>
            <listitem>
                <para>
                    <literal>java.util.logging</literal>
                    support.
                </para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.4</emphasis>
        <itemizedlist>
            <listitem>
                <para>Add, remove and update events for queue, map, set and list</para>
            </listitem>
            <listitem>
                <para>Distributed Topic for pub/sub messaging</para>
            </listitem>
            <listitem>
                <para>Integration with J2EE transactions via JCA complaint resource adapter</para>
            </listitem>
            <listitem>
                <para>
                    <link xlink:href="#ExecutionCallback">ExecutionCallback</link>
                    interface for distributed tasks
                </para>
            </listitem>
            <listitem>
                <para>Cluster-wide unique id generator</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.3</emphasis>
        <itemizedlist>
            <listitem>
                <para>Transactional Distributed Queue, Map, Set and List</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.2</emphasis>
        <itemizedlist>
            <listitem>
                <para>Distributed Executor Service</para>
            </listitem>
            <listitem>
                <para>Multi member executions</para>
            </listitem>
            <listitem>
                <para>Key based execution routing</para>
            </listitem>
            <listitem>
                <para>Task cancellation support</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.1</emphasis>
        <itemizedlist>
            <listitem>
                <para>Session Clustering with Hazelcast Webapp Manager</para>
            </listitem>
            <listitem>
                <para>Full TCP/IP clustering support</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.0</emphasis>
        <itemizedlist>
            <listitem>
                <para>Distributed implementation of java.util.{Queue,Map,Set,List}</para>
            </listitem>
            <listitem>
                <para>Distributed implementation of java.util.concurrency.Lock</para>
            </listitem>
            <listitem>
                <para>Cluster Membership Events</para>
            </listitem>
        </itemizedlist>
    </para>
</sect1>
<commit_msg>2.5 release notes, alert system.<commit_after><?xml version='1.0' encoding='UTF-8'?>
<!--
  ~ Copyright (c) 2008-2012, Hazelcast, Inc. All Rights Reserved.
  ~
  ~ Licensed 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.
  -->

<sect1 xml:id="ReleaseNotes" version='5.0' xmlns='http://docbook.org/ns/docbook'
       xmlns:xi="http://www.w3.org/2001/XInclude"
       xmlns:xlink="http://www.w3.org/1999/xlink"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd
       http://www.w3.org/1999/xlink http://www.w3.org/1999/xlink.xsd">
    <title>Release Notes</title>
    <para>Please see,
        <link xlink:href="#Todo">Todo</link>
        page for planned features.
    </para>

    <para>
        <emphasis role="bold">2.5</emphasis>
        <itemizedlist>
            <listitem>
                <para><emphasis role="italic">New Feature:</emphasis>
                    Java Client has now 'near-cache' support. See <link xlink:href="#NativeClientNearCache">Near Cache on Java Client</link>
                for additional details.</para>
            </listitem>
            <listitem>
                <para><emphasis role="italic">New Feature:</emphasis>
                    Management Center alert system, receive alerts based on custom filters. See
                    <link xlink:href="#MC_Alerts">Management Center Alerting System</link>
                    for additional details.</para>
            </listitem>
            <listitem>
                <para>Management Center has now better support for Hazelcast cluster running in OSGI environment.</para>
            </listitem>
            <listitem>
                <para>Nodes can be easily shutdown or restarted using Management Center interface.</para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=17&amp;state=closed">
                    Fixed issues:</link></para>
                <para>377, 386, 389, 392, 394</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.4.1</emphasis>
        <itemizedlist>
            <listitem>
                <para>Added Hibernate 2nd level cache local/invalidation mode.
                    See <code>com.hazelcast.hibernate.HazelcastLocalCacheRegionFactory</code>.
                </para>
            </listitem>
            <listitem>
                <para>Added quick clear feature for maps.
                </para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=15&amp;state=closed">
                    Fixed issues:</link></para>
                <para>304, 308, 312, 315, 321, 322, 323, 328, 331, 333, 334, 337, 338, 339, 347, 349, 351,
                353, 354, 356, 359, 368</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.4</emphasis>
        <itemizedlist>
            <listitem>
                <para>Client threads is no longer fixed size,
                    now on it is going to use internal Hazelcast cached thread pool.
                </para>
            </listitem>
            <listitem>
                <para>Added ability to restrict outbound ports that Hazelcast uses to connect other nodes.
                    See <link xlink:href="#OutboundPorts">OutboundPorts</link> documentation.
                </para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=15&amp;state=closed">
                    Fixed issues:</link></para>
                <para>168, 251, 260, 262, 267, 268, 269, 270, 274, 275, 276, 277, 279, 282, 284, 288, 290, 292, 301</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.3.1</emphasis>
        <itemizedlist>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=13&amp;state=closed">
                    Fixed issues:</link></para>
                <para>256, 258</para>
            </listitem>
            <listitem>
                <para>Changed
                    <link xlink:href="#hazelcast.partition.migration.interval">
                        <code>hazelcast.partition.migration.interval</code>
                    </link>
                    value from 1 to 0.
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>ILock.newCondition()</code> now throws <code>UnsupportedOperationException</code>.
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.3</emphasis>
        <itemizedlist>
            <listitem>
                <para>Changed <link xlink:href="#hazelcast.max.operation.timeout">
                    <code>hazelcast.max.operation.timeout</code></link> unit from <emphasis>seconds</emphasis>
                     to <emphasis>milliseconds</emphasis>.</para>
            </listitem>
            <listitem>
                <para>Added <link xlink:href="#hazelcast.max.concurrent.operation.limit">
                    <code>hazelcast.max.concurrent.operation.limit</code></link> parameter to be able to limit
                    number of concurrent operations can be submitted to Hazelcast.</para>
            </listitem>
            <listitem>
                <para>
                    Added <link xlink:href="#hazelcast.backup.redo.enabled">
                        <code>hazelcast.backup.redo.enabled</code></link> parameter to enable/disable redo for
                    backup operations.
                </para>
            </listitem>
            <listitem>
                <para>Added <emphasis>MultiMap and Distributed ExecutorService statistics</emphasis> to
                    <link xlink:href="http://hazelcast.com/mancenter.jsp">Management Center</link> application.</para>
            </listitem>
            <listitem>
                <para>
                    <code>MigrationListener</code> has now an additional method to receive failed migration events;
                    <code>void migrationFailed(MigrationEvent migrationEvent)</code>.
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>ItemEvent</code> has now an additional method returning <literal>Member</literal> firing
                    that event; <code>public Member getMember()</code>.
                </para>
            </listitem>
            <listitem>
                <para>
                    Improved out of memory (OOM) error detection and handling. Now it is possible to register custom hook
                    when <code>OutOfMemoryError</code> is thrown.
                    See <code>Hazelcast.setOutOfMemoryHandler(OutOfMemoryHandler)</code> and <code>OutOfMemoryHandler</code>
                    javadocs for additional details.
                </para>
            </listitem>
            <listitem>
                <para>
                    Fixed some issues related to domain name handling and networking/join.
                </para>
            </listitem>
            <listitem>
                <para>
                    During cluster merge after a network split-brain, merging side will now fire <code>MERGING</code>
                    and <code>MERGED</code> before and after <code>RESTARTING</code> and <code>RESTARTED</code>
                    <code>LifecycleEvent</code>s.
                </para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=12&amp;state=closed">
                    Fixed issues:</link></para>
                <para>167, 182, 188, 209, 217, 218, 220, 222, 223, 225, 226, 227, 228, 229,
                    230, 233, 234, 235, 237, 241, 243, 244, 247, 250</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.2</emphasis>
        <itemizedlist>
            <listitem>
                <para>Improved redo logs and added max call/operation timeout. See configuration properties
                    <link xlink:href="#hazelcast.max.operation.timeout"><code>hazelcast.max.operation.timeout</code></link>
                    and <link xlink:href="#hazelcast.redo.giveup.threshold"><code>hazelcast.redo.giveup.threshold</code></link>
                    </para>
            </listitem>
            <listitem>
                <para>Improved domain name handling; Hazelcast will use defined addresses/domain-names in
                TCP-IP Config as they are, without resolving an IP address.</para>
            </listitem>
            <listitem>
                <para>Added <emphasis>Cluster Health Check</emphasis> to
                    <link xlink:href="http://hazelcast.com/mancenter.jsp">Management Center</link> application.</para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=5&amp;state=closed">
                    Fixed issues:</link></para>
                <para>39, 93, 152, 153, 163, 164, 169</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.1.3</emphasis>
        <itemizedlist>
            <listitem>
                <para>Fixed join and split brain issues. Improved domain name handling.</para>
            </listitem>
            <listitem>
                <para>Fixed host aware partition group when all members are lite but one.</para>
            </listitem>
            <listitem>
                <para>Fixed jmx management service dead-lock issue.</para>
            </listitem>
            <listitem>
                <para>Fixed IMap replace-if-same and and remove-if-same concurrency issues.</para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=7&amp;state=closed">Fixed issues:</link></para>
                <para>176, 177, 179, 181, 183, 185, 186, 189, 195, 196, 198</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.1.2</emphasis>
        <itemizedlist>
            <listitem>
                <para>Fixed interruption handling to avoid dead-locks and inconsistency.
                    See configuration property <code>hazelcast.force.throw.interrupted.exception</code>
                    in <link xlink:href="#ConfigurationProperties">ConfigurationProperties</link> page.</para>
            </listitem>
            <listitem>
                <para>Replaced ExecutorService used by migration process with a custom one.</para>
            </listitem>
            <listitem>
                <para>Fixed ExecutorService a memory leak during executor thread termination.</para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=6&amp;state=closed">Fixed issues:</link></para>
                <para>161, 174</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.1.1</emphasis>
        <itemizedlist>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=4&amp;state=closed">Fixed issues:</link></para>
                <para>73, 142, 146, 148, 149, 153, 158, 162, 163, 164</para>
            </listitem>
            <listitem>
                <para><link xlink:href="https://github.com/hazelcast/hazelcast/issues?milestone=3&amp;state=closed">
                    Fixed issues from 2.0.4 branch:</link></para>
                <para>96, 98, 131, 132, 135, 140, 166</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.1</emphasis>
        <itemizedlist>
            <listitem>
                <para><link xlink:href="#IPv6">IPv6 Support</link>: Hazelcast now supports IPv6 addresses seamlessly.
                </para>
            </listitem>

            <listitem>
                <para><link xlink:href="#MapBackup">Async backup support.</link>
                </para>
            </listitem>

            <listitem>
                <para><link xlink:href="#SpringCache">Spring Cache</link> support: Hazelcast can be used as
                    <link xlink:href="http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/cache.html">
                        Spring Cache
                    </link> provider.
                </para>
            </listitem>

            <listitem>
                <para><link xlink:href="#SpringContext">Spring Dependency Injection</link> support: Hazelcast can apply bean properties
                    or to apply factory callbacks such as <code>ApplicationContextAware</code>, <code>BeanNameAware</code>
                    or to apply bean post-processing such as <code>InitializingBean</code>, <code>@PostConstruct</code> like annotations
                    while using Hazelcast distributed <code>ExecutorService</code> or <code>DistributedTask</code>s or more
                    generally any Hazelcast managed object.
                </para>
            </listitem>

            <listitem>
                <para>Persistence support with Spring-Data <link xlink:href="#SpringMongoDB">MongoDB</link>
                    and <link xlink:href="#SpringJPA">JPA</link> integration.
                </para>
            </listitem>

            <listitem>
                <para>
                    <literal>Member.getUuid()</literal> will return UUID for node.
                </para>
            </listitem>

            <listitem>
                <para><link xlink:href="#HttpSessionClustering">Improved session clustering configuration.</link>
                </para>
            </listitem>

            <listitem>
                <para>Fixed issues:

                    <itemizedlist>
                        <listitem>
                            <para> <link xlink:href="http://code.google.com/p/hazelcast/issues/list">Google Code</link></para>
                            <para>809, 811, 816, 818</para>
                        </listitem>
                        <listitem>
                            <para> <link xlink:href="https://github.com/hazelcast/hazelcast/issues">Github</link></para>
                            <para>6, 7, 92, 98, 99, 101, 102, 103, 104, 108, 109, 110, 114, 116, 117, 118, 119, 120, 126, 127, 128,
                                130, 131, 132, 134, 135</para>
                        </listitem>
                    </itemizedlist>
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">2.0</emphasis>
        <itemizedlist>
            <listitem>
                <para>New Elastic Memory<superscript>(Enterprise Edition Only)</superscript>: By default, Hazelcast
                    stores your distributed data (map entries, queue items) into Java heap which is subject to garbage
                    collection. As your heap gets bigger, garbage collection might cause your application to pause tens
                    of seconds, badly effecting your application performance and response times. Elastic Memory is
                    Hazelcast with off-heap memory storage to avoid GC pauses. Even if you have terabytes of cache
                    in-memory with lots of updates, GC will have almost no effect; resulting in more predictable latency
                    and throughput.
                </para>
            </listitem>

            <listitem>
                <para>Security Framework<superscript>(Enterprise Edition Only)</superscript>: Hazelcast Security is JAAS
                    based pluggable security framework which can be used to authenticate both cluster members and
                    clients and do access control checks on client operations. With the security framework, take control
                    of who can be part of the cluster or connect as client and which operations are allowed or not.
                </para>
            </listitem>

            <listitem>
                <para>Native C# Client<superscript>(Enterprise Edition Only)</superscript>: Just like our Native Java
                    Client, it supports all map, multimap, queue, topic operations including listeners and queries.
                </para>
            </listitem>

            <listitem>
                <para>Distributed Backups: Data owned by a member will be evenly backed up by all the other members. In
                    other word, every member takes equal responsibility to backup every other node. This leads to better
                    memory usage and less influence in the cluster when you add/remove nodes. The new backup system
                    makes it possible to form backup-groups so that you can have backups and owners fall into different
                    groups.
                </para>
            </listitem>
            <listitem>
                <para>Parallel IO: Number of socket selector threads can be configured. You can have more IO threads, if
                    you have good number of CPU/cores and high-throughput network.
                </para>
            </listitem>
            <listitem>
                <para>Connection Management: Hazelcast 2.0 is more tolerant to connection failures. On connection
                    failure it tries to repair it
                    before declaring the member as dead. So now it is ok to have short socket disconnections… No problem
                    if your virtual server migrates to a new host.
                </para>
            </listitem>
            <listitem>
                <para>Listeners such as migration, membership and map indexes can be added with configuration.</para>
            </listitem>
            <listitem>
                <para>New Event Objects: Event Listeners for Queue/List/Set/Topic were delivering the item itself on
                    event methods. That’s
                    why the items had to be deserialized by Hazelcast Threads before invoking the listeners. Sometimes
                    this was causing class loader problems too. With 2.0, we have introduced new event containers for
                    Queue/List/Set and Topic just like Map has EntryEvent. The new listeners now receive ItemEvent and
                    Message objects respectively. The actual items are deserialized only if you call the appropriate get
                    method on the event objects. This is where we brake the compatibility with the older versions of
                    Hazelcast.
                </para>
            </listitem>
            <listitem>
                <para>ClientConfig API: We had too many of factory methods to instantiate a HazelcastClient. Now all we
                    need is<literal>HazelcastClient.newHazelcastClient(ClientConfig)</literal>.
                </para>
            </listitem>
            <listitem>
                <para>SSL communication support among cluster nodes.
                </para>
            </listitem>
            <listitem>
                <para>Distributed MultiMap value collection can be either List or Set.
                </para>
            </listitem>
            <listitem>
                <para>SuperClient is renamed to LiteMember to avoid confusion. Be careful! It is a member, not a
                    client.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>IMap.set (key, value, ttl, TimeUnit)</literal>
                    implementation, which is optimized
                    <literal>put(key, value)</literal>
                    operation as set doesn’t return the old value.
                </para>
            </listitem>

            <listitem>
                <para>
                    <literal>HazelcastInstance.getLifecycleService().kill()</literal>
                    will forcefully kill the node. Useful for testing.
                </para>
            </listitem>
            <listitem>
                <para><literal>forceUnlock</literal>, to unlock the locked entry from any node and any thread regardless
                    of the owner.
                </para>
            </listitem>
            <listitem>
                <para>Enum type query support..
                    <literal>new SqlPredicate (“level = Level.WARNING”)</literal>
                    for example
                </para>
            </listitem>
            <listitem>
                <para>Fixed issues: 430, 459, 471, 567, 574, 582, 629, 632, 646, 666, 686, 669, 690, 692, 693, 695, 698,
                    705, 708,
                    710, 711, 712, 713, 714, 715, 719 , 721, 722, 724, 727, 728, 729, 730, 731, 732, 733, 735, 738, 739,
                    740, 741, 742, 747,
                    751, 752, 754, 756, 758, 759, 760, 761, 765, 767, 770, 773, 779, 781, 782, 783, 787, 790, 795, 796
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <emphasis role="bold">1.9.4</emphasis>
        <itemizedlist>
            <listitem>
                <para>New
                    <link xlink:href="#WanReplication">WAN Replication</link>
                    (synchronization of separate active clusters)
                </para>
            </listitem>
            <listitem>
                <para>New
                    <link xlink:href="#DataAffinity">Data Affinity</link>
                    (co-location of related entries) feature.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <link xlink:href="#EC2AutoDiscovery">EC2 Auto Discovery</link>
                    for your Hazelcast cluster
                    running on Amazon EC2 platform.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <link xlink:href="http://www.hazelcast.com/docs/1.9.4/javadoc/com/hazelcast/core/ICountDownLatch.html">
                        Distributed CountDownLatch implementation.
                    </link>
                </para>
            </listitem>
            <listitem>
                <para>New
                    <link xlink:href="http://www.hazelcast.com/docs/1.9.4/javadoc/com/hazelcast/core/ISemaphore.html">
                        Distributed Semaphore implementation.
                    </link>
                </para>
            </listitem>
            <listitem>
                <para>Improvement: Distribution contains HTML and PDF documentation besides Javadoc.</para>
            </listitem>
            <listitem>
                <para>Improvement: Better TCP/IP and multicast join support. Handling more edge cases like
                    multiple nodes starting at the same time.
                </para>
            </listitem>
            <listitem>
                <para>Improvement: Memcache protocol: Better integration between Java and Memcache clients.
                    Put from memcache, get from Java client.
                </para>
            </listitem>
            <listitem>
                <para>Monitoring Tool is removed from the project.</para>
            </listitem>
            <listitem>
                <para>200+ commits 25+ bug fixes and several other enhancements.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.9.3</emphasis>
        <itemizedlist>
            <listitem>
                <para>Re-implementation of distributed queue.
                    <itemizedlist>
                        <listitem>
                            <para>Configurable backup-count and synchronous backup.</para>
                        </listitem>
                        <listitem>
                            <para>Persistence support based on backing MapStore</para>
                        </listitem>
                        <listitem>
                            <para>Auto-recovery from backing MapStore on startup.</para>
                        </listitem>
                    </itemizedlist>
                </para>
            </listitem>
            <listitem>
                <para>Re-implementation of distributed list supporting index based operations.
                </para>
            </listitem>
            <listitem>
                <para>New distributed semaphore implementation.</para>
            </listitem>
            <listitem>
                <para>Optimized
                    <literal>IMap.putAll</literal>
                    for much faster bulk writes.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>IMap.getAll</literal>
                    for bulk reads which is calling
                    <literal>MapLoader.loadAll</literal>
                    if necessary.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>IMap.tryLockAndGet</literal>
                    and
                    <literal>IMap.putAndUnlock</literal>
                    API
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>IMap.putTransient</literal>
                    API for storing only in-memory.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>IMap.addLocalEntryListener()</literal>
                    for listening locally
                    owned entry events.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>IMap.flush()</literal>
                    for flushing the dirty entries into
                    MapStore.
                </para>
            </listitem>
            <listitem>
                <para>New
                    <literal>MapLoader.getAllKeys</literal>
                    API for auto-pre-populating the
                    map when cluster starts.
                </para>
            </listitem>
            <listitem>
                <para>Support for min. initial cluster size to enable equally partitioned start.
                </para>
            </listitem>
            <listitem>
                <para>Graceful shutdown.</para>
            </listitem>
            <listitem>
                <para>Faster dead-member detection.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.9</emphasis>
        <itemizedlist>
            <listitem>
                <para>Memcache interface support. Memcache clients written in any language can
                    access Hazelcast cluster.
                </para>
            </listitem>
            <listitem>
                <para>RESTful access support.
                    <code>http://&lt;ip&gt;:5701/hazelcast/rest/maps/mymap/key1</code>
                </para>
            </listitem>
            <listitem>
                <para>Split-brain (network partitioning) handling</para>
            </listitem>
            <listitem>
                <para>New LifecycleService API to restart, pause Hazelcast instances and listen for
                    the lifecycle events.
                </para>
            </listitem>
            <listitem>
                <para>New asynchronous put and get support for IMap via IMap.asyncPut() and
                    IMap.asyncGet()
                </para>
            </listitem>
            <listitem>
                <para>New AtomicNumber API; distributed implementation of
                    java.util.concurrent.atomic.AtomicLong
                </para>
            </listitem>
            <listitem>
                <para>So many bug fixes.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.8.4</emphasis>
        <itemizedlist>
            <listitem>
                <para>Significant performance gain for multi-core servers. Higher CPU utilization
                    and lower latency.
                </para>
            </listitem>
            <listitem>
                <para>Reduced the cost of map entries by 50%.</para>
            </listitem>
            <listitem>
                <para>Better thread management. No more idle threads.</para>
            </listitem>
            <listitem>
                <para>Queue Statistics API and the queue statistics panel on the Monitoring Tool.
                </para>
            </listitem>
            <listitem>
                <para>Monitoring Tool enhancements. More responsive and robust.</para>
            </listitem>
            <listitem>
                <para>Distribution contains hazelcast-all-&lt;version&gt;.jar to simplify jar
                    dependency.
                </para>
            </listitem>
            <listitem>
                <para>So many bug fixes.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.8.3</emphasis>
        <itemizedlist>
            <listitem>
                <para>Bug fixes</para>
            </listitem>
            <listitem>
                <para>Sorted index optimization for map queries.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.8.2</emphasis>
        <itemizedlist>
            <listitem>
                <para>A major bug fix</para>
            </listitem>
            <listitem>
                <para>Minor optimizations</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.8.1</emphasis>
        <itemizedlist>
            <listitem>
                <para>Hazelcast Cluster Monitoring Tool (see the hazelcast-monitor-1.8.1.war in the
                    distro)
                </para>
            </listitem>
            <listitem>
                <para>New Partition API. Partition and key owner, migration listeners.</para>
            </listitem>
            <listitem>
                <para>New IMap.lockMap() API.</para>
            </listitem>
            <listitem>
                <para>New Multicast+TCP/IP join feature. Try multicast first, if not found, try
                    tcp/ip.
                </para>
            </listitem>
            <listitem>
                <para>New Hazelcast.getExecutorService(name) API. Have separate named
                    ExecutorServices. Do not let your big tasks blocking your small ones.
                </para>
            </listitem>
            <listitem>
                <para>New Logging API. Build your own logging. or simply use Log4j or get logs as
                    LogEvents.
                </para>
            </listitem>
            <listitem>
                <para>New MapStatistics API. Get statistics for your Map operations and entries.
                </para>
            </listitem>
            <listitem>
                <para>HazelcastClient automatically updates the member list. no need to pass all
                    members.
                </para>
            </listitem>
            <listitem>
                <para>Ability to start the cluster members evenly partitioned. so no migration.
                </para>
            </listitem>
            <listitem>
                <para>So many bug fixes and enhancements.</para>
            </listitem>
            <listitem>
                <para>There are some minor Config API change. Just make sure to re-compile.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.8</emphasis>
        <itemizedlist>
            <listitem>
                <para>Java clients for accessing the cluster remotely. (C# is next)</para>
            </listitem>
            <listitem>
                <para>Distributed Query for maps. Both Criteria API and SQL support.</para>
            </listitem>
            <listitem>
                <para>Near cache for distributed maps.</para>
            </listitem>
            <listitem>
                <para>TTL (time-to-live) for each individual map entry.</para>
            </listitem>
            <listitem>
                <para>IMap.put(key,value, ttl, timeunit)</para>
            </listitem>
            <listitem>
                <para>IMap.putIfAbsent(key,value, ttl, timeunit)</para>
            </listitem>
            <listitem>
                <para>Many bug fixes.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.7.1</emphasis>
        <itemizedlist>
            <listitem>
                <para>Multiple Hazelcast members on the same JVM. New
                    <literal>HazelcastInstance</literal>
                    API.
                </para>
            </listitem>
            <listitem>
                <para>Better API based configuration support.</para>
            </listitem>
            <listitem>
                <para>Many performance optimizations. Fastest Hazelcast ever!</para>
            </listitem>
            <listitem>
                <para>Smoother data migration enables better response times during joins.</para>
            </listitem>
            <listitem>
                <para>Many bug fixes.</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.7</emphasis>
        <itemizedlist>
            <listitem>
                <para>Persistence via Loader/Store interface for distributed map.</para>
            </listitem>
            <listitem>
                <para>Socket level encryption. Both symmetric and asymmetric encryption supported.
                </para>
            </listitem>
            <listitem>
                <para>New JMX support. (many thanks to Marco)</para>
            </listitem>
            <listitem>
                <para>New Hibernate second level cache provider (many thanks to Leo)</para>
            </listitem>
            <listitem>
                <para>Instance events for getting notified when a data structure instance (map,
                    queue, topic etc.) is created or destroyed.
                </para>
            </listitem>
            <listitem>
                <para>Eviction listener.
                    <literal>EntryListener.entryEvicted(EntryEvent)</literal>
                </para>
            </listitem>
            <listitem>
                <para>Fully 'maven'ized.</para>
            </listitem>
            <listitem>
                <para>Modularized...</para>
            </listitem>
            <listitem>
                <para>hazelcast (core library)</para>
            </listitem>
            <listitem>
                <para>hazelcast-wm (http session clustering tool)</para>
            </listitem>
            <listitem>
                <para>hazelcast-ra (JCA adaptor)</para>
            </listitem>
            <listitem>
                <para>hazelcast-hibernate (hibernate cache provider)</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.6</emphasis>
        <itemizedlist>
            <listitem>
                <para>Support for synchronous backups and configurable backup-count for maps.
                </para>
            </listitem>
            <listitem>
                <para>Eviction support. Timed eviction for queues. LRU, LFU and time based eviction
                    for maps.
                </para>
            </listitem>
            <listitem>
                <para>Statistics/history for entries. create/update time, number of hits, cost. see
                    <literal>IMap.getMapEntry(key)</literal>
                </para>
            </listitem>
            <listitem>
                <para>
                    <literal>MultiMap</literal>
                    implementation. similar to google-collections and
                    apache-common-collections
                    <literal>MultiMap</literal>
                    but distributed and
                    thread-safe.
                </para>
            </listitem>
            <listitem>
                <para>Being able to
                    <literal>destroy()</literal>
                    the data structures when not needed
                    anymore.
                </para>
            </listitem>
            <listitem>
                <para>Being able to Hazelcast.shutdown() the local member.</para>
            </listitem>
            <listitem>
                <para>Get the list of all data structure instances
                    via<literal>Hazelcast.getInstances()</literal>.
                </para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.5</emphasis>
        <itemizedlist>
            <listitem>
                <para>Major internal refactoring</para>
            </listitem>
            <listitem>
                <para>Full implementation of<literal>java.util.concurrent.BlockingQueue</literal>.
                    Now queues can have configurable capacity limits.
                </para>
            </listitem>
            <listitem>
                <para>Super Clients (a.k.a LiteMember): Members with no storage. If
                    <literal>-Dhazelcast.super.client=true</literal>
                    JVM parameter is set, that
                    JVM will join the cluster as a 'super client' which will not be a 'data
                    partition' (no data on that node) but will have super fast access to the cluster
                    just like any regular member does.
                </para>
            </listitem>
            <listitem>
                <para>Http Session sharing support for Hazelcast Web Manager. Different webapps can
                    share the same sessions.
                </para>
            </listitem>
            <listitem>
                <para>Ability to separate clusters by creating groups.
                    <link xlink:href="#ConfigGroup">ConfigGroup</link>
                </para>
            </listitem>
            <listitem>
                <para>
                    <literal>java.util.logging</literal>
                    support.
                </para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.4</emphasis>
        <itemizedlist>
            <listitem>
                <para>Add, remove and update events for queue, map, set and list</para>
            </listitem>
            <listitem>
                <para>Distributed Topic for pub/sub messaging</para>
            </listitem>
            <listitem>
                <para>Integration with J2EE transactions via JCA complaint resource adapter</para>
            </listitem>
            <listitem>
                <para>
                    <link xlink:href="#ExecutionCallback">ExecutionCallback</link>
                    interface for distributed tasks
                </para>
            </listitem>
            <listitem>
                <para>Cluster-wide unique id generator</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.3</emphasis>
        <itemizedlist>
            <listitem>
                <para>Transactional Distributed Queue, Map, Set and List</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.2</emphasis>
        <itemizedlist>
            <listitem>
                <para>Distributed Executor Service</para>
            </listitem>
            <listitem>
                <para>Multi member executions</para>
            </listitem>
            <listitem>
                <para>Key based execution routing</para>
            </listitem>
            <listitem>
                <para>Task cancellation support</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.1</emphasis>
        <itemizedlist>
            <listitem>
                <para>Session Clustering with Hazelcast Webapp Manager</para>
            </listitem>
            <listitem>
                <para>Full TCP/IP clustering support</para>
            </listitem>
        </itemizedlist>
        <emphasis role="bold">1.0</emphasis>
        <itemizedlist>
            <listitem>
                <para>Distributed implementation of java.util.{Queue,Map,Set,List}</para>
            </listitem>
            <listitem>
                <para>Distributed implementation of java.util.concurrency.Lock</para>
            </listitem>
            <listitem>
                <para>Cluster Membership Events</para>
            </listitem>
        </itemizedlist>
    </para>
</sect1>

{'fraction_non_alphanumeric': 0.09873225518787207, 'fraction_numerical': 0.018437733484370104, 'mean_word_length': 1.4283206039856027, 'pattern_counts': {'":': 0, '<': 2151, '<?xml version=': 2, '>': 2151, 'https://': 22, 'lorem ipsum': 0, 'www.': 18, 'xml': 14}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 28, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6723165', 'n_tokens_mistral': 22846, 'n_tokens_neox': 20366, 'n_words': 5584}