jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Angela Schreiber <anch...@day.com>
Subject Suggestion for split of JCR-Server
Date Thu, 20 Apr 2006 06:29:10 GMT

as mentioned and discussed several times before, we may
think about splitting the 'jcr-server' project into
a webdav specific project and the jcr-server.

1) Proposal for webdav project structure

+ jackrabbit
   + webdav
     + commons
         [ would contain the current webdav library including ]
         [ its dependency to servlet api (see 2)              ]
         [ no dependency to jsr170 api nor jackrabbit         ]
     + server
       + config (see 5)
       + io
       + "simple-server-implementation"
       + "core-server-implementation" (see 4)
     + client
         [ the dav extension of httpclient methods            ]
         [ further dav-client development                     ]
     + webapp
         [ repository-access-servlet, dav-servlets            ]
         [ only here: dependency to jackrabbit                ]

2) Missing separation of commons and server api

i tried to move everything with dependency to the servlet api
and all the 'resource' interfaces to the 'server' and reduce
the 'commons' to classes/interfaces which are shared between
server and client.

however i found, that both 'DavResource' and the
'DavServletRequest'/'DavServletResponse' are tied too much
into common utilities such as DavMethod and MultiStatus etc.

thus, moving those server specific interfaces out of the
common library would lead to substancial redesign which
i would prefer not to mix with that initial split. instead
this should go into the todos for a major release.

3) Dependencies from 'jcr' package

the 'simple' currently contains the following dependencies
to the 'jcr' implementation:

- JcrDavException:
   Extension to DavException that translates the various
   RepositoryExceptions to error-codes.

- JcrDavSession:
   Abstract class that wraps javax.jcr.Session and provides
   access to this repository session.

- JcrActiveLock:
   Wraps a javax.jcr.Lock object. This class has a dependency
   to the ItemResourceConstants (destinction of session scoped
   locks) which is useful for the jcr-server only, not for
   'simple' or some generic server.

- The simple servlet uses the locator factory implementation
   from the webdav.jcr package.

I think that all of the mentioned classes in fact represent
a common basis for dav implementations on top of jsr170
compliant repository and should rather be part of a util
package (or of the core?). currently the dependencies are
internal only and a replacement should be possible.

4) What represents the 'core' implementation

i would suggest to use the 'core' as base implementation for
dav-server on top of a jsr170 compliant repository. the
extensions provided by jérémi would then act as basis
for the core. the 'simple' may extend from the 'core' as well
but not the other way round.

5) Why a separate 'server/config'

currently only the 'simple' server provides a simple and limited
configuration. in order to be able to create a configuration
suited for a broader usage and for a general server i would
suggest to start with a separat config package.
the 'simple' package would contain the original config classes
for backwards compatibility (but marked deprecated).

6) what will be in the 'jcr-server'

in the 'jcr-server' would remain the 'webdav/jcr' package,
the 'server/jcr' package and the JCRWebdavServerServlet.java.

what do you think?


View raw message