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.
Regards, Stephan [1] https://git-wip-us.apache.org/repos/asf?p=incubator-olingo-odata4.git;a=tre e;f=odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/co mmons/api/edm;h=01bbfc90c49208164364326c2b83566990d174ec;hb=HEAD 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/AnnotationProcessorExten >>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/src/main/j >>ava/com/msopentech/odatajclient/engine/utils/DefaultDOMParserImpl.java >> [5] >> >>https://github.com/MSOpenTech/ODataJClient/blob/ODATA_4/engine/src/main/j >>ava/com/msopentech/odatajclient/engine/utils/AndroidDOMParserImpl.java?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. >> > > >-- >Fabio Martelli > >Tirasa - Open Source Excellence >http://www.tirasa.net/ > >Apache Syncope PMC >http://people.apache.org/~fmartelli/ >