Thanks. I assume that 'read/write scenarios' means handling ATOM/Json payload, not Edm (AFAIK client side doesn't need to serialize Edm). But it looks good to have common component to support reading&writing Edm too, so for both Edm and ATOM/Json payload, there will be : (1) object interfaces, (2) de/serializer interfaces(pluggable). correct?
-Challen -----Original Message----- From: Klevenz, Stephan [mailto:stephan.klev...@sap.com] Sent: 2014年2月20日 23:26 To: dev@olingo.incubator.apache.org Subject: Re: [DISCUSSION] Module Proposal OData 4.0 to (1) - yes to (2,3) - Serialization/deserialization both is required on client and server side (read/write scenarios). Currently I am not sure if one implementation can server client and server needs. Currently I am experimenting with Jacksons and I am not sure if the mapping feature and a dom based serialization will work on server side. Main concern is memory consumption and performance. Streaming seems to be more efficient. No final decision yet. About pluggability: +1 Stephan On 20.02.14 14:40, "Challen He" <chall...@microsoft.com> wrote: >so this is what we are going to have(pls corrct me if I misunderstand >anything): >(1) A set of Edm object interfaces for both client & server >(2) Edm deserializer interfaces for client >(3) Edm serializer interfaces for server > >based on the above, can we make de/serializer's implementation be >pluggable? so that either client or server user can substitute their >de/serializer for specific needs/optimization. > >thanks,-Challen > >-----Original Message----- >From: Francesco Chicchiriccò [mailto:ilgro...@apache.org] >Sent: 2014年2月14日 19:35 >To: dev@olingo.incubator.apache.org >Subject: Re: [DISCUSSION] Module Proposal OData 4.0 > >On 14/02/2014 12:30, Klevenz, Stephan wrote: >> Yes. >> >> I pick out one example: >> >> https://github.com/MSOpenTech/ODataJClient/blob/ODATA_4/engine/src/ma >> i >> n/jav >> a/com/msopentech/odatajclient/engine/metadata/edm/v4/EntityContainer. >> j >> ava >> >> Entitycontainer.getEntitySet(String name) iterates over the list of >>all entity sets. This doesn't work on server side. Server is >>stateless, needs only one entity set for validation and can query this >>very efficiently. >> Conclusion: I like the api, but I want to exchange implementation. >> >> Can we agree on that EDM should get interfaces instead of classes? >> Interfaces will enable us on creating multiple implementations. > >Definitely, +1. > >Regards. > >> On 14.02.14 10:35, "Francesco Chicchiriccò" <ilgro...@apache.org> wrote: >> >>> On 14/02/2014 10:29, Klevenz, Stephan wrote: >>>> Fabio, Francesco, others, >>>> >>>> [1] is the package for the Olingos EDM V4 interfaces. Do you think >>>> they are usable for the V4 client? As said before I see two kind of >>>> implementations, one for server and one for client. If we could use >>>> this interfaces commonly then other components relying on EDM could >>>> become re-useable as well. >>> Hi Stephan, >>> it seems that [1] is close to [2], except that [2] has subpackages >>> for >>> V3 and V4: it will require some work, but it seems that the >>> suggested place is correct. >>> >>> Regards. >>> >>>> [1] >>>> >>>> https://git-wip-us.apache.org/repos/asf?p=incubator-olingo-odata4.g >>>> i >>>> t;a=t >>>> re >>>> >>>> e;f=odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/o >>>> d >>>> ata4/ >>>> co >>>> mmons/api/edm;h=01bbfc90c49208164364326c2b83566990d174ec;hb=HEAD >>> [2] >>> https://github.com/MSOpenTech/ODataJClient/tree/ODATA_4/engine/src/m >>> a in/ja va/com/msopentech/odatajclient/engine/metadata >>> >>>> On 13.02.14 14:51, "Fabio Martelli" <fabio.marte...@gmail.com> wrote: >>>> >>>>> Hi Stephan, your analysis is good, thank you. >>>>> Francesco (extremely faster then me) seems to have answered to all >>>>> the questions. >>>>> @Francesco: thank you for details and clarifications about >>>>> (de-)serialization stuffs. >>>>> >>>>> My +1 to the latest proposal about middle part ('commons') >>>>>refactoring. >>>>> >>>>> Best regards, >>>>> F. >>>>> >>>>> Il 13/02/2014 14:24, Francesco Chicchiriccò ha scritto: >>>>>> Hi Stephan, >>>>>> see my replies inline. >>>>>> >>>>>> Regards. >>>>>> >>>>>> On 13/02/2014 13:57, Klevenz, Stephan wrote: >>>>>>> Hi Fabio, >>>>>>> >>>>>>> I had a closer look at proxy and engine layer and like that very >>>>>>> much. Is it correct that proxy is on top of engine and can be >>>>>>> seen as an extension? >>>>>>> Or better the engine does work without the proxy, right? >>>>>> Correct. >>>>>> >>>>>>> In current OData 2.0 library we have also something that is on >>>>>>> top which is JPA processor and annotation processor. This looks >>>>>>> similar to your proxy just because it is on top, all deal with >>>>>>> annotations and should ease the use of library. Maybe it makes >>>>>>> sense first to have a deeper look into the engine and what we >>>>>>> just call the library. >>>>>> Agree, this seems definitely reasonable. >>>>>> >>>>>>> The first thing that came into focus of my interest is edm. >>>>>>> Concrete >>>>>>> com.msopentech.odatajclient.engine.data.metadata.* which is >>>>>>> similar to org.apache.olingo.odata2.api.edm.*. Both is edm. >>>>>>> Independent of client or server use case there can be at least >>>>>>> one common edm interface. On server side there is a so called >>>>>>> edm provider which realizes lazy loading (partial read of metadata). >>>>>>> For server this is essential but for the client lazy loading >>>>>>> sounds like not required. I am note sure but don't see a use >>>>>>> case where a client reads partial metadata. So maybe we have one >>>>>>> interface and two implementations for edm. One edm >>>>>>> implementation is optimized for client and another one carries >>>>>>> all the stuff a server needs. >>>>>> About metadata, think that in ODataJClient any request but invoke >>>>>>does not need metadata to work; moreover, metadata don't need to >>>>>>be written on client side, but only parsed. >>>>>> This to confirm that IMO we should find a way to retain a common >>>>>>part, given the different usage that client and server make of >>>>>>metadata. >>>>>> >>>>>> As you've already seen, we use Jackson XML [2] for parsing metadata: >>>>>> we found it very efficient, flexible and unbelievably fast. >>>>>> Moreover, consider that we have already implemented the V4 >>>>>> metadata parsing in the ODATA_4 branch (the one which is actually >>>>>> being donated). >>>>>> >>>>>>> Another thing is the com.msopentech.odatajclient.engine.data >>>>>>> package and serialization/deserialization. Server and client do >>>>>>> require the same functionality. Your implementation is dom based >>>>>>> and uses jackson for json and xml (correct?). We are using stax >>>>>>> for xml and gson for json and all is event based. With a dom >>>>>>> base approach we experienced issues (performance and memory >>>>>>> consumption) in case of large metadata or data sets. >>>>>>> Jackson >>>>>>> for json and xml makes sense because of stax is not a good >>>>>>> option for Android client use cases. >>>>>> The current V3 implementation works well with Android (there is >>>>>>also a working sample [3]) and uses different DOM implementations >>>>>>for the desktop [4] and mobile [5] use cases. >>>>>> Anyway I am currently updating the Atom parser (still at GitHub, >>>>>>waiting for the code to land to olingo4 repo) and I am realizing >>>>>>that Jackson XML [2] is, as you suggest above, probably the best >>>>>>option: >>>>>> >>>>>> * PROS: performance, uniformity with metadata handling, >>>>>> removal of "special" Android treatment [5] >>>>>> * CONS: need to rewrite from scratch the current Atom parser >>>>>> :-) - but I've already started this work >>>>>> >>>>>>> Olingos data structure that a server has to fill is quite low >>>>>>>level. >>>>>>> Actually its just a hashtable. Maybe we can make use of data >>>>>>>classes like ODataEntity of your engine code. >>>>>>> >>>>>>> If you simplify the module proposal I made then we have a client >>>>>>> code on the left and a server code on the right side. Ideally >>>>>>> client and server do have their own best fitting architecture >>>>>>> and structure. In other words a separation between proxy and >>>>>>> engine for the client still makes sense. >>>>>>> The >>>>>>> challenge is the middle part, we call it 'commons', which is >>>>>>> used by client and server. My candidates are edm and serialization. >>>>>> +1 >>>>>> >>>>>> Regards. >>>>>> >>>>>> [1] >>>>>> >>>>>> >>>>>> http://olingo.incubator.apache.org/doc/tutorials/AnnotationProces >>>>>> s >>>>>> orExt >>>>>> en >>>>>> sion.html >>>>>> [2] https://github.com/FasterXML/jackson-dataformat-xml >>>>>> [3] https://github.com/Tirasa/ODataJClientOnAndroidSample >>>>>> [4] >>>>>> >>>>>> >>>>>> https://github.com/MSOpenTech/ODataJClient/blob/ODATA_4/engine/sr >>>>>> c >>>>>> /main >>>>>> /j >>>>>> ava/com/msopentech/odatajclient/engine/utils/DefaultDOMParserImpl. >>>>>> java >>>>>> [5] >>>>>> >>>>>> >>>>>> https://github.com/MSOpenTech/ODataJClient/blob/ODATA_4/engine/sr >>>>>> c >>>>>> /main >>>>>> /j >>>>>> >>>>>> >>>>>>ava/com/msopentech/odatajclient/engine/utils/AndroidDOMParserImpl. >>>>>>jav >>>>>>a? >>>>>> so >>>>>> urce=cc >>>>>> >>>>>>> On 12.02.14 13:48, "Fabio Martelli" <fabio.marte...@gmail.com> >>>>>>>wrote: >>>>>>> >>>>>>>> Il 11/02/2014 17:19, Klevenz, Stephan ha scritto: >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I would like to start a technical discussion about a module >>>>>>>>> proposal for OData 4.0 client and server library. >>>>>>>>> >>>>>>>>> Starting point is that we have an OData V 3.0 client (Eduards >>>>>>>>> new >>>>>>>>> contribution) and an Olingo client/server for OData 2.0. On >>>>>>>>> following wiki page I did draw a picture to get some first >>>>>>>>> view on structure and to find responsibilities for modules. >>>>>>>>> The idea is to get the best out of all contributions. >>>>>>>>> >>>>>>>>> https://wiki.apache.org/Olingo/Olingo%20Module%20Proposal >>>>>>>>> >>>>>>>>> There is not so much explained. Feel free to ask, comment or >>>>>>>>> discuss. >>>>>>>>> >>>>>>>>> Greetings, >>>>>>>>> Stephan >>>>>>>>> >>>>>>>> Hi Stephan, I'm taking a look at the wiki page "Olingo Module >>>>>>>> Proposal". >>>>>>>> I've just a consideration to point out. >>>>>>>> >>>>>>>> OData V 3.0 client is composed of two main modules: the engine >>>>>>>> and the proxy. >>>>>>>> These are two difference abstraction layers with different >>>>>>>> scopes, of course. >>>>>>>> >>>>>>>> The engine is the low-level communication layer taking care of >>>>>>>> actual REST communication and OData entity (de)serialization, >>>>>>>> exposing methods to hook into the OData protocol for >>>>>>>> manipulating entities and invoking actions and functions. It >>>>>>>> is there for Java developers that needs to access underlying >>>>>>>> details of the OData communication protocol. >>>>>>>> >>>>>>>> The proxy converts any local change to POJOs and any local >>>>>>>> invocation of annotated interfaces' methods into actual calls >>>>>>>> to the Engine layer. >>>>>>>> It >>>>>>>> is thought for experienced Java developers which are familiar >>>>>>>> with widespread Java Enterprise and / or Open Source >>>>>>>> technologies and prefer to interact with OData services at a >>>>>>>> very abstract level (like JPA, more or less). >>>>>>>> >>>>>>>> Of course, the proxy layer depends on the engine layer BTW each >>>>>>>> one can be considered as a different client. >>>>>>>> >>>>>>>> May be it would be better to explain this concept into the >>>>>>>>picture. >>>>>>>> What >>>>>>>> do you think? >>>>>>>> >>>>>>>> Best regards, >>>>>>>> F. > >-- >Francesco Chicchiriccò > >Tirasa - Open Source Excellence >http://www.tirasa.net/ > >Involved at The Apache Software Foundation: >member, Syncope PMC chair, Cocoon PMC, Olingo PPMC >http://people.apache.org/~ilgrosso/ >