Perhaps the whole of ROP becomes an optional module?

Ari


On 6/05/2016 10:18am, Andrus Adamchik wrote:
> 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.
> 
> Andrus
> 
>> On May 5, 2016, at 8:12 PM, Aristedes Maniatis <a...@maniatis.org> 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 <s.kolbac...@gmail.com> wrote:
>>>>
>>>> Hi Andrus,
>>>>
>>>>> So which one is the default, Hessian or Java?
>>>> We still use Hessian for serialization by default
>>>> https://github.com/apache/cayenne/blob/master/cayenne-server/src/main/java/org/apache/cayenne/rop/HessianROPSerializationService.java
>>>> But we use java.net.URLConnection for establish connection and sending
>>>> messages from client to server
>>>> https://github.com/apache/cayenne/blob/master/cayenne-client/src/main/java/org/apache/cayenne/rop/http/HttpROPConnector.java
>>>> 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 <s.kolbac...@gmail.com>:
>>>>
>>>>> 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 http://hperadin.github.io/jvm-serializers-report/report.html
>>>>>
>>>>> 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:
>>>>> http://www.protostuff.io/documentation/schema/
>>>>> Runtime schema: http://www.protostuff.io/documentation/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 <a...@maniatis.org>:
>>>>>
>>>>>> 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 handle
>>>>>>> Java8 Date and Time types. Here is some benchmarks. Take a look at Full
>>>>>>> Object Graph Serializers section.
>>>>>>> http://hperadin.github.io/jvm-serializers-report/report.html
>>>>>>> https://github.com/eishay/jvm-serializers/wiki
>>>>>>
>>>>>> 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 a
>>>>>> .proto definition and then include it in the message? So shouldn't it be
>>>>>> 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
> 

-- 
-------------------------->
Aristedes Maniatis
GPG fingerprint CBFB 84B4 738D 4E87 5E5C  5EFA EF6A 7D2E 3E49 102A

Reply via email to