Serializing Objects and Classes
For data to be sent over a network between cluster members and/or clients, it needs to be serialized into raw bytes. Hazelcast has many serialization options to choose from, depending on what you plan on doing with your data.
You can store any primitive types in a Hazelcast data structure and Hazelcast will serialize them for you, using built-in serializers. However, to store custom classes or objects, you need to tell a cluster how to serialize and deserialize them when they are sent over the network. For example, you must serialize the following:
-
Custom objects
-
Tasks used by the executor service
-
Some entry processors
Serialization Options
Deprecation Notice for Portable Serialization
Portable Serialization has been deprecated. We recommend you use Compact Serialization as Portable Serialization will be removed as of version 7.0. |
Hazelcast offers the following serialization options:
Serialization interface | Advantages | Disadvantages | Client support |
---|---|---|---|
|
|
All clients |
|
|
|
All clients |
|
|
|
All clients |
Other alternative serialization options
Serialization interface | Advantages | Disadvantages | Client support |
---|---|---|---|
|
|
All clients |
|
|
|
Java only |
|
|
|
Java only |
|
|
|
Java only |
|
|
|
|
All clients |
Portable Serialization has been deprecated. We recommend you use Compact Serialization as Portable Serialization will be removed as of version 7.0. |
How Hazelcast Serializes Objects
When Hazelcast serializes an object:
-
It first checks whether the object is
null
. -
If the above check fails, then Hazelcast looks for a user-specified CompactSerializer.
-
If the above check fails, then Hazelcast checks if it is an instance of
com.hazelcast.nio.serialization.DataSerializable
orcom.hazelcast.nio.serialization.IdentifiedDataSerializable
. -
If the above check fails, then Hazelcast checks if it is an instance of
com.hazelcast.nio.serialization.Portable
. -
If the above check fails, then Hazelcast checks if it is an instance of one of the default types.
-
If the above check fails, then Hazelcast looks for a user-specified Custom Serializer, i.e. an implementation of
ByteArraySerializer
orStreamSerializer
. Custom serializer is searched using the input Object’s Class and its parent class up to Object. If parent class search fails, all interfaces implemented by the class are also checked (excludingjava.io.Serializable
andjava.io.Externalizable
). -
If the above check fails, then Hazelcast checks if it is an instance of
java.io.Serializable
orjava.io.Externalizable
and a Global Serializer is not registered with Java Serialization Override feature. -
If the above check fails, Hazelcast uses the registered Global Serializer if one exists.
-
If the above check fails, then Hazelcast tries to extract a schema out of the Object’s class automatically, if possible.
If all the above checks fail, then serialization fails. When a class implements multiple interfaces, the above steps are important to determine the serialization mechanism that Hazelcast uses. When a class definition is required for any of these serializations, you need to have all the classes needed by the application on your classpath because Hazelcast does not download them automatically, unless you are using user code deployment.
User Code Deployment has been deprecated and will be removed in the next major version. To continue deploying your user code after this time, Community Edition users can either upgrade to Enterprise Edition, or add their resources to the Hazelcast member class paths. Hazelcast recommends that Enterprise Edition users migrate their user code to use User Code Namespaces for all purposes other than Jet stream processing. For further information on migrating from User Code Deployment to User Code Namespaces, see Migrate from User Code Deployment. |
Data Types with Built-In Serialization
By default, Hazelcast optimizes the serialization for the following data types. You do not need to serialize or deserialize these types yourself:
-
Class
,Optional
,Date
,BigInteger
,BigDecimal
,ArrayList
,LinkedList
,CopyOnWriteArrayList/Set
,HashMap/Set
,ConcurrentSkipListMap/Set
,ConcurrentHashMap
,LinkedHashMap/Set
,TreeMap/Set
,ArrayDeque
,LinkedBlockingQueue
,ArrayBlockingQueue
,PriorityBlockingQueue
,PriorityQueue
,DelayQueue
,SynchronousQueue
,LinkedTransferQueue
If you would rather implement your own serialization for these types, you can configure Hazelcast to enable overriding the default serializers.