WIKITTY Base de données orientée documents et API de persistance pour Java
Wikitty ©Code Lutin2 Objectifs ● Permettre de définir un modèle ● Orienté Objet ● Extensible ● Prévoir l'utilisation intensive ● Supporter le passage à l'échelle – Quantité de données – Quantité d'utilisateurs simultanés
Wikitty ©Code Lutin3 Wikitty ● Un wikitty a un identifiant unique ● Un wikitty a plusieurs extensions ● Une extension a des champs nommés ● Une extension peut dépendre d'une autre extension ● Un champ est une clé à laquelle on associe une valeur
Wikitty ©Code Lutin4 Exemple ● Une extension « Personne » ● Avec deux champs « nom » et « prénom » ● Une extension « Lutin » ● Qui dépend de l'extension « Personne » ● Avec un champ « numéro » ● Un wikitty qui porte l'extension Lutin a les trois champs
Wikitty ©Code Lutin5 Utilisation ● Description du modèle ● Utilisation d'un modeleur UML ● Génération du code ● Transparente ● Basée sur EUGene ● Extension du code généré (par héritage) ● Utilisation du code généré et de l'API wikitty
Wikitty ©Code Lutin6 Définition du modèle
Wikitty ©Code Lutin7 Définition du modèle ● Une extension → une classe ● Un champ de l'extension → un attribut ● Une dépendance entre extensions → une relation d'héritage ● Possibilité d'héritage multiple
Wikitty ©Code Lutin8 Génération du code ● Intégration d'EUGene dans Maven ● Modèle placé à côté des sources ● Génération déclenchée à la compilation ● Ajout du code généré au classpath pour la compilation ● Possibilité d'utiliser une tâche Ant
Wikitty ©Code Lutin9 Utilisation de l'API Person p = new PersonImpl(); p.setName("Martin"); p.setFirstName("Jacques"); proxy.store(p); Lutin l = proxy.restore(Lutin.class, p.getWikittyId()); l.setNumber(" "); proxy.store(l);
Wikitty ©Code Lutin10 Utilisation de l'API Person p = new Person(); p.setName("Martin"); PagedResult list = proxy.findAllByExample(p); for (Person p : list.getAll()) { // do something } exemple de recherche par critère on l'on attend qu'une seule réponse : Criteria criteria = Search.query(). eq(Lutin.FQ_FIELD_NUMERO," "). criteria(); Lutin lutin = proxy.findByCriteria(Lutin.class, criteria); if (lutin != null) { // do something }
Wikitty ©Code Lutin11 Fonctionnement interne ● Stockage ● Dans une base relationnelle via JDBC (PostgreSQL, H2) ● Dans une base NoSQL (Hbase) ● Ou tout autre solution (JMS, système de fichier...) ● Indexation ● Apache SolR ● Recherche par facettes
Wikitty ©Code Lutin12 Fonctionnement global ● Extensions versionnées ➔ Migration des wikitties juste-à-temps ● Gestion des droits pour chaque extension ● Internationalisation des wikitties ● Caches locaux et distants et notifications réseaux ● Communication client/serveur via services ● Outils de visualisation et de modification (wikitty-ui)
Wikitty ©Code Lutin13 Fonctionnement global
Wikitty ©Code Lutin14 Fonctionnement global
Wikitty ©Code Lutin15 Projets faisant appel à Wikitty ● BookMarks on the Web BookMarks on the Web ● Vradi Vradi ● Suite Chorem (billy, bonzoms)
Wikitty ©Code Lutin16