cayenne-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <>
Subject Re: Cayenne ROP Improvements
Date Fri, 06 May 2016 00:18:48 GMT
It's been a while since I touched the ROP code. Back in the day Java serialization "kind of
worked", but not completely. So you are probably right that it is not a real option. I am
just trying to avoid new dependencies (even optional) on third-party libs in the Cayenne core.
So perhaps we can simply leave out any "default" serialization and always require an explicit
serialization provider.


> On May 5, 2016, at 8:12 PM, Aristedes Maniatis <> wrote:
> Maybe I'm not understanding correctly, but I don't think Java serialisation has been
implemented in ROP. The work Dima did was to move away from the Hessian servlet stuff for
making the HTTP connection, to plain Java with the option for plugging in Jetty libraries
for HTTP/2.
> The work Savva did just now was to use protostuff for serialisation, but I'm not sure
what's now needed if we wanted plain Java serialisation or whether that's even possible without
some sort of library to handle an object graph with cycles.
> Or at least that's my understanding.
> Ari
> On 6/05/2016 9:55am, Andrus Adamchik wrote:
>> Thanks for clarification. I would say use Java serialization as a default, and make
it easy to plugin Hessian and Protostuff as separate modules.
>> A.
>>> On May 5, 2016, at 5:39 PM, Savva Kolbachev <> wrote:
>>> Hi Andrus,
>>>> So which one is the default, Hessian or Java?
>>> We still use Hessian for serialization by default
>>> But we use for establish connection and sending
>>> messages from client to server
>>> So we have escaped from Hessian only in connectivity layer.
>>>> I don't have a problem with Protostuff being a recommended default, but
>>> for dependency management purposes I'd rather we split all third-party
>>> integrations in separate modules, and use whatever provider is hooked up in
>>> runtime. Kind of what we do with Joda/Java8 extensions.
>>> I already did it in this way. I created separate module for Protostuff
>>> serialization.
>>> As Hessian serialization has some troubles with Java8 types and provide
>>> less efficient serialization than Protostuff, I suggest to use Protostuff
>>> as default serialization service or to use Java serialization. So I just
>>> suggest to escape from Hessian :)
>>> 2016-05-05 19:41 GMT+03:00 Savva Kolbachev <>:
>>>> Hi Ari,
>>>> Looks like Protostuff works faster than Protobuf in some cases. For
>>>> example Serializers (no shared refs) and Cross Lang Binary Serializers
>>>> sections here
>>>> In our case we need to serialize graph of objects (Full Object Graph
>>>> Serializers section in link above). Protobuf can't do it out of the box
>>>> but Protostuff can. In my implementation I use protostuff-graph-runtime
>>>> which generates a schema from objects at runtime and caches it.
>>>> Protostuff schema is something like .proto files but in Java:
>>>> Runtime schema:
>>>> As you could see in benchmarks there is a small difference in efficiency
>>>> between protostuff-graph and protostuff-graph-runtime. The ser/deser
>>>> overhead is related to runtime schema generation. The size penalty is that
>>>> Protostuff adds class name for objects and than uses those for find
>>>> appropriate classes via reflection.
>>>> Hessian also adds fields names so the size of Hessian serialization is
>>>> much bigger. In my small example with selection of 6 objects Hessian
>>>> serialization size is more than 2400 bytes while Protostuff runtime is
>>>> about 800 bytes.
>>>> If we don't want to have ser/deser and size overhead we could find a way
>>>> to generate schemas via Velocity. And we should provide schemas for some
>>>> Cayenne classes. But it will require a lot of efforts.
>>>> 2016-05-05 13:44 GMT+03:00 Aristedes Maniatis <>:
>>>>> On 5/05/2016 7:35pm, Savva Kolbachev wrote:
>>>>>> Protostuff (licensed under Apache 2.0 licence) is based on Google's
>>>>>> Protocol-Buffers (Protobuf) but has some optimizations and some cool
>>>>> things
>>>>>> like runtime serialization graph of objects (like Hessian). It also
>>>>> could
>>>>>> generate schema on runtime so we shouldn't define .proto files although
>>>>> it
>>>>>> might increase efficiency. It works faster than Hessian and could
>>>>>> Java8 Date and Time types. Here is some benchmarks. Take a look at
>>>>>> Object Graph Serializers section.
>>>>> According to those benchmarks there appears to be no performance or size
>>>>> penalty to using protostuff over protobuffers. Am I reading that right?
>>>>> I don't really understand... doesn't the serialiser have to construct
>>>>> .proto definition and then include it in the message? So shouldn't it
>>>>> faster/smaller to predefine these?
>>>>> If we did, we could create them with velocity in the same way we create
>>>>> Java _superclasses today. Fairly trivial I'm guessing.
>>>>> Ari
>>>>> --
>>>>> -------------------------->
>>>>> Aristedes Maniatis
>>>>> GPG fingerprint CBFB 84B4 738D 4E87 5E5C  5EFA EF6A 7D2E 3E49 102A
>>>> --
>>>> Thanks and Regards
>>>> Savva Kolbachev
>>> -- 
>>> Thanks and Regards
>>> Savva Kolbachev
> -- 
> -------------------------->
> Aristedes Maniatis
> GPG fingerprint CBFB 84B4 738D 4E87 5E5C  5EFA EF6A 7D2E 3E49 102A

View raw message