1 Xooctory – Projet GL Aurélie COHE Fabien FAGOAGA Alice GARCIA Matthieu JOUBERT Christelle MAZEREAU Client : Xavier HANIN.

Slides:



Advertisements
Présentations similaires
Présentation de frameworks J2EE
Advertisements

ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
LES NOMBRES PREMIERS ET COMPOSÉS
Ma surprise du Zoo.
[number 1-100].
Qualité du Premier Billot. 2 3 Défauts reliés à labattage.
Page 1 Retour sur le e- tourisme. Page 2 Quelques chiffres…
Licence pro MPCQ : Cours
Distance inter-locuteur
1 Plus loin dans lutilisation de Windows Vista ©Yves Roger Cornil - 2 août
Les numéros
Sud Ouest Est Nord Individuel 36 joueurs
Les identités remarquables
ACTIVITES Le calcul littéral (3).
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
1. 2 Informations nécessaires à la création dun intervenant 1.Sa désignation –Son identité, ses coordonnées, son statut 2.Sa situation administrative.
Guillaume KRUMULA présente Exposés Système et Réseaux IR3 Mardi 5 Février 2008.
La diapo suivante pour faire des algorithmes (colorier les ampoules …à varier pour éviter le « copiage ») et dénombrer (Entoure dans la bande numérique.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
2 1. Vos droits en tant quusagers 3 1. Vos droits en tant quusagers (suite) 4.
بسم الله الرحمن الرحيم. Institut Supérieure des Etudes Technologiques de Kébili.
User management pour les entreprises et les organisations Auteur / section: Gestion des accès.
Mr: Lamloum Med LES NOMBRES PREMIERS ET COMPOSÉS Mr: Lamloum Med.
1 5 octobre 2011 / paw Présentation du 7 octobre 2011.
Développement d’applications web
Page 1 Introduction à ATEasy 3.0 Page 2 Quest ce quATEasy 3.0? n Ensemble de développement très simple demploi n Conçu pour développer des bancs de test.
Interagir avec un objet mixte Propriétés physiques et numériques Céline Coutrix, Laurence Nigay Équipe Ingénierie de lInteraction Homme-Machine (IIHM)
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
GRAM 1 CE2 Je sais transformer une phrase affirmative en phrase négative.
Projet JAVA EE Approfondi
Le Concours de Conaissance Francais I novembre 2012.
Virtual Local Area Network
Détection de co-évolution de gènes Master 2 : Informatique à Finalité Professionnelle et Recherche Unifiée (IFPRU) Parcours Ingénierie de lIntelligence.
Titre : Implémentation des éléments finis sous Matlab
Configuration de Windows Server 2008 Active Directory
Classes abstraites et Interfaces
Académie de Créteil - B.C Quest-ce quune Inscription 1)1 action + 1 stagiaire + 1 client 2)Parcours individuel (avec son Prix de Vente) 3)Un financement.
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
LES NOMBRES PREMIERS ET COMPOSÉS
Développement d’application web
1 INETOP
Projet Génie Logiciel & UML, Bases de Données & Interfaces
29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB.
Xooctory – Projet GL Aurélie COHE Fabien FAGOAGA
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
Tournoi de Flyball Bouin-Plumoison 2008 Tournoi de Flyball
Notre calendrier français MARS 2014
Titre : Implémentation des éléments finis en Matlab
COURS DE PROGRAMMATION ORIENTEE OBJET :
Projet de Master première année 2007 / 2008
Équipe 2626 Octobre 2011 Jean Lavoie ing. M.Sc.A.
LA GESTION COLLABORATIVE DE PROJETS Grâce aux outils du Web /03/2011 Académie de Créteil - Nadine DUDRAGNE 1.
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
‘‘Open Data base Connectivity‘‘
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Xooctory.
Xooctory. Plan Présentation du projet Architecture de l'application.
CALENDRIER-PLAYBOY 2020.
Outil de gestion des cartes grises
Quel est l’intérêt d’utiliser le diagramme de Gantt dans la démarche de projet A partir d’un exemple concret, nous allons pouvoir exploiter plusieurs parties.
Exercice de vérification 1 p
Les Chiffres Prêts?
Introduction à SolidWorks
Les parties du corps By Haru Mehra Le Frehindi 1Haru Mehra, DELF, DALF,CFP.
Parquet Geoffrey 3 ARIL EXIA.CESI ARRAS. Présentation du MLD Présentation de la persistance Présentation récapitulatif du projet JSP/SERVLET MVC Cycle.
Transcription de la présentation:

1 Xooctory – Projet GL Aurélie COHE Fabien FAGOAGA Alice GARCIA Matthieu JOUBERT Christelle MAZEREAU Client : Xavier HANIN

2 Plan Présentation de lapplication Architecture adoptée Refactoring et utilisation de Triplesec Réalisation de la persistance en base (Hibernate) Configuration de lapplication (Spring) Tests unitaires Conclusion

3 Présentation du projet

