Apache Ignite Extensions Release Notes
===========================

Apache Ignite Spring Cache Module 1.0
-------------------------------------

* Added the ability to connect to the Ignite cluster through the Ignite thin client

The following integration was migrated to the Apache Ignite Extensions repository:
* Spring Cache extension


Apache Ignite Spring Transactions Module 1.0
--------------------------------------------

* Added the ability to connect to the Ignite cluster through the Ignite thin client
* Migrated CacheSpringStoreSessionListener

The following integration was migrated to the Apache Ignite Extensions repository:
* Spring Transactions extension


Apache Ignite Performance Statistics Module 1.0
-------------------------------------

* Added the tool to build the cluster performance report
* Added the utility to print performance statistics operations to a console or to a file in JSON format


Apache Ignite Spring Data Modules 1.0
-------------------------------------

* Added the ability to connect to the Ignite cluster through the Ignite thin client for the Spring Data extensions
* Fixed closing of Spring Data Ignite resources after destroying the Spring context if they were automatically started by the manager

The following integrations were migrated to the Apache Ignite Extensions repository:
* Spring Data 2.2 extension
* Spring Data 2.0 extension
* Spring Data extension


Apache Ignite Streamer Extension Modules 1.0
-------------------------------------
The following integrations were migrated the Apache Ignite Extensions repository:
* Camel integration extension
* Flink integration extension
* Flume integration extension
* JMS integration extension
* Kafka integration extension
* MQTT integration extension
* Pub/Sub integration extension
* RocketMQ integration extension
* Storm integration extension
* Twitter integration extension
* ZeroMQ integration extension


Apache Ignite Spring Boot Modules 1.0
-------------------------------------

* Auto configure of Ignite node for spring-boot based applications implemented.
* Auto configure of Ignite thin client for spring-boot based applications implemented.
