La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "1 Xooctory – Projet GL Aurélie COHE Fabien FAGOAGA Alice GARCIA Matthieu JOUBERT Christelle MAZEREAU Client : Xavier HANIN."— Transcription de la présentation:

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

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

3 3 Plan Présentation de lapplication 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 Management Conclusion

4 4 Présentation du projet

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

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

7 7 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 Spring : Outil utile pour les configurations de lapplication Triplesec : Permet la communication avec un serveur LDAP

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

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

10 10 Architecture des paquetages (1/2)

11 11 Architecture des paquetages (2/2) Réorganisation des paquetages Séparation des couches vue et persistance

12 12 Architecture des classes (1/3) Auparavant : Utilisation de classes Triplesec dans les éléments utilisés par Wicket : Modèles et Panels Utilisation de modèles : adaptateur des données 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

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

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

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

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

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

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

19 19 Refactoring – Exemple (1/5)

20 20 Refactoring – Exemple (2/5) public PermissionPanel(String id, IModel model, Tree tree) { […] PermissionModel permissionModel = new PermissionModel(getPermission()); getForm().setModel(new CompoundPropertyModel(permissionModel)); [...] } private Permission getPermission() { return (Permission) ((DefaultMutableTreeNode) getModelObject()).getUserObject(); } public PermissionPanel(String id, IModel model, Tree tree) { […] PermissionModel permissionModel = new PermissionModel(getPermission()); getForm().setModel(new CompoundPropertyModel( getPermission() )); [...] } private Permission Model getPermission() { return (Permission Model ) ((DefaultMutableTreeNode) getModelObject()).getUserObject(); } Exemple avec le panel gérant les permissions

21 21 Refactoring – Exemple (3/5) protected void onDelete() { [Code Triplesec pour la suppression] } protected AdministeredEntity onSave() { [Code Triplesec pour la sauvegarde] } protected void onDelete() { Locator.getSecurityManagementService().deletePermission(getPermission()); } protected AdministeredEntity Model onSave() { return Locator.getSecurityManagementService().savePermission( getPermission(), (PermissionModel) getForm().getModelObject()); }

22 22 Refactoring – Exemple (4/5)

23 23 Refactoring – Exemple (5/5) 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

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

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

26 26 Les classes à mapper (1/2)

27 27 Les classes à mapper (2/2) Choix techniques : Mapping des classes AdministeredEntityModel et LocalUserModel

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

29 29 Choix techniques retenus (2/4) La classe LocalUserModel : Hiérarchie 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

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

31 31 Choix techniques retenus (4/4) Dautres tables pour stocker les associations : Table Profile_Grants pour les ensembles de privilèges associés aux profils Table Profile_Roles pour les ensembles de rôles associés aux profils

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

33 33 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; … }

34 34 Implémentation des DAO Hibernate (1/3)

35 35 Implémentation des DAO Hibernate (2/3) 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; } … }

36 36 Implémentation des DAO Hibernate (3/3) Instanciation dune SessionFactory obligatoire : Création dun bean pour chaque DAO dans spring- config.xml Chaque bean possède une propriété SessionFactory récupérée à laide du bean sessionFactory présent dans spring-config-hb.xml

37 37 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) Configuration de lapplication (Spring) Tests unitaires Management Conclusion

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

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

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

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

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

43 43 Les DAO Hibernate (3/3) Dans spring-config-hb.xml :

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

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

46 46 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 Tests unitaires Management Conclusion

47 47 Tests existants AvantAprès

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

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

50 50 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 Management Management Conclusion

51 51 Management – Diagramme de Gantt (1/2)

52 52 Management – Diagramme de Gantt (2/2)

53 53 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 Management Conclusion Conclusion

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


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

Présentations similaires


Annonces Google