4 Objectif du projet (1/2) Etat actuel de lapplication : Application LDAP Persistance

5 Objectif du projet (2/2) Etat souhaité de lapplication : Application LDAPBase de données Persistance

6 Outils utilisés Wicket : Framework Web permettant de développer des pages HTML dynamiques en Java Utilisée pour les IHM Compréhension nécessaire pour pouvoir lutiliser Hibernate : Outil de mapping objet-relationnel Conseillé par notre client Spring : Outil utile pour les configurations de lapplication Triplesec : Permet la communication avec un serveur LDAP

7 Organisation du travail Conception Réalisation découpé en 2 sous-équipes : Un binôme sur Wicket et Triplesec Un trinôme sur Spring et Hibernate Tests

8 Architecture des paquetages (1/2)

9 Architecture des paquetages (2/2) Réorganisation des paquetages Séparation des couches métier, vue et persistance

10 Architecture des classes (1/3) Actuellement : Utilisation de classes Triplesec dans les éléments utilisés par Wicket : Modèles et Panels Utilisation de modèles : adaptateur des données de la couche métier aux composants de Wicket Composants de Wicket : objets permettant de modéliser un élément daffichage Ex : wicket.markup.html.form.Button représente un bouton

11 Architecture des classes (2/3) Exemple des rôles dans l'application existante : Conséquences : oModification de ces éléments afin quils ne fassent pas appel à Triplesec (directement ou indirectement) oAjout dune couche dabstraction

12 Architecture des classes (3/3) Exemple des rôles :

13 Refactoring - Méthodologie Extraction du code spécifique à Triplesec dans les classes Analyse du service rendu par ces portions de code Création de linterface Remplacement du code spécifique à Triplesec par des appels aux méthodes de linterface Déplacement du code spécifique à Triplesec afin dimplémenter les méthodes de linterface

14 Refactoring (1/3) Panels Configuration de lapplication Mise en place de larborescence Code spécifique à Triplesec Paquetage : org.xoocode.xooctory.web

15 Refactoring (2/3) Code spécifique à Triplesec Fonction du code Triplesec : o Sauvegarde o Suppression o Récupération de toutes les instances stockées dans la couche de persistance Objets Triplesec : o Equivalent aux modèles définies

16 Refactoring (3/3) Code initial Code spécifique à Triplesec Code indépendant Code équivalent utilisant les fonctions de linterface

17 Refactoring – Exemple (1/3) public PermissionPanel(String id, Imodel model, Tree tree) { super(id, model, tree); setLegend("Existing Permission"); PermissionModel permissionModel = new PermissionModel(getPermission()); getForm().setModel(new CompoundPropertyModel(permissionModel)); [...] } protected void onDelete() { [Code Triplesec pour la suppression] } protected AdministeredEntity onSave() { [Code triplesec pour la sauvegarde] } private Permission getPermission() { return (Permission) ((DefaultMutableTreeNode) getModelObject()).getUserObject(); } Exemple avec le panel gérant les permissions

18 Refactoring – Exemple (2/3) public PermissionPanel(String id, Imodel model, Tree tree) { super(id, model, tree); setLegend("Existing Permission"); PermissionModel permissionModel = new PermissionModel(getPermission()); getForm().setModel(new CompoundPropertyModel( getPermission() )); [...] } protected void onDelete() { Locator.getSecurityManagementService().deletePermission(getPermission()); } protected AdministeredEntity Model onSave() { return Locator.getSecurityManagementService().savePermission( getPermission(), (PermissionModel) getForm().getModelObject()); } private Permission Model getPermission() { return (Permission Model ) ((DefaultMutableTreeNode) getModelObject()).getUserObject(); }

19 Refactoring – Exemple (3/3) private TriplesecPermissionDAO permissionDAO = new TriplesecPermissionDAO(); [...] public AdministeredEntityModel savePermission(PermissionModel oldPermission, PermissionModel newPermission) { return permissionDAO.save(oldPermission, newPermission); } public void deletePermission(PermissionModel permission) { permissionDAO.delete(permission); } [...] public void delete(PermissionModel permission) { [Code Triplesec pour la suppression] } public AdministeredEntityModel save(PermissionModel oldPermission, PermissionModel newPermission) { [Code Triplesec pour la sauvegarde] } [...] TriplesecPermissionDAO TriplesecSecurityManagementService

20 Persistance en base de données Utilisation dHibernate Informations stockées dans la même base que celle déjà existante Mapping des modèles réalisées dans les classes *Model

21

22 Architecture des classes à mapper Choix technique : Mapping des classes AdministeredEntityModel et LocalUserModel

23 Choix techniques retenus (1/4) La classe AdministeredEntityModel : Mapping en représentant une table par classe concrète Pas de table AdministeredEntity Toutes les tables mappant des classes héritant de AdministeredEntityModel contiennent les données de la classe mère

