Nuxeo CPS: an open source framework for the development of ...
Nuxeo CPS: an open source framework for the development of ...
Nuxeo CPS: an open source framework for the development of ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Nuxeo</strong> <strong>CPS</strong>: <strong>an</strong> <strong>open</strong> <strong>source</strong> <strong>framework</strong> <strong>for</strong> <strong>the</strong> <strong>development</strong> <strong>of</strong> enterprise<br />
content m<strong>an</strong>agement <strong>an</strong>d collaboration applications<br />
Julien Anguenot, Stéf<strong>an</strong>e Fermigier,<br />
Florent Guillaume, Lennart Regebro, Tarek Ziadé<br />
<strong>Nuxeo</strong>, Fr<strong>an</strong>ce<br />
{ja,sf,fg,lr,tz}@nuxeo.com<br />
Je<strong>an</strong>Marc Orliaguet<br />
Chalmers University <strong>of</strong> Technology<br />
Göteborg, Sweden<br />
jmo@ita.chalmers.se<br />
Abstract – <strong>Nuxeo</strong> <strong>CPS</strong> (version 3) is <strong>an</strong> <strong>open</strong> <strong>source</strong>,<br />
GPLlicensed, <strong>framework</strong> designed <strong>for</strong> building content<br />
m<strong>an</strong>agement, collaboration <strong>an</strong>d business processing<br />
applications. It addresses <strong>the</strong> needs <strong>of</strong> web applications<br />
developers to easily create rich document types, with<br />
workflowbased access control, portallike interfaces <strong>for</strong><br />
accessing documents <strong>an</strong>d in<strong>for</strong>mation, <strong>an</strong>d rich services<br />
that match <strong>the</strong> features <strong>of</strong> best <strong>of</strong> breed nonfree<br />
(proprietary) <strong>of</strong>ferings in <strong>the</strong> domain, including: singlesourcing,<br />
versioning, indexing, metadata m<strong>an</strong>agement,<br />
localization <strong>an</strong>d tr<strong>an</strong>slation, subscriptions, notifications,<br />
commenting, <strong>the</strong>ming (user interface customization),<br />
directories m<strong>an</strong>agement (users <strong>an</strong>d groups directories<br />
<strong>for</strong> inst<strong>an</strong>ce) that c<strong>an</strong> be external (LDAP, SQL, etc...),<br />
content scheduling <strong>an</strong>d staging, syndication... Higher<br />
level components, including mail, calendaring <strong>an</strong>d<br />
discussion applications, have been developed on top <strong>of</strong><br />
<strong>the</strong> base <strong>framework</strong>, as well as custom business<br />
applications featuring complex document types <strong>an</strong>d<br />
workflows.<br />
<strong>CPS</strong>3 has been developed by <strong>Nuxeo</strong> SAS, <strong>an</strong> innovative<br />
French comp<strong>an</strong>y specialized in <strong>open</strong> <strong>source</strong> s<strong>of</strong>tware<br />
<strong>an</strong>d services, <strong>an</strong>d a community <strong>of</strong> contributors, since<br />
2003, <strong>an</strong>d is now in use <strong>for</strong> majors projects in <strong>the</strong><br />
Administration, in Fr<strong>an</strong>ce <strong>an</strong>d o<strong>the</strong>r countries, <strong>an</strong>d in<br />
several multinational corporations. It is based on, <strong>an</strong>d<br />
extends in subst<strong>an</strong>tial ways, <strong>the</strong> Zope application server<br />
<strong>an</strong>d its Content M<strong>an</strong>agement Framework.<br />
I. <strong>CPS</strong>3 PROJECT MOTIVATION<br />
Zope is <strong>an</strong> innovative application server started in<br />
1996 <strong>an</strong>d fully <strong>open</strong> <strong>source</strong>d under <strong>the</strong> ZPL in 1998 by<br />
Zope Corporation, <strong>an</strong> Americ<strong>an</strong> comp<strong>an</strong>y. Zope provides<br />
<strong>an</strong> object database, <strong>an</strong> application server with <strong>an</strong><br />
object broker that converts HTTP (or o<strong>the</strong>r protocols)<br />
requests to objects <strong>an</strong>d methods invocation, a security<br />
model, a templating <strong>an</strong>d a scripting l<strong>an</strong>guage, a basic<br />
component model <strong>for</strong> extending <strong>the</strong> application via<br />
dedicated plugins also called “Products”, etc. [ZB].<br />
The Content M<strong>an</strong>agement Framework (CMF)<br />
[CMF], released by Zope Corp. in 2001, provides a<br />
component architecture <strong>an</strong>d some basic services to<br />
write web content m<strong>an</strong>agement applications: membership<br />
services, indexing, document types, <strong>an</strong>d a powerful<br />
documentcentric workflow engine called DCWorkflow<br />
(which was release after <strong>the</strong> CMF was released,<br />
<strong>an</strong>d was first <strong>an</strong> addon to <strong>the</strong> CMF be<strong>for</strong>e being integrated<br />
into it).<br />
<strong>Nuxeo</strong> had worked on several customers projects in<br />
2001 <strong>an</strong>d 2002 using <strong>the</strong> CMF <strong>an</strong>d some basic extensions,<br />
but it appeared quickly that only simple content<br />
m<strong>an</strong>agement – mostly web publishing applications –<br />
but no truly collaborative applications with thous<strong>an</strong>ds<br />
<strong>of</strong> users, could be created with <strong>the</strong> CMF <strong>an</strong>d basic extensions,<br />
<strong>an</strong>d that some major extensions, refactorings,<br />
<strong>an</strong>d new model implementation were needed to<br />
compete, in terms both <strong>of</strong> functional scope <strong>an</strong>d per<strong>for</strong>m<strong>an</strong>ce<br />
under heavy load, in <strong>the</strong> socalled “ECM” (Enterprise<br />
Content M<strong>an</strong>agement) <strong>an</strong>d collaboration applications<br />
markets dominated by proprietary s<strong>of</strong>tware<br />
comp<strong>an</strong>ies like Documentum, OpenText <strong>an</strong>d Interwoven.<br />
The <strong>CPS</strong>3 project was thus launched in 2003 to address<br />
<strong>the</strong>se goals, after <strong>the</strong> comp<strong>an</strong>y had restructured<br />
itself with a R&D department, <strong>an</strong>d considerable re<strong>source</strong>s<br />
have been devoted to develop <strong>the</strong> new <strong>framework</strong>.<br />
First customers projects developed on top <strong>of</strong><br />
<strong>CPS</strong>3 were in production by <strong>the</strong> end <strong>of</strong> 2003, <strong>an</strong>d stable<br />
releases <strong>of</strong> <strong>the</strong> s<strong>of</strong>tware have been issued regularly<br />
since 2004, drastically improving <strong>the</strong> <strong>framework</strong>.<br />
II. EVENTDRIVEN FRAMEWORK<br />
In <strong>an</strong> enterprise contentm<strong>an</strong>agement system<br />
(ECMS), m<strong>an</strong>y components have to be tied toge<strong>the</strong>r to<br />
provide a high level <strong>of</strong> functionality. Some <strong>of</strong> <strong>the</strong> components<br />
are native to <strong>the</strong> <strong>framework</strong>, <strong>an</strong>d some are<br />
added later as optional modules.<br />
M<strong>an</strong>y <strong>of</strong> <strong>the</strong>se components have to cooperate with<br />
each o<strong>the</strong>r to provide <strong>the</strong>ir intended functionality. A<br />
simple example would be a workflow component <strong>an</strong>d<br />
a mail notification component that have to work toge<strong>the</strong>r<br />
to send <strong>an</strong> email to some selected users when a<br />
document ch<strong>an</strong>ges state in <strong>the</strong> workflow (<strong>for</strong> inst<strong>an</strong>ce,<br />
upon creation <strong>of</strong> a new document or publication).<br />
Whereas <strong>the</strong> existing Zope ECMS [CMF, Plone] use<br />
explicit knowledge by each component <strong>of</strong> <strong>the</strong> o<strong>the</strong>r<br />
components that may interact with <strong>the</strong>m, <strong>CPS</strong> chose<br />
<strong>an</strong> eventdriven <strong>framework</strong> <strong>for</strong> <strong>the</strong>se interactions. In<br />
<strong>the</strong> example above, <strong>the</strong> workflow component would<br />
send <strong>an</strong> event when <strong>the</strong> document ch<strong>an</strong>ges state, <strong>an</strong>d<br />
<strong>the</strong> mail notification component would listen to that<br />
event, <strong>an</strong>d dispatch a mail according to <strong>the</strong> policy configured<br />
<strong>for</strong> it.<br />
This provides a greater flexibility to <strong>the</strong> developer<br />
<strong>an</strong>d to <strong>the</strong> integrator. The developer c<strong>an</strong> choose to<br />
send <strong>an</strong> event whenever his module does a signific<strong>an</strong>t
action, but without having direct knowledge <strong>of</strong> what<br />
o<strong>the</strong>r modules may or may not act on this event. He<br />
c<strong>an</strong> also choose to register his module as a listener <strong>for</strong><br />
some kind <strong>of</strong> events, <strong>an</strong>d decide what has to be done<br />
when <strong>an</strong> event is received. The integrator c<strong>an</strong> choose<br />
what modules she installs, <strong>an</strong>d knows <strong>the</strong>y'll work toge<strong>the</strong>r<br />
if it makes sense <strong>for</strong> <strong>the</strong>m. Fur<strong>the</strong>rmore, <strong>the</strong><br />
policy <strong>of</strong> <strong>the</strong> interaction (to whom <strong>the</strong> mail should be<br />
sent, in our example) c<strong>an</strong> be clearly specified in <strong>the</strong><br />
configuration <strong>of</strong> <strong>the</strong> listener.<br />
III. REPOSITORY AND PROXIES<br />
Zope's object database (ZODB) lends itself naturally<br />
to hierarchical object structures, <strong>an</strong>d this is how most<br />
ECMS are implemented in Zope <strong>an</strong>d CMF, including<br />
earlier versions <strong>of</strong> <strong>CPS</strong>. The object orientation <strong>an</strong>d <strong>the</strong><br />
orthogonal persistence <strong>of</strong> <strong>the</strong> ZODB leads to a rapid<br />
<strong>development</strong> process, removes m<strong>an</strong>y <strong>of</strong> <strong>the</strong> troubles<br />
you get when using relational databases, <strong>an</strong>d is more<br />
natural <strong>for</strong> document databases <strong>an</strong>d document representation.<br />
But relational databases facilitate multiple<br />
orthogonal views on data in a way that hierarchical<br />
object databases don't.<br />
In <strong>CPS</strong>, unlike <strong>the</strong> classical approach outlined by <strong>the</strong><br />
default component Zope CMF, documents are stored<br />
in a central repository (see [BER] <strong>an</strong>d [JCR] <strong>for</strong> background<br />
in<strong>for</strong>mation about repositories) <strong>an</strong>d “proxies”<br />
pointing to <strong>the</strong> documents are spread throughout <strong>the</strong><br />
website structure. The user only sees proxies, <strong>an</strong>d <strong>for</strong><br />
her <strong>the</strong>y look like normal documents, but <strong>the</strong> proxies<br />
are just a kind <strong>of</strong> pointer, a link to <strong>the</strong> real in<strong>for</strong>mation.<br />
In <strong>the</strong> repository, documents are stored with <strong>an</strong><br />
additional version number.<br />
Because <strong>the</strong> proxies have additional metadata, a<br />
number <strong>of</strong> adv<strong>an</strong>ced use cases c<strong>an</strong> be fulfilled:<br />
• Multipublication: A single document c<strong>an</strong> be<br />
published in different parts <strong>of</strong> <strong>the</strong> site. This is<br />
because a document c<strong>an</strong> be pointed to by<br />
several unrelated proxies.<br />
• Versioning, checkin/checkout: Documents c<strong>an</strong><br />
be present in several different versions in <strong>the</strong><br />
repository, <strong>an</strong>d a proxy c<strong>an</strong> point to a specific<br />
version, so different proxies c<strong>an</strong> point to<br />
different versions <strong>of</strong> a single document. This<br />
makes it possible to have a “validated” version<br />
somewhere, <strong>an</strong>d a “working” version somewhere<br />
else; documents don't need to be removed from<br />
publication while <strong>the</strong>y are edited. The<br />
versioning model chosen by <strong>the</strong> default <strong>CPS</strong><br />
implementation is based on a simplified version<br />
<strong>of</strong> WebDAV's DeltaV protocol [DeltaV].<br />
• Multilinguism: A proxy c<strong>an</strong> point to several<br />
documents, <strong>the</strong> one actually displayed being<br />
chosen according to <strong>the</strong> user's preferred<br />
l<strong>an</strong>guage.<br />
• Multiple workflow states: Because <strong>the</strong> proxy<br />
objects are <strong>the</strong> ones that follow <strong>the</strong> workflow, it<br />
is possible to have <strong>the</strong> same version <strong>of</strong> a<br />
document be published in some part <strong>of</strong> <strong>the</strong> site<br />
<strong>an</strong>d still be pending in <strong>an</strong>o<strong>the</strong>r part where <strong>the</strong><br />
local reviewer has not had time to do his work.<br />
It is achieved by applying a different workflow<br />
on each proxy object representing <strong>the</strong> needed<br />
process in <strong>the</strong> context <strong>of</strong> <strong>the</strong> proxy object.<br />
• Multiple storages: Because <strong>the</strong> repository is <strong>the</strong><br />
central point <strong>of</strong> access <strong>for</strong> storage, it is possible<br />
to implement <strong>an</strong>d plug different storages on <strong>the</strong><br />
repository to store data into o<strong>the</strong>r databases like<br />
XML or SQL databases or even plain file system.<br />
The repository service unifies all <strong>the</strong>se backends<br />
<strong>an</strong>d provides a single view <strong>of</strong> <strong>the</strong> storage space<br />
(this feature is commonly use to set up one<br />
different database per year, <strong>for</strong> example).<br />
• Placeful security: Only <strong>the</strong> proxy objects are<br />
aware about <strong>the</strong> security that is applied to <strong>the</strong>m<br />
according to <strong>the</strong> context. (i.e : parent folder)<br />
<strong>an</strong>d controlled by <strong>the</strong> workflow applied on it in<br />
a placeful m<strong>an</strong>ner.<br />
All <strong>the</strong>se adv<strong>an</strong>ced features come nearly <strong>for</strong> free<br />
once you implement a proper indirection, <strong>the</strong> proxies,<br />
between <strong>the</strong> hierarchical tree <strong>an</strong>d <strong>the</strong> data.<br />
IV. DOCUMENT TYPES<br />
A. Schemas, widgets <strong>an</strong>d layouts<br />
Document types are created in <strong>CPS</strong> using <strong>the</strong> abstraction<br />
<strong>of</strong> schemas <strong>an</strong>d layouts.<br />
A schema describes <strong>the</strong> structure <strong>of</strong> a document as a<br />
set <strong>of</strong> typed fields. It is its sem<strong>an</strong>tic. The fields may be<br />
strings, integers, lists <strong>of</strong> strings, files, or <strong>an</strong>y arbitrary<br />
complex data type. A default set <strong>of</strong> fields is provided.<br />
A layout specifies how a schema is to be rendered<br />
<strong>an</strong>d edited, using a list <strong>of</strong> widgets that each specify <strong>the</strong><br />
user interface <strong>an</strong>d display constraints <strong>for</strong> one or more<br />
fields. New field <strong>an</strong>d widget types c<strong>an</strong> easily be added<br />
by <strong>the</strong> programmers using dedicated registries.<br />
The “layout” abstraction is import<strong>an</strong>t, because <strong>the</strong>n<br />
a field is not tied to a specific widget <strong>for</strong> its display.<br />
This allows ch<strong>an</strong>ges to <strong>the</strong> View or Controller (in <strong>the</strong><br />
MVC paradigm) completely independently <strong>of</strong> <strong>the</strong><br />
Model. Different layouts c<strong>an</strong> be used <strong>for</strong> <strong>the</strong> same<br />
schema depending on <strong>the</strong> circumst<strong>an</strong>ces, which makes<br />
it possible to have different “edit” <strong>an</strong>d “view” pages,<br />
or have several “view” pages that display a subset <strong>of</strong><br />
all <strong>the</strong> in<strong>for</strong>mation available in <strong>the</strong> document – this is<br />
typically used <strong>for</strong> <strong>the</strong> Dublin Core part <strong>of</strong> <strong>the</strong> metadata<br />
<strong>for</strong> inst<strong>an</strong>ce.<br />
Schemas <strong>an</strong>d layouts are a fundamental innovation<br />
in <strong>CPS</strong>3, in that <strong>the</strong>y allow <strong>the</strong> quick <strong>development</strong> or<br />
<strong>the</strong> customization <strong>of</strong> rich document types. They are<br />
now <strong>the</strong> foundation <strong>for</strong> most <strong>of</strong> <strong>the</strong> <strong>CPS</strong> user interface,<br />
including directories <strong>an</strong>d portlets (see below).<br />
Although schemas are not a new concept in ECMS,<br />
<strong>CPS</strong>3 provided <strong>the</strong> first schema system <strong>for</strong> Zope where<br />
schemas were stored in <strong>the</strong> object database. This enabled<br />
us to create <strong>CPS</strong>TypeMaker, <strong>an</strong> innovative tool<br />
used to automatically create <strong>an</strong>d modify document<br />
types on <strong>the</strong> portal. It provides a complete WYSIWYG
editor that generates <strong>an</strong>d edits <strong>CPS</strong> schemas <strong>an</strong>d layouts<br />
definitions used by <strong>CPS</strong>Document to create inst<strong>an</strong>ces<br />
<strong>of</strong> a given type. This editor brings <strong>CPS</strong>'s powerful<br />
document <strong>development</strong> to a higher lever, making<br />
it usable by nondevelopers that wish to easily extend<br />
or create document types on <strong>the</strong> portal as well as enabling<br />
rapidprototyping. Fur<strong>the</strong>rmore, <strong>the</strong> definitions<br />
generated by <strong>the</strong> tool are more reliable <strong>an</strong>d less bugprone<br />
th<strong>an</strong> hum<strong>an</strong>made definitions.<br />
B. Flexible documents<br />
In addition to obeying a schema <strong>an</strong>d a layout according<br />
to <strong>the</strong>ir type, documents c<strong>an</strong> have a “flexible”<br />
part that c<strong>an</strong> be ch<strong>an</strong>ged dynamically by <strong>the</strong> user. The<br />
user is able to m<strong>an</strong>ipulate a given inst<strong>an</strong>ce <strong>of</strong> a document<br />
<strong>an</strong>d add new fields <strong>an</strong>d widgets to it. Using this,<br />
<strong>the</strong> user ch<strong>an</strong>ges <strong>the</strong> schema <strong>of</strong> his document easily,<br />
<strong>for</strong> inst<strong>an</strong>ce by adding several images or different text<br />
zones, <strong>an</strong>d he c<strong>an</strong> also ch<strong>an</strong>ge <strong>the</strong> way a given field is<br />
displayed, by ch<strong>an</strong>ging <strong>the</strong> configuration <strong>of</strong> <strong>the</strong> widget<br />
associated to it, or by ch<strong>an</strong>ging <strong>the</strong> widget completely.<br />
Not all sites w<strong>an</strong>t this flexibility <strong>of</strong> course, <strong>an</strong>d this<br />
behavior c<strong>an</strong> be turned on <strong>an</strong>d <strong>of</strong>f per document type,<br />
<strong>an</strong>d, inside a document type, per schema.<br />
These flexible documents types (<strong>an</strong>d actually all<br />
document types based on schemas <strong>an</strong>d layouts) are<br />
CMF content types based on <strong>CPS</strong>'s “Flexible Type In<strong>for</strong>mation”.<br />
This object describes <strong>for</strong> a given content<br />
type what schemas to use, what layouts, which <strong>of</strong><br />
<strong>the</strong>m are flexible, <strong>an</strong>d additional in<strong>for</strong>mation like<br />
“clusters” that help in having several different views<br />
<strong>for</strong> a single document (main page, metadata page,<br />
short view, etc.).<br />
C. Vocabularies<br />
Vocabularies store a correspondence between keys<br />
<strong>an</strong>d a hum<strong>an</strong>readable label. They c<strong>an</strong> be ordered,<br />
<strong>an</strong>d may get <strong>the</strong>ir data from <strong>an</strong> external <strong>source</strong> or be<br />
computed. A central repository <strong>of</strong> vocabularies is provided<br />
by <strong>CPS</strong> <strong>an</strong>d users c<strong>an</strong> control it through <strong>the</strong> <strong>CPS</strong><br />
user interface. Local vocabularies are available as well<br />
to provide placeful restricted vocabularies to gr<strong>an</strong>ted<br />
principals. They are typically used with widgets within<br />
<strong>the</strong> <strong>for</strong>ms.<br />
D. Data Structure / Data Model<br />
When interacting with documents defined through<br />
schemas, several abstractions are used. The data as it<br />
is seen by <strong>the</strong> user, <strong>an</strong>d <strong>the</strong> data as it is m<strong>an</strong>ipulated<br />
by <strong>the</strong> code, use different abstractions.<br />
A DataStructure holds <strong>the</strong> useroriented version <strong>of</strong><br />
<strong>the</strong> data, designed to be displayed, ei<strong>the</strong>r computed<br />
from <strong>the</strong> real data be<strong>for</strong>e display or returned by <strong>the</strong><br />
browser from input fields.<br />
The DataModel is a tr<strong>an</strong>sient object that holds in<strong>for</strong>mation<br />
about a particular document's data structure in<br />
<strong>the</strong> native <strong>for</strong>mat <strong>for</strong> that data. For inst<strong>an</strong>ce, in <strong>the</strong><br />
DataModel, <strong>an</strong> integer is really represented as a<br />
python integer, whereas <strong>the</strong> corresponding DataStructure,<br />
designed <strong>for</strong> display, holds a string representation<br />
<strong>of</strong> it. The DataModel also includes <strong>the</strong> underlying<br />
schemas <strong>an</strong>d <strong>the</strong> storage options. It acts as a single<br />
point <strong>of</strong> access to <strong>the</strong> document structure. It is <strong>the</strong> one<br />
responsible <strong>for</strong> validating access to <strong>the</strong> data according<br />
to right restrictions (ACLs) specified on <strong>the</strong> fields. It<br />
could also be used as a cache <strong>of</strong> <strong>the</strong> document's data.<br />
The actual storage into objects from <strong>the</strong> DataModel,<br />
or <strong>the</strong> extraction <strong>of</strong> data from <strong>an</strong> object is per<strong>for</strong>med<br />
by a storage adapter.<br />
E. Storage adapters<br />
A storage adapter is used by a DataModel to get/set<br />
<strong>the</strong> data from/to somewhere. It is is parameterized on<br />
one h<strong>an</strong>d by some context, <strong>for</strong> inst<strong>an</strong>ce <strong>an</strong> object, <strong>an</strong>d<br />
on <strong>the</strong> o<strong>the</strong>r h<strong>an</strong>d by <strong>the</strong> schema that drives it.<br />
A storage adapter c<strong>an</strong> also be linked to no object,<br />
<strong>for</strong> inst<strong>an</strong>ce <strong>for</strong> during object creation.<br />
The most basic implementation (AttributeStorageAdapter)<br />
is simply using attributes on <strong>an</strong> object. A<br />
variation on it (MetadataStorageAdapter) has knowledge<br />
<strong>of</strong> <strong>the</strong> Dublin Core API <strong>of</strong> <strong>the</strong> CMF, <strong>an</strong>d uses accessors<br />
so that <strong>the</strong> “title” field is not directly stored in<br />
<strong>the</strong> “title” attribute but is get/set using <strong>the</strong> Title() <strong>an</strong>d<br />
setTitle() methods.<br />
More complex storage adapters, used in directories<br />
<strong>for</strong> inst<strong>an</strong>ce, store data in <strong>an</strong> SQL table, or in LDAP.<br />
V. DIRECTORIES<br />
A. The directory abstraction<br />
It has been recognized early in <strong>the</strong> <strong>development</strong> <strong>of</strong><br />
<strong>CPS</strong> that not all data m<strong>an</strong>ipulated by <strong>an</strong> ECMS c<strong>an</strong> be<br />
considered as a “document” from <strong>the</strong> user or infrastructure's<br />
point <strong>of</strong> view. For inst<strong>an</strong>ce, this is <strong>the</strong> case<br />
<strong>for</strong> <strong>the</strong> in<strong>for</strong>mation about <strong>the</strong> users <strong>the</strong>mselves, <strong>the</strong><br />
way <strong>the</strong>y are org<strong>an</strong>ized into groups. These “nondocument”<br />
data have several common features:<br />
• <strong>the</strong>y are not workflowed or versioned,<br />
• <strong>the</strong>y are stored in <strong>an</strong> external storage (LDAP,<br />
SQL),<br />
• <strong>the</strong>y have to be searched efficiently,<br />
• <strong>the</strong>y still obey a clear schema.<br />
The “directory” abstraction <strong>of</strong> <strong>CPS</strong> covers <strong>the</strong>se use<br />
cases. A directory contains entries that obey a schema<br />
<strong>an</strong>d are displayed using a layout, thus reusing all <strong>the</strong><br />
<strong>framework</strong> described above <strong>for</strong> documents (indeed,<br />
when displayed <strong>an</strong>d edited by a user, <strong>the</strong>re may be no<br />
difference at all between a document <strong>an</strong>d a directory<br />
entry).<br />
In <strong>CPS</strong>, typical directories include:<br />
• members<br />
• groups<br />
• roles<br />
B. Directory backends
A number <strong>of</strong> backends have been written to cover<br />
<strong>the</strong> common use cases <strong>of</strong> data storage or data aggregation<br />
<strong>for</strong> directories.<br />
The st<strong>an</strong>dard data storage methods are:<br />
• ZODB storage (inside a BTree)<br />
• LDAP storage<br />
• SQL storage<br />
Additional backends provide “metadirectories”,<br />
which c<strong>an</strong> aggregate different underlying directories<br />
<strong>an</strong>d make <strong>the</strong>m appear as a new one. <strong>CPS</strong> provides<br />
two <strong>of</strong> <strong>the</strong>se:<br />
• Meta Directory<br />
• Stacking Directory<br />
The Meta Directory builds each <strong>of</strong> its entries by taking<br />
some fields from some underlying directory. For<br />
inst<strong>an</strong>ce, <strong>the</strong> name <strong>an</strong>d password fields from <strong>an</strong> entry<br />
c<strong>an</strong> come from <strong>an</strong> LDAP backend, while <strong>the</strong> login time<br />
c<strong>an</strong> come from a ZODB backend.<br />
The Stacking Directory does a union <strong>of</strong> all <strong>the</strong> underlying<br />
directories, so that you c<strong>an</strong> have <strong>for</strong> inst<strong>an</strong>ce<br />
members coming from LDAP <strong>an</strong>d members coming<br />
from <strong>an</strong> SQL table appear inside a single homogenous<br />
directory.<br />
C. User m<strong>an</strong>agement<br />
Using <strong>the</strong> directory abstraction, it becomes much<br />
easier to m<strong>an</strong>age users because <strong>the</strong> directories expose<br />
a single unified API. The st<strong>an</strong>dard user m<strong>an</strong>agement<br />
components (called “user folders” in Zope) c<strong>an</strong> be replaced<br />
by a simple one that specifies which directory<br />
to use to store users, <strong>an</strong>d how to identify <strong>an</strong>d au<strong>the</strong>nticate<br />
<strong>the</strong>m. This is <strong>the</strong> role <strong>of</strong> <strong>CPS</strong>UserFolder.<br />
Using metadirectories, <strong>an</strong> arbitrary number <strong>of</strong> user<br />
<strong>source</strong>s c<strong>an</strong> be aggregated <strong>an</strong>d used seamlessly by <strong>the</strong><br />
rest <strong>of</strong> <strong>the</strong> <strong>framework</strong>. This makes it possible to adapt<br />
to complex org<strong>an</strong>ization's needs. For inst<strong>an</strong>ce some <strong>of</strong><br />
<strong>the</strong> users may come from a readonly corporate LDAP<br />
directory, with <strong>the</strong>ir last login date <strong>an</strong>d picture stored<br />
in <strong>an</strong> associated directory in <strong>the</strong> ZODB, <strong>an</strong>d some o<strong>the</strong>r<br />
users may be stored in several SQL tables on different<br />
servers.<br />
<strong>CPS</strong>UserFolder c<strong>an</strong> also take over <strong>the</strong> role <strong>of</strong> CMF's<br />
MembershipTool <strong>an</strong>d MemberDataTool, by delegating<br />
all <strong>the</strong>ir functions to directories.<br />
D. Vocabularies <strong>an</strong>d directories<br />
The vocabularies objects used by some widgets c<strong>an</strong><br />
be interfaced to directories, using <strong>the</strong> DirectoryVocabulary.<br />
This type <strong>of</strong> vocabulary specifies which directory it<br />
refers to. The directory in turn has <strong>the</strong> specification <strong>of</strong><br />
what field to use as primary key (id), <strong>an</strong>d what field<br />
to use as uservisible representation (title). Using this,<br />
<strong>the</strong> vocabulary c<strong>an</strong> syn<strong>the</strong>size something that c<strong>an</strong> be<br />
used in a menu or a list <strong>of</strong> checkboxes.<br />
This bridging is very useful to provide access to<br />
st<strong>an</strong>dardized tablelike data like list <strong>of</strong> physical items<br />
whose full definition is stored in a directory.<br />
VI. WORKFLOWDRIVEN MODEL<br />
Most <strong>of</strong> <strong>CPS</strong> behavior related to documents, security,<br />
users is workflowdriven. <strong>CPS</strong>Workflow [TCH] extends<br />
heavily <strong>the</strong> basic documentbased DCWorkflow<br />
by providing:<br />
• local workflow configurations (documents may<br />
follow different workflows depending on where<br />
<strong>the</strong>y are located in <strong>the</strong> website's arborescent<br />
structure) see <strong>the</strong> proxy <strong>an</strong>d repository section<br />
in this document,<br />
• specific workflow behaviours (tr<strong>an</strong>sition flags)<br />
that address <strong>the</strong> needs <strong>of</strong> multipublishing,<br />
versioning, grouping related document in <strong>the</strong><br />
same workflow, etc.<br />
Logic is hooked on <strong>the</strong> tr<strong>an</strong>sitions coping with<br />
specific logic rules defined by <strong>the</strong> user or still<br />
possible actions allowed to <strong>the</strong> user in a given<br />
context, etc... Here, this is specific business logic<br />
that is implemented.<br />
• state behaviours protecting <strong>the</strong> object following<br />
<strong>the</strong> workflow since all <strong>the</strong> tr<strong>an</strong>sition are shared<br />
in between <strong>the</strong> states. (Used only in <strong>the</strong><br />
workflow stack tr<strong>an</strong>sition flags.)<br />
• “stack” workflows that c<strong>an</strong> be used <strong>for</strong> dynamic<br />
workflow chain allocation that will take care <strong>of</strong><br />
dynamic local role distribution to principals<br />
according to <strong>the</strong> policy <strong>of</strong> <strong>the</strong> stack definition<br />
associated to <strong>the</strong> stack object.<br />
The workflow stacks are <strong>the</strong> latest <strong>an</strong>d most complex<br />
<strong>of</strong> <strong>the</strong>se extensions. A stack provides dynamic behavior<br />
(in <strong>the</strong> sense that <strong>the</strong>y c<strong>an</strong> be different <strong>for</strong> documents<br />
following <strong>the</strong> same workflow) <strong>of</strong> who is allowed<br />
to work on a document, <strong>an</strong>d along what rules.<br />
A typical use case is when, during <strong>the</strong> validation <strong>of</strong> a<br />
document, <strong>the</strong> reviewer decides that he has to postpone<br />
his decision until <strong>the</strong> document has been approved<br />
by specific users. The reviewer <strong>the</strong>n adds <strong>the</strong><br />
users to a stack; <strong>the</strong>se users c<strong>an</strong> validate or not <strong>the</strong><br />
document <strong>an</strong>d when <strong>the</strong> stack is empty <strong>the</strong> document<br />
returns to <strong>the</strong> reviewer <strong>for</strong> his final decision.<br />
Note that while <strong>the</strong> term “stack” is used to describe<br />
<strong>the</strong>m, <strong>the</strong>se objects c<strong>an</strong> actually implement <strong>an</strong>y data<br />
policy <strong>the</strong>y w<strong>an</strong>t. They could be simple sets, or associated<br />
to more complex algorithms.<br />
Several stacks associated to several stack definitions<br />
c<strong>an</strong> be associated to a given workflow <strong>an</strong>d thus to a<br />
given object. The worklow tool knows about <strong>the</strong>ir existences<br />
<strong>an</strong>d how to syn<strong>the</strong>size <strong>the</strong> permissions / roles<br />
maps provided by <strong>the</strong>se stacks. It knows as well how<br />
to per<strong>for</strong>m diff through <strong>the</strong> process.<br />
As well, <strong>the</strong> stack object are under versionning within<br />
<strong>the</strong> workflow history associated to <strong>an</strong> object so that<br />
we c<strong>an</strong> track <strong>the</strong> ch<strong>an</strong>ges <strong>of</strong> <strong>the</strong> stack <strong>the</strong>mselves <strong>the</strong>m<br />
during <strong>the</strong> process.<br />
With <strong>the</strong> stack workflow extension it gives to <strong>CPS</strong><br />
<strong>an</strong> hybrid workflow model extending <strong>the</strong> basic document<br />
centric model provided by DCWorkflow. It<br />
keeps <strong>the</strong> use <strong>of</strong> <strong>the</strong> workflow really straight <strong>for</strong>ward<br />
<strong>for</strong> <strong>the</strong> users <strong>an</strong>d <strong>the</strong> developers but still provides
powerful <strong>an</strong>d dynamic smart data structures hooked<br />
on <strong>the</strong> workflow that allows <strong>the</strong> possibility <strong>of</strong> having<br />
dynamic work items on a given state with a user defined<br />
policy <strong>for</strong> following a tr<strong>an</strong>sition, ch<strong>an</strong>ging state,<br />
etc... It c<strong>an</strong> be object such as tasks <strong>for</strong> inst<strong>an</strong>ce. Registries<br />
are available to extend <strong>the</strong> basic set <strong>of</strong> workflow<br />
stack elements to allow <strong>the</strong> user to implement<br />
<strong>an</strong>d hook its own business logic on its custom workflows.<br />
Moreover, <strong>the</strong> tr<strong>an</strong>sition flags c<strong>an</strong> be seen as activities<br />
embedding business logic controlled by <strong>the</strong> tr<strong>an</strong>sitions.<br />
A. <strong>CPS</strong>Skins<br />
VII. USER INTERFACE<br />
<strong>CPS</strong> was first developed with a portal user interface<br />
based on “boxes”: graphical elements <strong>of</strong> in<strong>for</strong>mation<br />
that ei<strong>the</strong>r <strong>the</strong> webmaster, <strong>the</strong> users locally responsible<br />
<strong>for</strong> content m<strong>an</strong>agement, or registered endusers,<br />
c<strong>an</strong> use to customize <strong>the</strong> content <strong>an</strong>d presentation <strong>of</strong><br />
in<strong>for</strong>mation displayed <strong>for</strong> <strong>the</strong>mselves or <strong>for</strong> o<strong>the</strong>r<br />
users <strong>of</strong> <strong>the</strong> portal.<br />
<strong>CPS</strong>Skins [<strong>CPS</strong>Skins] was developed at Chalmers<br />
University <strong>of</strong> Technology, <strong>the</strong>n integrated in <strong>CPS</strong>, to<br />
address <strong>the</strong> shortcomings <strong>of</strong> <strong>the</strong> “boxes” interface.<br />
<strong>CPS</strong>Skins features:<br />
• a WYSIWYG interface <strong>for</strong> editing <strong>the</strong> global look<br />
<strong>of</strong> a site, also called a “<strong>the</strong>me”; <strong>an</strong> arbitrary<br />
number <strong>of</strong> <strong>the</strong>mes c<strong>an</strong> be created <strong>an</strong>d used <strong>for</strong> a<br />
site,<br />
• a visual editor with drag <strong>an</strong>d drop facility <strong>for</strong><br />
moving in<strong>for</strong>mation boxes, or “templets”,<br />
around <strong>the</strong> page, <strong>an</strong>d reconfiguring <strong>the</strong>m,<br />
• a user interface <strong>for</strong> m<strong>an</strong>aging “portlets”. This<br />
gives users that are not site m<strong>an</strong>agers <strong>the</strong><br />
possibility to add visual content to pages while<br />
preserving <strong>the</strong> overall site design.<br />
Using <strong>CPS</strong>Skins, a site c<strong>an</strong> have its look drastically<br />
altered in a matter <strong>of</strong> minutes, ei<strong>the</strong>r in totality or in<br />
selected subsites. This caters <strong>for</strong> <strong>the</strong> need <strong>of</strong> complex<br />
enterprise websites where different org<strong>an</strong>izational<br />
units need different user experiences. This also makes<br />
it possible to build <strong>an</strong>d distribute <strong>CPS</strong> Business Templates<br />
that allow dramatical ch<strong>an</strong>ges to <strong>the</strong> user interface<br />
to fit business needs (<strong>for</strong> inst<strong>an</strong>ce a public website's<br />
back<strong>of</strong>fice should look different th<strong>an</strong> <strong>an</strong> online<br />
community).<br />
B. <strong>CPS</strong> Portlets<br />
<strong>CPS</strong> portlets are <strong>CPS</strong>Documentbased objects implementing<br />
<strong>the</strong> concepts defined within <strong>the</strong> JSR 168. The<br />
portlets are <strong>the</strong>n using <strong>the</strong> same concepts as documents<br />
<strong>an</strong>d directories. (i.e : schemas / layouts / widgets<br />
/ vocabularies). Schema, layouts, widgets <strong>an</strong>d vocabularies<br />
c<strong>an</strong> thus be shared in between documents ,<br />
directories <strong>an</strong>d portlets.<br />
<strong>CPS</strong> portlets are m<strong>an</strong>aged by <strong>the</strong> WYSIWYG interface<br />
provided by <strong>CPS</strong>Skins <strong>an</strong>d <strong>CPS</strong>3 provides a set <strong>of</strong><br />
default portlets such as navigation, RSS, etc...<br />
<strong>CPS</strong> portlets provides <strong>an</strong> integrated RAM cache<br />
m<strong>an</strong>ager that enh<strong>an</strong>ces <strong>the</strong> page rendering time when<br />
<strong>the</strong> portal has to scale. The cache invalidation system<br />
relies on <strong>the</strong> event service system <strong>of</strong> <strong>CPS</strong>3. It c<strong>an</strong> easily<br />
react on user event such as modification or document<br />
creations, etc.<br />
Note, <strong>the</strong> pages are never loaded entirely with this<br />
system avoiding a lot <strong>of</strong> useless load on <strong>the</strong> application<br />
server. (<strong>the</strong> system is in clear opposition with <strong>the</strong><br />
old main_template / macros system that is not suitable<br />
with <strong>the</strong> Zope application server. Zope is not<br />
PHP)<br />
C. Subscriptions <strong>an</strong>d notifications<br />
Within <strong>CPS</strong>3, content is driven by several workflows<br />
<strong>an</strong>d h<strong>an</strong>dled by different actors depending on <strong>the</strong>ir<br />
rights at a certain time <strong>an</strong>d in a given context. The<br />
workflow schemas within large scaled org<strong>an</strong>izations<br />
c<strong>an</strong> also be extremely complex. It seems to be quite vital<br />
<strong>for</strong> portal actors to be in<strong>for</strong>med when <strong>the</strong>y have to<br />
do something (validating, publishing, tr<strong>an</strong>smitting,<br />
etc.) without having to lookup on <strong>the</strong> portal to find<br />
what <strong>the</strong>y need to do.<br />
<strong>CPS</strong> provides placeful subscriptions controlled by<br />
<strong>the</strong> users gr<strong>an</strong>ted with m<strong>an</strong>ager rights at a given<br />
place. It c<strong>an</strong> subscribe people according to <strong>the</strong>ir roles<br />
or let <strong>the</strong>m subscribe <strong>the</strong>mselves through dedicated<br />
actions <strong>an</strong>d interfaces. The user is notified by mail<br />
when <strong>an</strong> event occurred <strong>for</strong> which <strong>the</strong> user has subscribed.<br />
(or because he has <strong>the</strong> corresponding roles<br />
necessary to receive <strong>the</strong> notification that <strong>the</strong> m<strong>an</strong>ager<br />
set)<br />
The default notification mode is real time. The user<br />
will receive a message directly after <strong>the</strong> event occurred.<br />
It is possible to subscribe in a daily, weekly or<br />
monthly basis. Here, in this case <strong>the</strong> message notifications<br />
are archived <strong>an</strong>d <strong>the</strong>n scheduled by <strong>an</strong> external<br />
service such as cron under *NIX.<br />
Recipients rules objects take care <strong>of</strong> computing <strong>the</strong><br />
recipients based on roles, workflow or <strong>the</strong>y are explicit<br />
ones (when <strong>the</strong> user is subscribing). It is possible to<br />
write computed recipient rules where <strong>the</strong> user is free<br />
to implement whatever logic he w<strong>an</strong>ts to define recipients<br />
<strong>for</strong> a given notification within a given context.<br />
A central m<strong>an</strong>agement tool is provided to <strong>the</strong> site<br />
administrator in ZMI to add events in contexts,<br />
ch<strong>an</strong>ge notification event messages.<br />
The notification blackened c<strong>an</strong> be extended <strong>for</strong><br />
SMS, Jabber or whatever kind <strong>of</strong> notification by design.<br />
VIII. <strong>CPS</strong>MAILACCESS AND <strong>CPS</strong>SHAREDCALENDAR<br />
A. Five use in <strong>CPS</strong><br />
To provide a flexible way to migrate <strong>CPS</strong> to <strong>the</strong> new<br />
Zope version (Zope 3), new products are being devel
oped based on Five, which is a <strong>framework</strong> that allows<br />
you to create Zope 3 products that c<strong>an</strong> be used within<br />
Zope 2.<br />
The binding is not complete, so <strong>the</strong>re are still some<br />
Zope 2 specific parts. But <strong>the</strong> gap between a Product<br />
using Five <strong>an</strong>d a Zope 3 is much smaller th<strong>an</strong> <strong>the</strong> gap<br />
between a pure Zope 2 product <strong>an</strong>d a Zope 3 product.<br />
This is mostly due to <strong>the</strong> fact that Zope 3 products are<br />
architectured in a totally different way.<br />
At this time, <strong>the</strong>re are two <strong>CPS</strong> products that are<br />
based on Five. And <strong>CPS</strong> will have more <strong>an</strong>d more <strong>of</strong><br />
<strong>the</strong>se Five based product, until <strong>the</strong> gap between <strong>CPS</strong> 3<br />
<strong>an</strong>d a product fully based on Zope 3 is minimal.<br />
B. <strong>CPS</strong>MailAccess<br />
<strong>CPS</strong>MailAccess is a fullfeatured webmail that creates<br />
a folder tree containing mail stubs on <strong>the</strong> Zope<br />
side. A mail stub is <strong>an</strong> object that just ga<strong>the</strong>rs minimal<br />
in<strong>for</strong>mation about a mail, like its unique id <strong>an</strong>d headers,<br />
to fullfill 90% <strong>of</strong> client m<strong>an</strong>ipulations. Fur<strong>the</strong>rmore,<br />
it indexes all mails <strong>for</strong> fast Zopeside searches.<br />
The tool keeps a list <strong>of</strong> stateful connections to <strong>the</strong> mail<br />
server to minimize network access.<br />
This architecture lets <strong>the</strong> user synchronize his mailbox<br />
by comparing <strong>the</strong> Zopeside tree to <strong>the</strong> mail server<br />
mail tree. The interface to send mails is based on<br />
AJAX principles <strong>an</strong>d lets <strong>the</strong> user work as if it was using<br />
a heavy client. For example, validations on <strong>the</strong> recipients<br />
emails are done on server side through <strong>an</strong><br />
asynchronous javascript connector, thus avoiding a<br />
full page reload. The ergonomic is also enh<strong>an</strong>ced by<br />
letting <strong>the</strong> user drag <strong>an</strong>d drop mails <strong>an</strong>d folders.<br />
C. <strong>CPS</strong>SharedCalendar<br />
<strong>CPS</strong>SharedCalendar is <strong>an</strong> adv<strong>an</strong>ced, flexible calendaring<br />
component. It allows <strong>CPS</strong> users to access personal<br />
calendars using a web interface. Events on <strong>the</strong><br />
calendar c<strong>an</strong> be shared between multiple users, <strong>an</strong>d a<br />
user c<strong>an</strong> invite o<strong>the</strong>rs, which makes <strong>the</strong> event appear<br />
on <strong>the</strong> o<strong>the</strong>r's calendar.<br />
Features <strong>of</strong> <strong>the</strong> component include a webinterface<br />
<strong>for</strong> m<strong>an</strong>aging calendars, integration with iCalendar<br />
clients (Apple iCal, Mozilla Sunbird, KOrg<strong>an</strong>izer) using<br />
iCalendar, invitation workflow, meeting support,<br />
meeting helper that looks <strong>for</strong> free time, <strong>an</strong>d much<br />
more. See <strong>the</strong> features list <strong>an</strong>d <strong>the</strong> use cases <strong>for</strong> more<br />
in<strong>for</strong>mation.<br />
IX. DEVELOPMENT PROCESS<br />
<strong>CPS</strong> is developed using <strong>an</strong> agile, “testdriven” approach.<br />
When new coded is added, unit tests or functional<br />
tests are added at <strong>the</strong> same time to ensure quality<br />
<strong>an</strong>d nonregression [BEC, HOL]. When a bug is isolated,<br />
a test is written <strong>for</strong> it so that in <strong>the</strong> future no regression<br />
c<strong>an</strong> happen. Periodical automated processes<br />
run <strong>the</strong> whole test set <strong>an</strong>d report <strong>an</strong>y problem. Load<br />
testing is also carried out on preproduction websistes.<br />
<strong>Nuxeo</strong> joined in 2004 <strong>the</strong> EDOS Europe<strong>an</strong> project<br />
[EDOS] to fur<strong>the</strong>r enh<strong>an</strong>ce its tools used to m<strong>an</strong>age<br />
<strong>the</strong> quality <strong>an</strong>d address <strong>the</strong> complexity <strong>of</strong> <strong>the</strong> project<br />
which currently comprises 30 packages <strong>for</strong> its “base”<br />
version, 45 packages <strong>for</strong> its “full” release (all <strong>the</strong> packages<br />
that are currently supported by <strong>the</strong> core <strong>development</strong><br />
team) <strong>an</strong>d a dozen additional packages (packages<br />
under <strong>development</strong> by <strong>the</strong> <strong>CPS</strong> core team, or developed<br />
by independent parties).<br />
<strong>CPS</strong> is originally a project <strong>of</strong> <strong>Nuxeo</strong> but it is <strong>open</strong><br />
<strong>source</strong> <strong>an</strong>d has been extended by thirdparty developers.<br />
The very innovative <strong>CPS</strong>Skins project, <strong>for</strong> inst<strong>an</strong>ce,<br />
was started independently be<strong>for</strong>e being<br />
merged during <strong>the</strong> <strong>CPS</strong> 3.3 <strong>development</strong> cycle. Tr<strong>an</strong>slations<br />
in l<strong>an</strong>guages o<strong>the</strong>r that French <strong>an</strong>d English are<br />
also contributed by third parties.<br />
Development “sprints” (multidays sessions <strong>of</strong> focused<br />
<strong>an</strong>d intense <strong>development</strong>, a concept loosely<br />
based on Extreme Programming <strong>an</strong>d o<strong>the</strong>r agile<br />
methodologies) have been org<strong>an</strong>ized to foster collaboration<br />
between <strong>Nuxeo</strong> <strong>an</strong>d thirdparty developers.<br />
Moreover, to ease collaboration with o<strong>the</strong>r parties,<br />
a community website [CPO], several mailing lists <strong>an</strong>d<br />
a bugtracking system are online <strong>an</strong>d publicly available.<br />
X. APPLICATIONS AND ADOPTION<br />
<strong>CPS</strong> has been used by <strong>Nuxeo</strong>, by major IT comp<strong>an</strong>ies<br />
in Fr<strong>an</strong>ce <strong>an</strong>d Europe, <strong>an</strong>d directly by developers<br />
that download <strong>the</strong> freely distributed <strong>framework</strong>, <strong>for</strong><br />
projects such as:<br />
• major Internet websites <strong>for</strong> French ministries<br />
(Ministry <strong>of</strong> Interior 1 <strong>an</strong>d Ministry <strong>of</strong> Defense 2 ),<br />
local administrations (city <strong>of</strong> Lyon 3 , region <strong>of</strong><br />
Britt<strong>an</strong>y) <strong>an</strong>d publicsector org<strong>an</strong>izations<br />
(French Institute <strong>of</strong> Statutory Auditors 4 ),<br />
• major intr<strong>an</strong>ets <strong>for</strong> French <strong>an</strong>d <strong>for</strong>eign<br />
ministries (Senegal Government, French<br />
ministries <strong>of</strong> Culture <strong>an</strong>d Interior),<br />
• collaborative applications <strong>for</strong> major comp<strong>an</strong>ies<br />
(Groupe Suez, STMicroelectronics, Central B<strong>an</strong>k<br />
<strong>of</strong> WestAfric<strong>an</strong> States),<br />
• paper <strong>an</strong>d electronic mail <strong>an</strong>d files m<strong>an</strong>agement<br />
application <strong>for</strong> <strong>the</strong> French ministries <strong>of</strong> Interior<br />
<strong>an</strong>d Justice<br />
• civilstate m<strong>an</strong>agement <strong>for</strong> <strong>the</strong> city <strong>of</strong><br />
Ant<strong>an</strong><strong>an</strong>arivo <strong>an</strong>d o<strong>the</strong>r cities in Madagascar,<br />
• all <strong>the</strong> web sites <strong>of</strong> <strong>the</strong> Chalmers University <strong>of</strong><br />
Technology 5 in Göteborg, Sweden.<br />
In most <strong>of</strong> <strong>the</strong>se projects, <strong>the</strong> fact that <strong>CPS</strong> is <strong>open</strong><br />
<strong>source</strong> has been a major criterion <strong>for</strong> its selection by<br />
<strong>the</strong> customers, who value <strong>the</strong> higher adaptability <strong>of</strong><br />
<strong>the</strong> s<strong>of</strong>tware, <strong>the</strong> longterm strategic independence it<br />
guar<strong>an</strong>tees, <strong>the</strong> benefits brought by mutualization be<br />
1<br />
http:/ /www.interieur.gouv.fr/<br />
2<br />
http:/ /www.defense.gouv.fr/<br />
3<br />
http:/ /www.lyon.fr/<br />
4<br />
http:/ /www.cncc.fr/<br />
5<br />
http:/ /www.chalmers.se/
tween similar projects carried out <strong>for</strong> different customers<br />
or by different users, <strong>an</strong>d <strong>the</strong> lower price when<br />
<strong>the</strong> application has to scale to tens <strong>of</strong> inst<strong>an</strong>ces <strong>an</strong>d/or<br />
tens <strong>of</strong> thous<strong>an</strong>ds <strong>of</strong> users.<br />
Th<strong>an</strong>ks to <strong>the</strong> efficiency <strong>of</strong> <strong>the</strong> Open Source <strong>development</strong><br />
<strong>an</strong>d mutualisation models, <strong>an</strong>d <strong>the</strong> technical<br />
excellence <strong>of</strong> <strong>the</strong> Zope <strong>framework</strong>, <strong>CPS</strong> has been compared<br />
favorably by customers <strong>an</strong>d industry <strong>an</strong>alysts<br />
against <strong>the</strong> market leading proprietary solutions.<br />
XI. FUTURE WORK<br />
A. Evolution <strong>CPS</strong> 3.4 <strong>an</strong>d beyond<br />
<strong>CPS</strong> 3 has still a number <strong>of</strong> pl<strong>an</strong>ned improvements<br />
to its framwork, that will appear in <strong>CPS</strong> 3.4 or later<br />
Zope 2based releases. Among <strong>the</strong>m are:<br />
• Use <strong>of</strong> CMFSetup <strong>for</strong> full XML input/ouput <strong>of</strong> <strong>the</strong><br />
site configuration <strong>an</strong>d <strong>of</strong> <strong>the</strong> content<br />
• Speed improvements by optimizing <strong>the</strong> security<br />
mech<strong>an</strong>isms used by <strong>the</strong> proxies<br />
• Use PAS <strong>for</strong> au<strong>the</strong>ntication with directory plugins<br />
<strong>for</strong> storage.<br />
• ...<br />
• Five<br />
• Scalability: we w<strong>an</strong>t <strong>CPS</strong> to scale to hundreds <strong>of</strong><br />
thous<strong>an</strong>ds <strong>of</strong> users <strong>an</strong>d terabytes <strong>of</strong> document<br />
storage.<br />
• ...<br />
B. Refactoring to Zope 3<br />
Zope is currently undergoing a tr<strong>an</strong>sition from <strong>the</strong><br />
now classical Zope 2 to <strong>the</strong> very innovative, fully componentbased<br />
Zope 3 [RIC, WEI]. But although architecturally<br />
superior to Zope 2, Zope 3 currently lacks<br />
<strong>the</strong> content m<strong>an</strong>agement facilities provided by <strong>the</strong><br />
CMF.<br />
Work has been started in mid2004 at <strong>Nuxeo</strong> <strong>an</strong>d<br />
o<strong>the</strong>r comp<strong>an</strong>ies to gradually migrate <strong>the</strong> functionalities<br />
<strong>of</strong> <strong>the</strong> CMF <strong>an</strong>d <strong>CPS</strong>3 to <strong>the</strong> Zope3 <strong>framework</strong>.<br />
This migration is to be understood as a complete<br />
rearchitecturing, <strong>an</strong>d not a simple port, but upwards<br />
compatibility with <strong>the</strong> existing <strong>CPS</strong> 3 inst<strong>an</strong>ces is to be<br />
taken into account during <strong>the</strong> <strong>development</strong>.<br />
To ensure <strong>the</strong> wide adoption <strong>of</strong> <strong>the</strong> new underlining<br />
<strong>framework</strong>, <strong>an</strong>d to benefit from all <strong>the</strong> brainpower <strong>of</strong><br />
<strong>the</strong> Zope ECM <strong>an</strong>d Zope 3 developers communities,<br />
<strong>Nuxeo</strong> has started a worldwide collaboration with<br />
o<strong>the</strong>r comp<strong>an</strong>ies <strong>an</strong>d individual developers by setting<br />
up a collaborative website [Z3lab] <strong>an</strong>d a mailing list<br />
<strong>an</strong>d org<strong>an</strong>izing or participating in sprints dedicated to<br />
<strong>the</strong> Zope 3 ECM project.<br />
It is expected that a fully Zope 3based version <strong>of</strong><br />
<strong>CPS</strong> (tentatively called <strong>CPS</strong>4) will be available in prototype<br />
<strong>for</strong>m by <strong>the</strong> middle <strong>of</strong> 2006.<br />
XII. RELATED WORKS<br />
Plone [Plone] is <strong>an</strong>o<strong>the</strong>r content m<strong>an</strong>agement based<br />
on Zope <strong>an</strong>d <strong>the</strong> CMF. Plone doesn't use <strong>the</strong> repository/proxies<br />
model <strong>of</strong> <strong>CPS</strong> which makes developing versioncontrolled<br />
application harder th<strong>an</strong> with <strong>CPS</strong>.<br />
Plone, as <strong>of</strong> version 2.0, uses Archetypes, a <strong>framework</strong><br />
<strong>for</strong> creating content types similar to<br />
<strong>CPS</strong>Schemas/<strong>CPS</strong>Document, but Archetypes is mostly<br />
based on code generation or global schemas, whereas<br />
<strong>CPS</strong> has placeful (local) schemas that c<strong>an</strong> easily be<br />
customized by <strong>the</strong> administrator in <strong>the</strong> ZMI (placeful<br />
schemas also allow perdocument schemas, embodied<br />
in <strong>CPS</strong> as flexible documents).<br />
Silva [Silva] is a content m<strong>an</strong>agement based on<br />
Zope (without <strong>the</strong> CMF) <strong>an</strong>d with a strong emphasis<br />
on collaborative XML documents production.<br />
The <strong>CPS</strong> event system is based on ideas borrowed<br />
from Zope 3. The main difference is that in <strong>CPS</strong> events<br />
are sent to a placeful event service, when in Zope 3<br />
<strong>the</strong>y are sent to a global one, but <strong>the</strong> difference is not<br />
crucial as one c<strong>an</strong> emulate <strong>the</strong> o<strong>the</strong>r.<br />
<strong>CPS</strong>UserFolder is a big simplification <strong>of</strong> <strong>the</strong> user<br />
folder <strong>framework</strong>, because it delegates actual storage<br />
to o<strong>the</strong>r <strong>framework</strong>s, <strong>an</strong>d concentrates on user au<strong>the</strong>ntication.<br />
Zope 2's Pluggable Au<strong>the</strong>ntication Service<br />
(PAS) (or Zope 3's equivalent) provides this kind<br />
<strong>of</strong> abstraction, but <strong>CPS</strong>UserFolder benefits from <strong>the</strong><br />
power <strong>of</strong> directories. However it only deals with storage,<br />
not au<strong>the</strong>ntication; in <strong>the</strong> future <strong>the</strong> two will be<br />
bridged.<br />
We don't know <strong>of</strong> <strong>an</strong>y system equivalent to<br />
<strong>CPS</strong>Skins.<br />
XIII. REFERENCES<br />
[BEC] K. Beck, “Test Driven Development: by Example”,<br />
AddisonWesley Pr<strong>of</strong>essional, 2002.<br />
[BER] Philip A. Bernstein, "Repositories <strong>an</strong>d Object<br />
Oriented Databases," ACM SIGMOD Record, vol.<br />
27, no. 1, march 1998 (http:/ / www.sigmod <br />
.org/record /issues / 9803 / b ernstein.ps )<br />
[CMF] http:/ / www.zope.org/Products /CMF/<br />
[CPO] http:/ / www.cps - project.org/<br />
[<strong>CPS</strong>Skins]<br />
http:/ / www.medic.chalmers.se / ~ j m o / <strong>CPS</strong>/<br />
[DeltaV] http:/ /www.webdav.org/ deltav /<br />
[EDOS] S. Abiteboul, X. Leroy, B. Vroldjak, C. Brice,<br />
R. Di Cosmo, S. Fermigier, T. Milo, A. Sagi, Y.<br />
Shtossel, S. Laurière, F. Lepied, R. Pop, F. Villard,<br />
E. P<strong>an</strong>to, J.P. Smets, “EDOS: Environment <strong>for</strong><br />
<strong>the</strong> Development <strong>an</strong>d Distribution <strong>of</strong> Open Source<br />
S<strong>of</strong>tware,” to appear in OSS2005, Genova.<br />
[HOL] S. Holek, “Unit Testing Zope <strong>for</strong> Fun <strong>an</strong>d Pr<strong>of</strong>it”,<br />
EuroPython 2002,<br />
http:/ / www.zope.org/Members / shh /UnitTes<br />
tingZope.pdf<br />
[JCR] The Java Content Repository, JCR170,<br />
http:/ / jcp.org /en / j sr / d e tail?id=170<br />
[Plone] http:/ /www.plone.org /<br />
[RIC] S. Richter, “The Zope 3 Developer's H<strong>an</strong>dbook”,<br />
New Riders, 2005.
[Silva] http:/ /www.infrae.com / products / silva<br />
[TCH] A. Tchertchi<strong>an</strong>, “<strong>CPS</strong>Workflow: how to set up<br />
workflows using <strong>CPS</strong>Workflow,” june 2005, available<br />
on http:/ /www.cps - project.org/<br />
[WEI] P. von Weitershausen, “Web Component Development<br />
with Zope 3”, Springer, 2005.<br />
[Z3lab] http:/ /www.z3lab.org /<br />
[ZB] A. Latteier, M. Pelletier, “The Zope Book”, New<br />
Riders, 2001.