>-----Original Message----- >From: Chris Geer [mailto:[email protected]] >Sent: Monday, May 28, 2012 4:55 PM >To: [email protected] >Subject: Re: Modularization > >On Monday, May 28, 2012, Ate Douma wrote: > >> On 05/25/2012 10:54 PM, Chris Geer wrote: >> >>> To prod along the conversation about modularization and architecture I >>> wanted to pick one thing and try and talk through it before moving onto >>> bigger things. Right now Rave has a core data model defined in >>> org.apache.rave.portal.model which are all concrete JPA classes. To >>> support >>> pluggable persistence layers we will need to migrate the definitions to >>> interfaces and move the JPA implementations to a JPA module. Assuming >that >>> is an agreed upon task I have a couple questions: >>> >>> 1) Has any of this been done as part of the JCR activity? Is that still in >>> progress? >>> >> Yes, that still is in progress, or maybe better said in progress getting >> started :) >> Unico made a first start with initial JCR bootstrap and initialization >> features, but he's been on holiday the last 3 weeks (back by tomorrow). >> Ard joined the effort last week by picking up work on the Jackrabbit JCR >> OCM module (so within the Jackrabbit project) to get it ready to be used >> for Rave. >> The timing of separating out the JPA persistence layer now is perfect in >> that respect. I expect that in a few weeks time we could start on a partial >> JCR based back-end for Rave Portal. >> And Marijan and myself hope to get started with the 'real stuff' >> concerning content services as well as a HMVC model and layer for the >> portal site and page management sometime in June. >> At Hippo we had some business distractions in April with as result that >> the initial planning and availability for our Rave contributions no longer >> was valid. We're scheduling this in again ASAP, but it'll take a bit more >> time now. >> >> 2) I know we want to support multiple UI layers (OpenSocial, W3C...) but >>> OpenSocial is the only one so far that defines a backend data structure as >>> far as I know. >>> >> I think OpenSocial doesn't even define a backend data structure, Shindig >> does. >> And the same goes for W3C Widgets, while Wookie does have a back-end >model. >> The real difference IMO is that Shindig provides an abstract model/SPI >> while Wookie does not. Yet... > > >I'm definitely not a W3C gadget expert but the only "data backed" I see in >the specs is for storage of preferences [1]. This differs from OpenSocial >since they define the Core/Social API and Data specs which define things >like Person, Activity, Group... [2]. I didn't see a similar construct in >W3C. > >I agree they each have a unique rendering backed but I was referring to >more the user/social aspects. > >[1] http://www.w3.org/2008/webapps/wiki/WidgetSpecs >[2] http://docs.opensocial.org/display/OSD/Specs > >> >> What I've suggested before is the option to modularize Wookie a bit >> further and see if we can come up with a separate backend model/SPI for >> Wookie as well. >> Of course that is a discussion for the Wookie project itself, but IMO it >> is something which would benefit both Wookie and help with a much better >> integration and support within Rave. >> >> Regardless however if we can get/add a Wookie model/SPI, I think there is >> a difference between the data model(s) needed for Widget Containers >> (Shindig/Wookie/...) and the data model needed for the Rave Portal. >> To me a OS Person != Rave User >> And even much more explicit: a OS Group != Rave Group > > >At some point there needs to be a link between a Rave user and an OS person >representation (at least when runnin OS backend). That relationship could >be modeled several ways but it simplifies things if a Rave user is a >superset of OS Person and even implemented the Shindig Person interface to >avoid translating between objects. At the very least, to support the social >APIs in OS we need to be able to process/persist OS data.
IMO this is the responsibility of the Shindig SPI implementations. > >I fully understand that if you are running a Wookie front end and don't >need social data you won't need a full blown Person object. The big >question in my mind though is how is that actually implemented. In Rave, is >the OS data model (Person, Activity..) truly optional such that you can >choose uninstall that module and not have that data in your DB? Or is the >OS data model part of Rave but it just might not be fully used in some >implementations? > >Using Person as the example, is there a Rave Person table that has all the >fields to fully represent an OS Person and unused fields are just left >blank/null or is there a Rave Person table that is bare minimum and then a >OS Person table that links back to the Rave Person table (and maybe a >Wookie Person table...)? The current implementation is admittedly suboptimal. There are a few Rave person tables, one of which is the person properties table. Data in this table is used to populate the OS person object using the implicit contracts found in the FieldRestrictingPerson class in Rave Shindig. This was a first attempt at supporting arbitrary OS fields without changing the Model objects. It doesn't help that it was never fully completed. Now that we are moving to interfaces, this will help some; but, what we really need to do is define a solid field definition strategy that is propagated to the various integrated components like Rave & Wookie. There is a placeholder for this on the architecture wiki. > >Maybe our short term task while talking modularization is to draw out the >Rave data model and how it supports OS data or what additional objects are >required beyond the core Rave model to fully support OS data. > >Maybe a starter question so that I'm on the same page as everyone. Does >Rave intend to be compliant with the full OpenSocial specification or just >the OpenSocial gadget spec? Full spec, though Shindig will offer a lot of the REST endpoint compliance (at least initially). > >> >> With that in mind, does it make sense to consider using the >>> Shindig data interfaces instead of rolling our own and having to translate >>> between org.apache.rave.portal.model.**Person and >>> org.apache.shindig.social.**opensocial.model.Person? Do we anticipate >>> non-OpenSocial data models that compete with the OpenSocial one? >>> >> >> If Wookie could get an backend model/SPI, it might be very beneficial to >> consider (re)using part of the Shindig model where applicable, of course >> not so much in API but in model definition and entity naming/concepts. >> Other than that, I think it doesn't or shouldn't really matter for as much >> as it only concerns each separate Widget Container model. >> >> With respect to the Rave Portal model I don't see how we can or even need >> to consider competing data models. >> >> Ate >> >> >>> Chris >>> >>> >>