24 Choix techniques retenus (2/4) La classe LocalUserModel : Hiérarhie dû au framework Triplesec 3 types dutilisateurs : LocalUser, ExternalUser et HauskeysUser Mapping représentant une table par hiérarchie : une seule table User Uniquement des utilisateurs LocalUser

25 Choix techniques retenus (3/4) Tables principales : Ajout des classes faisant lobjet dun mapping dans le fichier de configuration spring-config-hb.xml :... org.xoocode.xooctory.web.directory.security.model.AdministeredEntityModel org.xoocode.xooctory.web.directory.security.model.ApplicationModel org.xoocode.xooctory.web.directory.security.model.GroupModel org.xoocode.xooctory.web.directory.security.model.LocalUserModel org.xoocode.xooctory.web.directory.security.model.PermissionModel org.xoocode.xooctory.web.directory.security.model.ProfileModel org.xoocode.xooctory.web.directory.security.model.RoleModel org.xoocode.xooctory.web.directory.security.model.UserModel

26 Choix techniques retenus (4/4) Dautres tables pour stocker les associations : Table Profile_Grants pour stocker lensemble des privilèges associés aux profils Table …. ATTENTION : diapo 22 -> modifié limage

27 Problème rencontré (1/2) Tous les modèles héritent de AdministeredEntityModel et mapping représentant une table par = InheritanceType.TABLE_PER_CLASS) public abstract class AdministeredEntityModel implements Serializable { private String creatorsName; private String modifiersName; private Date createTimestamp; private Date modifyTimestamp; … } Exception au démarrage de lapplication : org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor':... nested exception is org.hibernate.AnnotationException: No identifier specified for entity: org.xoocode.xooctory.web.directory.security.model.AdministeredEntityModel

28 Problème rencontré (2/2) Causes : Pas didentifiant précisé au modèle avec La classe mère na pas didentifiant, ils sont dans les sous-classes Correction : Utilisation public abstract class AdministeredEntityModel implements Serializable { private String creatorsName; private String modifiersName; private Date createTimestamp; private Date modifyTimestamp; … }

29

30 Implémentation des DAO Hibernate (1/2) Accès à la base de données Hibernate en utilisant un ensemble de DAO Chaque DAO hérite de la classe HibernateDaoSupport du framework Spring : Accès à Hibernate par les méthodes de cette classe public class HbGroupDAO extends HibernateDaoSupport = false) public AdministeredEntityModel add(GroupModel group) { String id = (String) getHibernateTemplate().save(group); group.setId(id); return group; } … }

31 Implémentation des DAO Hibernate (2/2) Instanciation dune SessionFactory obligatoire : Création dun bean pour chaque DAO dans spring- config.xml <bean id="permissionDAO" class="org.xoocode.xooctory.web.directory.security.manager. hibernate.HbPermissionDAO"> Chaque bean possède une propriété SessionFactory récupérée à laide du bean sessionFactory présent dans spring-config-hb.xml ?????????? Vérifier le nom du fic

32 Choix de limplémentation (1/3) Objectifs : Facilité pour changer dimplémentation de la sécurité Pas de modification de code source Solution : utilisation de Spring pour faire la configuration

33 Choix de limplémentation (2/3) Utilisation du fichier spring-config-security.xml Création de 2 beans Mise en commentaire du bean non choisi

34 Choix de limplémentation (3/3) Création dun locator :

35 Les DAO Hibernate (1/3) Homogénéité avec les DAO existants

36 Les DAO Hibernate (2/3) Ajout dun bean pour chaque DAO dans le fichier spring-config.xml

37 Les DAO Hibernate (3/3) Dans spring-config-hb.xml : <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation. AnnotationSessionFactoryBean">... org.xoocode.xooctory.web.directory.security.model.AdministeredEntityModel org.xoocode.xooctory.web.directory.security.model.ApplicationModel org.xoocode.xooctory.web.directory.security.model.GroupModel org.xoocode.xooctory.web.directory.security.model.LocalUserModel org.xoocode.xooctory.web.directory.security.model.PermissionModel org.xoocode.xooctory.web.directory.security.model.ProfileModel org.xoocode.xooctory.web.directory.security.model.RoleModel org.xoocode.xooctory.web.directory.security.model.UserModel

38 Les problèmes rencontrés Dans spring-config-hb.xml Dans spring-config.xml

39 Solution provisoire Erreur : java.lang.ClassNotFoundException: ${jdbc.driver.class}

40

41 Tests existants AvantAprès

42 Nouveaux tests test web Une classe de tests par DAO AjoutMise à jourConsultationSuppression

43 Scénarios des nouveaux tests Ajout dun élément Vérification que lélément ait bien été créé Modification de lélément Vérification que les modifications aient été prises en compte Suppression de lélément Vérification que lélément nexiste plus

44

45 Management – Diagramme de Gantt

46 Conclusion Projet très intéressant Découverte de nouveaux outils Refactoring de code Utilisation dHibernate (approfondissement du cours) Merci à Xavier Hanin pour son aide