29/01/09springframework1 springframework alice garcia fabien fagoaga option génie logiciel 3 ème...
TRANSCRIPT
29/01/09 SpringFramework 1
SpringFrameworkSpringFramework
Alice GARCIAFabien FAGOAGA
Option Génie Logiciel3ème année ENSEIRB
29/01/09 SpringFramework 2
Plan
Présentation générale de SpringPrésentation générale de Spring Récupération du frameworkRécupération du framework Utilisation de SpringUtilisation de Spring Notre utilisation de Spring : XooctoryNotre utilisation de Spring : Xooctory Un exemple concretUn exemple concret WebographieWebographie
29/01/09 SpringFramework 3
Plan
Présentation générale de SpringPré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 d’application
J2EE. Prend en charge la création et la mise en relation
d’objets Utilisation de fichiers de configuration qui
décrivent les objets à fabriquer et les relations de dépendances entre ces objets
Permet l’injection de dépendances
29/01/09 SpringFramework 5
Présentation générale (2/2)
Site officiel : http://www.springframework.org/ Description de l’API :
http://static.springframework.org/spring/docs/2.5.x/api/index.html
29/01/09 SpringFramework 6
Plan
Présentation générale de Spring Récupération du frameworkRé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 : http://www.springframework.org/download
Dernière version : 3.0.0M1 (5 déc 2008)
Version précédente : 2.5.6 (31 oct 2008) Requière Java 1.4
29/01/09 SpringFramework 8
Composition de l’archive (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 l’archive (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 l’archive (3/3) Le dossier lib :
ant compilation hibernate tomcat serveur Web hsqldb SGBD junit jruby impl. de l’interpréteur Ruby en Java log4j maven gestion de production de projets Java struts framework 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 SpringUtilisation 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
<?xml version="1.0" encoding="UTF-8"?>
<<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="permissionDAO"> ... </bean>
</beans>
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 d’instanciation (par défaut : singleton)
singleton : même instance de l'objet fournie à chaque demande prototype : instance différente à chaque fois
lazy-init : moment de l’instanciation (par défaut : false) true : bean instancié lorsque l’on y accède (getBean) false : bean instancié dès l’ouverture 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
<bean id="plage" class="fr.enseirb.it308.spring.Plage"> <constructor-arg index="0" value="Lacanau"/> <constructor-arg index="1" value="18"/></bean> 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
<bean id="plage" class="fr.enseirb.it308.spring.Plage"> <constructor-arg type="java.lang.String" value="Lacanau"/> <constructor-arg type="java.lang.Integer" value="18"/></bean>
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
<bean id="monBean" class="fr.enseirb.it308.spring.MonBean" name="monBeanAlias,aliasMonBean"> <property name="proprietes"> <props> <prop key="application.nom">Mon Application</prop> <prop key="application.version">1.0.0</prop> <prop key="application.auteur">Nous</prop> </props> </property></bean>
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 d’attributs possibles :
ref : injection d’un bean dans un autre value list
Nécessité d’avoir 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 { … }
<bean id="michelin" class="fr.enseirb.it308.spring.Michelin"/>
<bean id="goodYear" class="fr.enseirb.it308.spring.GoodYear"/>
<bean id="voiture" class="fr.enseirb.it308.spring.Voiture"> <property name="Roue" ref="michelin"/> </bean>
29/01/09 SpringFramework 19
Les autres fonctionnalités (1/2)
<import resource="spring-config-hb.xml"/><import resource="spring-config-security.xml"/>
La balise import : permet d’importer un fichier de configuration Spring dans un autre
29/01/09 SpringFramework 20
Les autres fonctionnalités (2/2) Possibilité d’importer des informations depuis un
fichier Properties :<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:datasource.properties</value> </property></bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass"><value>${jdbc.driver.class}</value></property> <property name="jdbcUrl"><value>${jdbc.url}</value></property> <property name="user"><value>${jdbc.user}</value></property> <property name="password"><value>${jdbc.password}</value></property></bean>
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");
<bean id="michelin" class="fr.enseirb.it308.spring.Michelin"/>
<bean id="goodYear" class="fr.enseirb.it308.spring.GoodYear"/>
<bean id="voiture" class="fr.enseirb.it308.spring.Voiture"> <property name="Roue" ref="michelin"/> </bean>
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"> <property name="dataSource"><ref local="dataSource"/></property> <property name="annotatedClasses"> <list>
… <value>org.xoocode.xooctory.web.directory.security.model.AdministeredEntityModel</value> <value>org.xoocode.xooctory.web.directory.security.model.ApplicationModel</value> <value>org.xoocode.xooctory.web.directory.security.model.GroupModel</value> <value>org.xoocode.xooctory.web.directory.security.model.LocalUserModel</value> <value>org.xoocode.xooctory.web.directory.security.model.PermissionModel</value> <value>org.xoocode.xooctory.web.directory.security.model.ProfileModel</value> <value>org.xoocode.xooctory.web.directory.security.model.RoleModel</value> <value>org.xoocode.xooctory.web.directory.security.model.UserModel</value> </list> </property> …
29/01/09 SpringFramework 24
Le module hibernate (2/2)
La classe HibernateDaoSupport : Utilisé pour l’accès à des objets Hibernate Utilise la classe HibernateTemplate qui possède une
SessionFactory Instanciation de la SessionFactory à partir d’un 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 {
@Transactional(readOnly = 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"> <property name="sessionFactory">
<ref bean="sessionFactory"/> </property></bean>
29/01/09 SpringFramework 27
Connexion à une BDD (3/3)
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource"><ref local="dataSource"/></property><property name="annotatedClasses">
…</property><property name="hibernateProperties">
…</property><property name="eventListeners">
…</property>
</bean>
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 : XooctoryNotre 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 l’implé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 l’interface
SecurityManagementService Une instance de la bonne implémentation utilisée
globalement dans l’application : securityManagementService
29/01/09 SpringFramework 31
Choix de l’implé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é :
l’implémentation non choisie
<!-- Using Triplesec --><bean id="securityManagementService" class="org.xoocode.xooctory.web.directory.security.manager.triplesec.
TriplesecSecurityManagementService" />
<!-- Using Hibernate --><bean id="securityManagementService" class="org.xoocode.xooctory.web.directory.security.manager.hibernate. HbSecurityManagementService"/>
29/01/09 SpringFramework 32
Choix de l’implé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
<property name="annotatedClasses"> <list> … <value>org.xoocode.xooctory.web.directory.security.model.AdministeredEntityModel</value> <value>org.xoocode.xooctory.web.directory.security.model.ApplicationModel</value> <value>org.xoocode.xooctory.web.directory.security.model.GroupModel</value> <value>org.xoocode.xooctory.web.directory.security.model.LocalUserModel</value> <value>org.xoocode.xooctory.web.directory.security.model.PermissionModel</value> <value>org.xoocode.xooctory.web.directory.security.model.ProfileModel</value> <value>org.xoocode.xooctory.web.directory.security.model.RoleModel</value> <value>org.xoocode.xooctory.web.directory.security.model.UserModel</value> </list></property>
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 {
@Transactional(readOnly = 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"> <property name="sessionFactory">
<ref bean="sessionFactory"/> </property></bean>
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 concretUn exemple concret Webographie
29/01/09 SpringFramework 38
Un exemple concret
Configuration d’un Puissance4
Deux types d’affichage : Mode console Mode graphique
Passage de l’un à l’autre 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 WebographieWebographie
29/01/09 SpringFramework 40
Webographie
http://fr.wikipedia.org/wiki/Accueil http://ego.developpez.com/spring/ http://java.developpez.com/faq/spring/ http://www.roseindia.net/spring/