
In this Release Notes document, you will find the new features, enhancements and fixes of the Hazelcast 3.4 release.
The numbers in the square brackets refer to the number of the issues in Hazelcast’s GitHub repository. You can reach
to the full descriptions of the issues at https://github.com/hazelcast/hazelcast/issues/<issue number>.

1. New Features
This section provides the new features introduced with Hazelcast 3.4 release. 

	•	High-Density Memory Store: Used with the Hazelcast JCache implementation, High-Density Memory Store is
	introduced with this release. High-Density Memory Store is the enterprise grade backend storage solution.
	This solution minimizes the garbage collection pressure and thus enables predictable application scaling and
	boosts performance. For more information, please see High-Density Memory Store section in the Hazelcast
	Reference Manual.

	•	Jetty Based Session Replication: We have introduced Jetty-based web session replication with this release.
	This is a feature of Hazelcast Enterprise. It enables session replication for Java EE web applications that are
	deployed into Jetty servlet containers, without having to perform any changes in those applications. For more
	information, please see Jetty Based Web Session Replication section in the Hazelcast Reference Manual.

	•	Hazelcast Configuration Import: This feature, which is an element named <import>, enables you to compose
	the Hazelcast declarative (XML) configuration file out of smaller configuration snippets. For more information,
	please see Composing XML Configuration section in the Hazelcast Reference Manual.

	•	Back Pressure: Starting with this release, Hazelcast provides the back pressure feature which eliminates the
	overload of pending asynchronous backups. For more information, please see Back Pressure section in the Hazelcast
	Reference Manual..



2. Enhancements

This section lists the enhancements performed for Hazelcast 3.4 release.

	•	Event packets sent to the client do not have "partitionId" [#4071].
	•	Spring Configuration for ReplicatedMap is Missing [#3966].
	•	NodeMulticastListener floods log file with INFO-level messages when debug is enabled [#3787].
	•	A Hazelcast client should not be a `HazelcastInstance`. It should be a "factory" and this factory should
	be able to shut down Hazelcast clients. [#3781].
	•	InvalidateSessionAttributesEntryProcessor could avoid creating strings at every call to process [#3767].
	•	SocketConnector timeout cannot be configured [#3613].
	•	The method `MultiMap.get()` returns `collection`, but this method should return the correct collection
	type (`Set` or `List`) [#3214].
	•	HazelcastConnection is not aligned with HazecastInstance [#2997].
	•	Support for Log4j 2.x has been implemented [#2345].
	•	Management Center console behavior on node shutdown [#2215].
	•	When queue-store not enabled, QueueStoreFactory should not be instantiated [#1906].
	•	Management Center should be able to say when cluster is safe and all backups are up to date [#963].


3. Fixes

This section lists issues solved for Hazelcast 3.4 release.

	•	Deadlock happens in MapReduce implementation when there is a high load on the system. The issue has been
	solved by offloading Distributed MapReduce result collection to the async executor [#4238].

	•	When the class `ClientExecutorServiceSubmitTest.java` is compiled using the Eclipse compiler, it gives a
	compile error: "*The method submit(Runnable, ExecutionCallback) is ambiguous for the type IExecutorService*".
	The reason is that the `IExecutorService.java` class does not have some generics. The issue has been solved by
	adding these missing generics to the `IExecutorService.java` class [#4234].

	•	JCache declarative listener registration does not work [#4215].

	•	JCache evicts the records which are not expired yet. To solve this issue, the `clear` method should be
	removed that runs when the size is smaller than the minimum eviction element count
	(`MIN_EVICTION_ELEMENT_COUNT`) [#4124].

	•	Hazelcast Enterprise Native Memory operations should be updated in relation with the Hazelcast sync listener
	changes [#4089].

	•	The completion listener (JCache) relies on event ordering but if the completion listener is registered in
	another node then event ordering is not guaranteed [#4073].

	•	AWS joiner classname should be fixed since EC2 discovery is not working after the restructure [#4025].

	•	If an IMap has a near cache configured, accessing the near cache via the method `get(key)` does not count
	as an access to the underlying IMap. The near cache has its own `max-idle-seconds` element. However, if an entry
	is expired/evicted in the IMap, it also causes a near cache removal operation for the entry regardless of the
	`max-idle-seconds` of that entry in the near cache. The entry expires and is evicted even if the near cache is
	being hit constantly. When a near cache is hit, the underlying map should reset the idle time for that key [#4016].

	•	Getting a pre-configured Cache instance is not working as expected [#4009].

	•	Bounded Queue section in the Reference Manual is unclear and wrong [#3995].

	•	The method `checkFullyProcessed` of MapReduce throws null pointer exception. The reason may be that multiple
	threads attempt to start the final processing state in the JobSupervisor [#3952].

	•	Merge operation after a split brain syndrome does not guarantee that the merging is over [#3863].

	•	When a client with near cache configuration enabled is shut down, `RejectedExecutionException` is
	thrown [#3669].

	•	In Hazelcast `IMap` and `TransactionalMap`, read-only operations such as `get()`, `containsKey()`, `keySet()`,
	and `containsValue()` break the transaction atomicity [#3191].

	•	Documentation should clearly list features of and differences between native clients [#2385].

	•	Sections of Hazelcast configuration should be able to be imported so that these sections can be shared
	between other Hazelcast configurations [#406].

