high level design from wiki

Angela Cymbalak <[email protected]> Fri, 18 Jul 2008 07:36:54 -0400
Newsgroups gmane.comp.apache.incubator.projects
Message-ID <[email protected]>

There are still many questions that need to be answered regarding 
this application.  They are all asked with their appropriate topic 
but summarized here:

  * Should the user management default be Apache Directory or a 
simple database?
  * How will access control be implemented?
  * Will the Web service just provide data for machine to machine 
exchanges or will it default to human readable?
  * Should the project impose a backend data storage mechanism and 
schema, or just WS/REST interfaces suitable for pluggable frontends?
  * Should we use JCR or a (relational) Database?
   * The proposal (below) now presumes JCR.  Are we losing anything 
by not having a relational database?

The photos and meta data will be exposed via a Web service.  During 
discussions on the lists regarding how the code should be written, 
the one thing that no one seemed to be able to agree on was how the 
photos should be displayed.  Some would like to see them in Flash, 
others AJAX, still others as a JSP library.  Exposing the information 
as a Web service allows for each of these display formats to be 
utilized.  Question: Will the Web service just provide data for 
machine to machine exchanges or will it default to being human 
readable?  If it only provides for machine to machine exchanges then 
a default option for display will need to be provided.  We plan on 
looking at the Tuscany SCA implementation to facilitate the WS.

The storage for all data will use Apache Jackrabbit and as logically 
follows Sling.  The actual node and property structure has yet to be 
determined.  Questions: Should the project impose a backend data 
storage mechanism and schema, or just WS/REST interfaces suitable for 
pluggable frontends?  Should we use JCR or a (relational) Database?

Access control should provide the option to mark photos as public 
(anyone), protected (invite only), or private (just the owner). 
Options for managing the invites for each user are LDAP or a simple 
database. Permission checking can be implemented in the backend as a 
Jackrabbit access manager or in an application layer. Candidate 
technologies are JAAS and JSecurity, which both allow for pluggable 
authentication.