Stefane Fermigier <sf@nuxeo.com> Tarek Ziadé <tz@nuxeo.com>

Qui je suis Utilisateur de Python depuis 1995 Contributeur à Python et Zope depuis 1998 Fondateur et directeur de Nuxeo depuis 2000 Société de 20 personnes basée a Paris Spécialiste de la gestion de contenu et du travail collaboratif en environnement libre Zope Editeur de Nuxeo CPS, logiciel libre (GPL) de gestion de contenu et de travail collaboratif Clients: grands comptes français et internationaux – administrations et grands groupes industriels
Plan Introduction Zope: architecture et roadmap CMF/CPS/ERP5: architecture Meilleures pratiques Zope 2 Zope 3 Tutoriel / démo « live »
Zope – la vue d'ensemble (I) « Zope » est un ensemble de technologies innovantes et agiles qui permettent de réaliser par assemblage de composants des applications web collaboratives: Zope Object Database Zope App. Server Zope frameworks: CMF, CPS et autres
Zope – la vue d'ensemble (II) Architecture à base de composants et de services Basiques (persistence, présentation, sécurité...) Avancés (indexation, workflow...) Métiers Architecture à 3 niveaux Données (persistance transactionnelle) Logique métier (traitement de l'information) Présentation (visualisation, interaction)
Zope – la vue d'ensemble (III) Composants réutilisables « plug and play » Nombreux services et objets de contenus (plus de 800 composants disponibles sur Zope.org) Applications clefs en mains (ex: Silva, Plone, ERP5, CPS...)
Zope – Architecture
Zope - Pourquoi ? Logiciel libre / Open Source Fondé sur des standards ouverts et intéropérables Multi-plateformes (Linux/Unix, Windows, MacOS X) Simple à déployer Plateforme d'intégration Montée en charge simplifiée (clustering)
Zope - Pourquoi ? Conçu pour publier des objets (et pas seulement des pages web) Réutilisation de composants Configuration Plug and Play Développement rapide « N'intégrez pas, configurez! » (Hunt / Thomas, The Pragmatic Programmer) Excellent pour le travail en équipe Séparation contenu / logique / présentation Auteurs, programmeurs, graphistes
Pourquoi Zope ? (fin) Support commercial (conseil, développement, formation...) Zope Corp aux USA Une centaine de sociétés tierces à travers le monde (ex: Nuxeo :-) Documentation abondante




