40
29/01/09 SpringFramework 1 SpringFramework SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

Embed Size (px)

Citation preview

Page 1: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

29/01/09 SpringFramework 1

SpringFrameworkSpringFramework

Alice GARCIAFabien FAGOAGA

Option Génie Logiciel3ème année ENSEIRB

Page 2: 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 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

Page 3: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 4: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 5: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 6: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 7: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 8: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 9: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 10: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 11: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 12: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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>

Page 13: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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"/>

Page 14: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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;

}

}

Page 15: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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) { }

}

Page 16: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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 :

Page 17: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 18: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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>

Page 19: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 20: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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 :

Page 21: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 22: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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>

Page 23: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 24: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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)

Page 25: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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;

} …}

Page 26: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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>

Page 27: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 28: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 29: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 30: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 31: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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"/>

Page 32: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 33: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 34: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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>

Page 35: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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;

} …}

Page 36: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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>

Page 37: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 38: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 39: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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

Page 40: 29/01/09SpringFramework1 SpringFramework Alice GARCIA Fabien FAGOAGA Option Génie Logiciel 3 ème année ENSEIRB

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/