13.04.2015 Views

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 ...

SHOW MORE
SHOW LESS

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 />

GPL­licensed, <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 />

workflow­based access control, portal­like 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 non­free<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 />

document­centric 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> add­on 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> so­called “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. EVENT­DRIVEN FRAMEWORK<br />

In <strong>an</strong> enterprise content­m<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> event­driven <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 />

• Multi­publication: 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, check­in/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 non­developers that wish to easily extend<br />

or create document types on <strong>the</strong> portal as well as enabling<br />

rapid­prototyping. 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> user­oriented 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 “non­document”<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 “meta­directories”,<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 meta­directories, <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 read­only 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 user­visible 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 table­like data like list <strong>of</strong> physical items<br />

whose full definition is stored in a directory.<br />

VI. WORKFLOW­DRIVEN MODEL<br />

Most <strong>of</strong> <strong>CPS</strong> behavior related to documents, security,<br />

users is workflow­driven. <strong>CPS</strong>Workflow [TCH] extends<br />

heavily <strong>the</strong> basic document­based 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> multi­publishing,<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 end­users,<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 sub­sites. 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>Document­based 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 full­featured 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 Zope­side 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> Zope­side 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 web­interface<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, “test­driven” 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 non­regression [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 third­party 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” (multi­days 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 third­party 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 public­sector 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> West­Afric<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 />

• civil­state 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> long­term 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 2­based 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 component­based<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 mid­2004 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 3­based 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 version­controlled<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 per­document 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 />

Addison­Wesley 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, JCR­170,<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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!