Architecture : schéma
Zope – ZODB et serveur d'applications ZServer: serveur internet Protocoles standards (HTTP, FTP, WebDAV...) ZPublisher: publication d'objets (ORB) ZODB: base objets transactionnelle ZPT et DTML: langages de présentation dynamique (templates) ZSQL: accès bases SQL externes ZCatalog: moteur d'indexation « Produits »: paquetages logiciels fournissant des composants d'extension
La couche données – la ZODB Base de données objets et documentaire Aucune programmation spécifique nécessaire pour accéder à la persistance des objets Documents / fichiers vus comme des objets Permet de gérer les méta-données (propriétés d'un document) Arborescente Notion de conteneurs / contenus Acquisition des propriétés du conteneur par les contenus
La ZODB (suite) Transactionnelle Supporte les versions et les annulation multiples Optimisée pour beaucoup de lectures Agit comme une couche d'accès objet à des systèmes de stockage variés Natif (fichier unique) Oracle ou autre base SQL Distribué (ZEO) -> permet le clustering de serveurs Réutilisable hors de Zope
Couche données – accès bases SQL Adaptateurs SQL (Database Adaptors) Intègration du moniteur transactionnel de Zope Backends: Oracle, PostgreSQL, MySQL... « Méthodes ZSQL » Vue objet sur des requètes SQL Syntaxe indépendante du dialecte SQL choisi APE (ex-AdaptableStorage) Technique innovante Médiation transparente entre une source de données (DB, filesystem...) et les objets Zope
La couche logique métier « Produits » écrits en Python Héritage multiple pour bénéficier des différents aspects du framework Instanciation Persistance Navigation / édition à travers le Web (via la ZMI, Zope Management Interface) Gestion des caches, des historiques... Système de notification simple Etc.
Méthodes de présentation ZPT (Zope Page Templates) Language XML Permet d'imposer une séparation stricte logique / présentation La sémantique est exprimée dans les attributs Plusieurs implémentations concurrentes: que la meilleure gagne! Réutilisable (indépendamment de Zope) dans plusieurs projets open source Possibilité de traîtement XSLT en aval
La sécurité Basée sur les rôles Un utilisateur peut avoir plusieurs rôles Les rôles peuvent dépendre du contexte Ex: je peux être responsable dans un espace et simple utilisateur dans un autre Des permissions (accès à certains types d'objets, à certaines de leurs méthodes) sont liées à chaque rôle Elles peuvent dépendre de l'état de l'objet dans le workflow (systématique dans CPS)
La sécurité (suite) Authentification vis-à-vis d'un référentiel d'utilisateurs Natif Zope, LDAP, NIS, NT... Securisation des échanges (SSL) En général, via Apache
La montée en charge: architecture ZEO Technologie de clustering de serveurs Zope Plusieurs serveurs Zope en frontal (ZEO clients) Un serveur de donnée central (Zope Storage Server) Répartition de charge + cohérence dans les données Apache ou Squid configuré en reverse proxy (cache)
Process de dev Zope 2 Contributors agreement Fishbowl process CVS/SVN Test unitaires Collectors Wikis Sprints Bug days
Roadmap Zope 2 Release stable actuelle: 2.7.4 Recommandée: fixe un certain nombre de bugs problématique sur les sites à forte charge (sessions, ZODB) Branche de développement actuelle: 2.8.0a1 Intègre la ZODB 3.3 (modèle MVCC = Multi-version concurrency control) Objectif: réduire les conflits en lecture Intégration progressive de Zope 3
Le CMF
Le CMF « Content Management Framework » Un framework = « architecture générique avec un ensemble extensible de composants » Objectif: séparer et découpler le contenu du comportement Architecture basée sur des services extensibles, modulables et configurables Membership / personalisation, skins, discussion, cataloguage, workflow... Interfaces ouvertes pour les services et le contenu
Exemples de services CMF Skins Gestion de la présentation (Page Templates) et des interactions avec l'utilisateur (Python Scripts) Découplage (liaison configurable dynamiquement) avec les données et la logique métier Adaptation aux préférences de l'utilisateurs ou à ses besoins (accessibilité) Gestion globale des métadonnées
Exemples de services CMF (suite) Gestion des types de documents Actions et permissions associées à chaque type Peut dépendre du workflow Gestion des utilisateurs (« membres ») Plusieurs sources d'authentifications possible (ex: LDAP) Indexation
Exemple de service avancé - le Workflow Permet de définir des workflows (états de publication) pour les différents types de documents gérés par le portail Des variables d'état peuvent être associées à chaque document Service de notification sur les transitions d'états Historique des transitions
Le workflow (suite) Workflow par défaut 3 états: privé, soumis à publication, publié Workflow avancé: DCWorkflow Peut se substituer au Workflow par défaut (même interface) Possibilité de brancher d'autres moteurs de workflow à l'avenir
Nuxeo CPS Logiciel libre (GPL) basé sur Zope et le CMF (content management framework) Progiciel d'ECM (Enterprise Content Management) GED WCM WF / BPM / Cyle de vie étendu (archivage) Collaboration Portail Utilisé actuellement par Des administrations centrales et locales Des grands comptes internationaux ...
CPS: Les principes Portail web adaptable à base de “boîtes” Interface de consultation et de travail Espaces de travail (personnels, collaboratifs) Espaces de publication Services Workflow, internationalisation... Forums, chats, annuaires, agendas partagés, webmail... Accent mis sur la simplicité, l'utilisabilité et la cohérence des composants
Diagramme fonctionnel
Screenshot
Fonction: Navigation et publication web Le portail fournit un point d'accès centralisé à l'information et aux services Il peut être personnalisé globalement (par site), localement (par section) et par utilisateur Les contributeurs soumettent les documents dans des espaces de publication (“rubriques”) Workflow et contrôle d'accès fin avec un ou des responsables éditoriaux par rubrique Un même document peut être soumis et/ou publié dans plusieurs rubriques
Espaces de travail Espaces personnels et collaboratifs (souvent liés à des groupes d'utilisateurs) Création / intégration de contenu Outils bureautique (MS-Office, OpenOffice) Editeur Web WYSIWYG (IE 5.5+ et Mozilla 1.4+) “Documents flexibles” Services Suivi des versions, commentaires, notifications, forums... Applications métiers dédiées
Diagramme technique
Les principaux composants CPSCore & CPSWorkflow Noyau de l'application: versionning, workflows CPSSchemas & CPSDocument Widgets, schemas, types de documents CPSDirectory & CPSUserFolder Gestion des utilisateurs CPSInstaller Support à la configuration CPSDefault Configuration par défaut, customisable ensuite CPSPortlets & CPSSkins
CPSCore Etend CMFCore avec des services « core » Publication virtuelle, versionning et i18n du contenu Repository / proxies Service de notification d'événements Mise à jour de l'arbre de navigation basées sur le service de notification
CPSWorkflow Extension de DCWorkflow Associations locales de workflow Extensions du workflow standard Workflow « à pile »
CPSDefault Etend CMFDefault en fournissant Un interface de type « portail » basée sur des « boîtes » Des types de documents et des workflows par défaut Workspaces Sections Une skin et des types de boîtes par défaut Un installeur par défaut
CPSSchemas & CPSDocuments Concept qui viennent directement de Zope 3 + nombreuses améliorations Séparation structure / vue du contenu Structure = champs regroupés en schémas Vues = widgets regroupés en layouts Les schémas et les layouts sont réutilisables (ex: metadata) Vocabulaires « Documents flexibles » Customisation TTW Utilisable en dehors de CPS
CPSDirectory Gère au moins utilisateurs, groupes (+ groupes de groupes) et rôles Plugins pour l'accès / le stockage des données ZODB LDAP SQL Utilise CPSSchemas pour la gestion des formulaires de gestion, avec gestion des accès (ACL) champ par champ CPSUserFolder: basé sur l'annuaire (et non l'inverse comme dans CMF) Utilisable en-dehors de CPS
CPSInstaller Aide les auteurs de produits à installer facilement leur produit en prenant en charge L'enregistrement des types de documents L'enregistrement des skins du produit La configuration du workflow et des actions La configuration du Catalog ... Egalement utile aux intégrateurs Utilisable en dehors de CPS
Autres produits CPSForum, CPSChat, CPSRSS CPSSubscriptions, CPSNewsletter, CPSMailboxer CPSCalendar + CPSWebMail (ex-GroupwareSuite) CPSOOo CPSSkins + CPSPortlets ...
Process de dev CPS Nuxeo développe le framework CPS et en assure la cohésion et la maintenance CVS public, mailing lists Une communauté de développeurs participe au développement et maintient des modules additionnels (approche modulaire) « Sprint » en début de cycle pour réunir l'ensemble des développeurs Investissement R&D important de Nuxeo (JEI) Collaboration internationale Développement financé par les projets clients
Roadmap CPS Actuellement: maintenance de la branche CPS 3.2 stable et développement de la branche 3.3 Refactoring divers commencés lors du « sprint » en août 2004 Intégration forte de CPSSkins Intégration OpenOffice.org Amélioration de CPSInstaller (dépendances entre produits) Offre produits libres packagés: Intranet, Community, Publisher, Courrier, Etat-Civil, etc. Juin 2005 (est.): CPS 3.4
ERP5 UBM
Technologies ERP5
Meilleures pratiques Zope 2 Gestion de config Produits Interfaces Séparation UI / logique métier Tests unitaires
Gestion de config Utiliser CVS / SVN pour gérer les livrables logiciels Mettre tous les scripts dans le FS, pas dans la ZODB La ZODB est réservée au contenu et au configuration locales Installeur (CPSInstaller, CMFSetup, ERP5 BusinessTemplates...) pour créer / mettre à jour la config Possibilité d'utiliser la ZMI et d'exporter la config dans un format adéquat (.zexp ou XML) pour la placer sous gestion de config
Produits Sont le moyen de mettre en oeuvre la politique ci-dessus Regrouper les fonctionalités génériques en produits cohérents, réutilisables Faire un produit pour chaque site / projet client Skins Configuration Tests globaux
Interfaces Les interfaces permettent de définir clairement une API publique et de documenter sa sémantique Permettent une approche par plugins (omniprésente dans CPS) Evolution naturelle vers Zope 3
Séparation UI / logique Les modules Python dans le produits s'occupent de la logique Structures de données API L'interaction avec les utilisateurs se fait uniquement via des scripts et des templates Pas d'accès direct aux méthodes des classes Python sauf dans le cas de la ZMI
Tests unitaires Extrêmement utiles pour développer avec l'assurance qu'il n'y a pas de régression Permettent une approche évolutive du développement Complément quasi-indispensable du caractère « agile » de Python Mieux: développement dirigé par les tests Outils: Unittests (PyUnit) / Doctests ZopeTestCase / CPSTestCase
ZOPE 3 Créé « from scratch » (à part la ZODB) Tire les leçons de l'expérience Zope 2 Architecture : système de skins « trop libre » Réutilisabilité : réutilisation de classes Python difficile sans « wrapping » important ...
ZOPE 3 Réutilisabilité : utilisation des interfaces Architecture : composants et Vues Architecture : ZCML – Zope Configuration Markup Language Définitions : schemas, widgets et fields Qualité : tests unitaires et fonctionnels omniprésents
ZOPE 3 Exemple de ZCML <browser:page for=".interfaces.IMailBox" class=".mailbox.MailBoxParametersView" template="www/mailBoxParametersView.zpt" name="configure.html" permission="zope2.View" />
Projet Five (3+2) Permet d'utiliser le code Zope 3 dans Zope 2 Prépare les développeurs à Zope 3 Introduit les concepts fondamentaux de Zope 3 ZCML Interfaces, Schemas, ... Les produits basés sur Five sont «Zope 3 ready» Nuxeo a actuellement deux projets significatifs basés sur Five
CPS – Plus d'informations Sites Mailing lists Contact: Nuxeo: contact@nuxeo.com