You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Andrey Kornev (JIRA)" <ji...@apache.org> on 2016/03/25 17:03:25 UTC

[jira] [Commented] (IGNITE-2894) Binary object inside of Externalizable still serialized with OptimizedMarshaller

    [ 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)