This Wiki contains concepts, results and brainstormings concerning the repository integration done at the SprintZurich20040514.
Goals
- independence from repository implementation
- reuse of Cocoon components
- exclude repository markup from sitemap URLs i.e. user name and credentials
- Lenya protocol as single entry point for PageEnvelope access if using
lenya:/
Ideas
- based on
- repository block interfaces
- default implementation: Slide block (SlideSource and the Slide protocol
slide:
)
- extension of repository block
- new methods in VersionableSource
- new interfaces TransactionableSource, TransactionManager
lenya:*
protocol + LenyaSourceFactory, which delegates to further protocols i.e.slide:
- The lenya protocol should be configureable i.e. the delegation protocol (
slide:
) and a delegation prefix i.e. a namespace if the delegation protocol isslide:
. - using
src="lenya:/"
is equivalent to usingsrc="lenya://{page-envelope:publication-id}/{page-envelope:area}"
. This will heavily reduce sitemap redundancies and still provides enough flexibility
- The lenya protocol should be configureable i.e. the delegation protocol (
Definitions
;Delegation Protocol:The protocol to be delegated to by the LenyaSourceFactory used to access the repository ;Delegation Prefix: A prefix to be prepended to the url before it is delegated to the delegation protocol
Reasons
- why slide?
- JCR is not ready
- why
o.a.c.c.repository.*Source
instead ofo.a.c.c.repository.Repository
?- existing Slide implementation
Repository
focuses too much on Flow
- we want to reuse the repository source interfaces
*we need to add transaction support with a new interface *transactionable*
*we want to use the underlying slide block and have to implement *transactionable* for the slide source
Diagrams
<map:generate> - - - - - - - - - - - | Lenya API v +-------------------+ +--------+ +----------+ |LenyaSourceFactory | |Version | |Resource | +-------------------+ +--------+ +----------+ - - - - - - - - - - - - - - - A - - - - - Repository Block | +----------+-------+-------+ v v v +------+ +-----------+ +---------------+ |Source| |Versionable| |Transactionable| +------+ +-----------+ +---------------+ +------------------+ |TransactionManager| +------------------+ - - - - - - - - - - - - - - - - - - - - - Repository Block Implementation Slide | JCR | ... - - - - - - - - - - - - - - - - - - - - -
Approach
- move publication API draft from University of Zurich Publication into Lenya and merge
- extend Slide source with transactable interface
- Implement a LenyaSourceFactory as described in this document
- Replace
<map:generate src="path"/>
by<map:generate src="lenya://path"/>
or<map:generate src="lenya:/path"/>
. The LenyaSourceFactory will delegate to thecontext:
protocol until the Lenya API uses ModifiableTraversableSource to change/create files in the repository.
Transactions
- LenyaSource implements Transactionable
- Transactionable is marker interface for communication with TransactionManager
- TransactionManager accesses repository transaction manager
Interface extensions
Versionable Source
- void checkout()
- void uncheckout()
- void checkin()
- setVersioned()
- Source getSource(String Revision)
String[] getRevisions()
- boolean isCheckedOut()
Results
- Implemented and tested LenyaSourceFactory
- Started integration of new Lenya/Publication API