[
https://issues.apache.org/jira/browse/IGNITE-2894?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15211981#comment-15211981
]
Andrey Kornev commented on IGNITE-2894:
---------------------------------------
Just for completeness, here's a copy of my posting from the dev list related to
this subject.
{quote}
Ignite Serialization should follow the approach similar to what Java
serialization does: it can transparently and consistently handle both
Serializable and Externalizable classes. It can do it because it relies on a
single class - ObjectOutputStream - to do serialization (and a single class -
ObjectInputStream - to do the opposite, but let's ignore it for the moment).
ObjectOutputStream delegates to proper user callbacks (writeObject or
writeExternal) at the right moments, but otherwise it fully controls the
on-the-wire representation and takes care of all the necessary stream
framing/marking so that ObjectInputStream can then correctly deserialize the
bytes. It's never a problem for Java to serialize an Externalizable field from
a Serializable object and vice versa. Users can mix and match serialization
APIs as they please.
Ignite should just have a single marshaller, let's say the Binary, which drives
the whole serialization process. It doesn't delegate to OptimizedMarshaller as
it does today. Instead it detects the Serializable/Externalizable classes and
calls their serialization callbacks - writeObject/writeExternal - passing in
*itself* as ObjectOutputStream/ObjectOutput correspondingly. This way the
entire serialization process never leaves the context of a single Binary
marshaller and allows Ignite to handle any combination of serialization types
(Binary, Externalizable, Serializable) seamlessly.
{quote}
> Binary object inside of Externalizable still serialized with
> OptimizedMarshaller
> --------------------------------------------------------------------------------
>
> Key: IGNITE-2894
> URL: https://issues.apache.org/jira/browse/IGNITE-2894
> Project: Ignite
> Issue Type: Bug
> Components: general
> Affects Versions: 1.5.0.final
> Reporter: Valentin Kulichenko
> Priority: Critical
> Labels: community, customer, important
> Fix For: 1.6
>
>
> When binary marshaller meets an Externalizable object, it switches to
> optimized marshaller. And if there is a regular object inside, it's still
> serialized with optimized, even if its type is declared in binary
> configuration with custom mapper, etc.
> Essentially, binary marshaller should fully support Java serialization,
> including {{Externalizable}} and {{writeObject}}/{{readObject}}.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)