29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB
29/01/09 SpringFramework 2 Plan Présentation générale de Spring Présentation générale de Spring Récupération du framework Récupération du framework Utilisation de Spring Utilisation de Spring Notre utilisation de Spring : Xooctory Notre utilisation de Spring : Xooctory Un exemple concret Un exemple concret Webographie Webographie
29/01/09 SpringFramework 3 Plan Présentation générale de Spring Présentation générale de Spring Récupération du framework Utilisation de Spring Notre utilisation de Spring : Xooctory Un exemple concret Webographie
29/01/09 SpringFramework 4 Présentation générale (1/2) Définition : (par Erick Gollot) Infrastructure similaire à un serveur dapplication J2EE. Prend en charge la création et la mise en relation dobjets Utilisation de fichiers de configuration qui décrivent les objets à fabriquer et les relations de dépendances entre ces objets Permet linjection de dépendances
29/01/09 SpringFramework 5 Présentation générale (2/2) Site officiel : Description de lAPI : api/index.html
29/01/09 SpringFramework 6 Plan Présentation générale de Spring Récupération du framework Récupération du framework Utilisation de Spring Notre utilisation de Spring : Xooctory Un exemple concret Webographie
29/01/09 SpringFramework 7 Récupération du projet Adresse de téléchargement : Dernière version : 3.0.0M1 (5 déc 2008) Version précédente : (31 oct 2008) Requière Java 1.4
29/01/09 SpringFramework 8 Composition de larchive (1/3) dist : Bibliothèques des différents modules de Spring lib : Bibliothèques requises pour compiler ou utiliser Spring samples : Applications de démonstration src : Code source de Spring test : Classes de tests de Spring
29/01/09 SpringFramework 9 Composition de larchive (2/3) Le dossier dist : spring.jar : le framework complet Le dossier dist/modules : spring-core.jar spring-beans.jar spring-dao.jar spring-hibernate.jar spring-jdbc.jar spring-web.jar
29/01/09 SpringFramework 10 Composition de larchive (3/3) Le dossier lib : ant compilation hibernate tomcatserveur Web hsqldbSGBD junit jrubyimpl. de linterpréteur Ruby en Java log4j mavengestion de production de projets Java strutsframework pour dév. appli. Web
29/01/09 SpringFramework 11 Plan Présentation générale de Spring Récupération du framework Utilisation de Spring Utilisation de Spring Notre utilisation de Spring : Xooctory Un exemple concret Webographie
29/01/09 SpringFramework 12 Format des fichiers de config Fichier de configuration au format XML < <beans xmlns=" xmlns:xsi=" xsi:schemaLocation="
29/01/09 SpringFramework 13 La balise bean (1/6) Attributs possibles : id : identifiant du bean class : classe correspondante name : liste des noms donné au bean scope : type dinstanciation (par défaut : singleton) singleton : même instance de l'objet fournie à chaque demande prototype : instance différente à chaque fois lazy-init : moment de linstanciation (par défaut : false) true : bean instancié lorsque lon y accède (getBean) false : bean instancié dès louverture de la session <bean id="monBean" class="fr.enseirb.it308.spring.unBean" name="monBeanAlias,aliasMonBean" scope="singleton"/>
29/01/09 SpringFramework 14 La balise bean (2/6) La balise constructor-arg : injecter des propriétés via le constructeur Spécification des arguments via leur index public class Plage { private String nom; private Integer temperatureEau; public Plage(String nom, Integer temperatureEau) { this.nom = nom; this.temperatureEau = temperatureEau; }
29/01/09 SpringFramework 15 La balise bean (3/6) La balise constructor-arg : Spécification des arguments via leur index public class Plage { public Plage(String nom, Integer temperatureEau) { } public Plage(String nom, String departement) { }
29/01/09 SpringFramework 16 La balise bean (4/6) La balise props : gérer les propriétés de type Properties Mon Application Nous application.nom=Mon Application application.version=1.0.0 application.auteur=Nous Fichier propriete.properties :
29/01/09 SpringFramework 17 La balise bean (5/6) La balise property : permet de déclarer un besoin en terme de configuration Exemples dattributs possibles : ref : injection dun bean dans un autre value list Nécessité davoir des getter et setter pour ces propriétés
29/01/09 SpringFramework 18 La balise bean (6/6) public class Voiture { private Roue roue; public Voiture() { … } public void setRoue(Roue roue) { this.roue = roue; } public Roue getRoue() { return roue; } public interface Roue { … } public class Michelin implements Roue { … } public class GoodYear implements Roue { … }
29/01/09 SpringFramework 19 Les autres fonctionnalités (1/2) La balise import : permet dimporter un fichier de configuration Spring dans un autre
29/01/09 SpringFramework 20 Les autres fonctionnalités (2/2) Possibilité dimporter des informations depuis un fichier Properties : classpath:datasource.properties <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> ${jdbc.driver.class} ${jdbc.url} ${jdbc.user} ${jdbc.password} Utilisation des données :
29/01/09 SpringFramework 21 Lecture des informations (1/2) Méthodes utilisées : ClassPathRessource("nom_fichier.xml") Crée un "loader" vers le fichier XML XmlBeanFactory(ClassPathRessource res) Charge les définitions des beans getBean("nom du bean") Récupère une instance de la classe correspondante au bean
29/01/09 SpringFramework 22 Lecture des informations (2/2) Lecture des fichiers de configuration depuis notre code ClassPathResource res = new ClassPathResource("spring-config.xml"); XmlBeanFactory factory = new XmlBeanFactory(res); Voiture voiture = (Voiture) factory.getBean("voiture");
29/01/09 SpringFramework 23 Le module spring-hibernate (1/2) Spring inclue Hibernate : spring-hibernate.jar Mapping des classes dans un fichier de configuration <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 …
29/01/09 SpringFramework 24 Le module hibernate (2/2) La classe HibernateDaoSupport : Utilisé pour laccès à des objets Hibernate Utilise la classe HibernateTemplate qui possède une SessionFactory Instanciation de la SessionFactory à partir dun bean « sessionFactory » contenant les informations nécessaires à la connexion à la base de données (driver, url, utilisateur, mot de passe)
29/01/09 SpringFramework 25 Connexion à une BDD (1/3) Accès à la base de données en utilisant un ensemble de DAO Chaque DAO hérite de la classe HibernateDaoSupport : Accès à la base 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; } … }
29/01/09 SpringFramework 26 Connexion à une BDD (2/3) Chaque DAO va avoir un bean dans un fichier de configuration Instanciation d'une SessionFactory <bean id="permissionDAO" class="org.xoocode.xooctory.web.directory.security. manager.hibernate.HbPermissionDAO">
29/01/09 SpringFramework 27 Connexion à une BDD (3/3) <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> … … … La propriété SessionFactory des beans des DAO fait référence au bean SessionFactory
29/01/09 SpringFramework 28 Plan Présentation générale de Spring Récupération du framework Utilisation de Spring Notre utilisation de Spring : Xooctory Notre utilisation de Spring : Xooctory Un exemple concret Webographie
29/01/09 SpringFramework 29 Notre utilisation : Xooctory Dans le cadre du projet GL Xooctory, utilisation de Spring : Pour choisir une implémentation Pour la connexion à une base de données
29/01/09 SpringFramework 30 Choix de limplémentation (1/3) Problème posé : Pouvoir choisir entre 2 implémentations de la sécurité, l'une utilisant LDAP, l'autre utilisant une base de données En Java : 2 services implémentant linterface SecurityManagementService Une instance de la bonne implémentation utilisée globalement dans lapplication : securityManagementService
29/01/09 SpringFramework 31 Choix de limplémentation (2/3) Configuration dans le fichier spring-config- security.xml Création de deux beans Beans de même nom Mise en commentaire du bean non utilisé : limplémentation non choisie <bean id="securityManagementService" class="org.xoocode.xooctory.web.directory.security.manager.triplesec. TriplesecSecurityManagementService" /> <bean id="securityManagementService" class="org.xoocode.xooctory.web.directory.security.manager.hibernate. HbSecurityManagementService"/>
29/01/09 SpringFramework 32 Choix de limplémentation (3/3) public class SecurityManagementServiceLocator { private static SecurityManagementService securityManagementService =getSpringConfig(); private static SecurityManagementService getSpringConfig() { ClassPathResource res = new ClassPathResource("spring-config-security.xml"); XmlBeanFactory factory = new XmlBeanFactory(res); SecurityManagementService securityManagementService = (SecurityManagementService) factory.getBean("securityManagementService"); return securityManagementService; } public static SecurityManagementService getSecurityManagementService () { return securityManagementService; } Pour instancier la variable globale : récupération du choix de l'implémentation
29/01/09 SpringFramework 33 Utilisation de spring-hibernate (1/4) Problème posé : Connexion à une base de données En Java : Des fichiers mappés correspondant aux tables de la base Des fichiers Java DAO pour accéder à la base de données
29/01/09 SpringFramework 34 Utilisation de spring-hibernate (2/4) Ajout des classes faisant l'objet d'un 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
29/01/09 SpringFramework 35 Utilisation de spring-hibernate (3/4) Chaque DAO hérite de la classe HibernateDaoSupport : Accès à la base 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; } … }
29/01/09 SpringFramework 36 Utilisation de spring-hibernate (4/4) Il faut donc instancier une SessionFactory : création d'un bean pour chaque DAO dans spring- config.xml Chaque bean possède une propriété SessionFactory récupérée à l'aide du bean SessionFactory présent dans spring-config-hb.xml <bean id="permissionDAO" class="org.xoocode.xooctory.web.directory.security. manager.hibernate.HbPermissionDAO">
29/01/09 SpringFramework 37 Plan Présentation générale de Spring Récupération du framework Utilisation de Spring Notre utilisation de Spring : Xooctory Un exemple concret Un exemple concret Webographie
29/01/09 SpringFramework 38 Un exemple concret Configuration dun Puissance4 Deux types daffichage : Mode console Mode graphique Passage de lun à lautre sans modification de code
29/01/09 SpringFramework 39 Plan Présentation générale de Spring Récupération du framework Utilisation de Spring Notre utilisation de Spring : Xooctory Un exemple concret Webographie Webographie
29/01/09 SpringFramework 40 Webographie