Download - Workshop Spring - Session 1 - L'offre Spring et les bases

Transcript
Page 1: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 1

Workshop Spring - Session 1

L’offre Spring

Diffusé en décembre 2011

Réactualisé en octobre 2014

Page 2: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 2

Objectifs

Découvrir l’écosystème des technologies supportées par

Spring

Approfondir ses connaissances sur les rouages du

conteneur léger

Profiter de retours d’expérience sur l’utilisation de

différentes briques

Appliquer au plus tôt ce que vous aurez appris

Page 3: Workshop Spring  - Session 1 - L'offre Spring et les bases

1. L’offre Spring

Le portfolio et les fondamentaux du framework

2. Intégration au sein des applications Java EE

Persistance et tests unitaires

3. Techniques avancées du conteneur léger

Post-Processeurs, EL, support des JSR

4. Retour d’expérience sur l’utilisation de Spring Batch

Etude de cas, principes et mise en œuvre

# 3

Sommaire

Page 4: Workshop Spring  - Session 1 - L'offre Spring et les bases

1. Zoom sur le portfolio de Spring Pivotal

Le cœur du framework Spring

Le support proposé par Spring

2. Les fondamentaux

Fonctionnement du conteneur léger

Les beans Spring

Design patterns rencontré dans Spring

# 4

Worshop n°1 – L’offre Spring

Page 5: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 5

Le cœur du framework Spring (1/2)

Conteneur léger

Assemble les composants applicatifs

Injection de dépendance

Gère leur cycle de vie

Programmation orientée aspect

Ajout de fonctionnalités transverses

Séparation des préoccupations

Intégration de frameworks tiers

Support natif d’un grand nombre

de frameworks

et de standards Java EE

Abstraction facilitant le changement d’implémentation

Ouvert aux extensions

Page 6: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 6

Le cœur du framework Spring (2/2)

Exemple d’une application web avec une architecture 5 tiers

Action

StrutsService

Métier

Base

de

donnéesDAO

Conteneur Spring

Proxy

JVM de l’application

Page 7: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 7

Le portfolio Spring

Spring dépasse le cadre du simple framework

Spring Framework est composé de différents modulesSpring core contient le conteneur léger

Autres modules : ORM, DAO, AOP, Web, JEE

Les modules suivent le même cycle de livraison

Le portolio Spring est également composé de projetsRachats, intégration de projets open source, nouvelles idées

Basés sur le framework Spring

Propre cycle de livraison

Page 8: Workshop Spring  - Session 1 - L'offre Spring et les bases

Worshop n°1 – L’offre Spring

1. Zoom sur le portfolio de Spring Pivotal

Le cœur du framework Spring

Le support proposé par Spring

2. Les fondamentaux

Fonctionnement du conteneur léger

Les beans Spring

Design patterns rencontré dans Spring

# 8

Page 9: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 9

Le support proposé par Spring

Présentation

Tests

BPM

Supervision

Validation

Mailing

Mobile

Persistance

Planification

Réseaux sociauxCloud

Applications RAD

Big Data

Intégration

Services Web

Page 10: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 10

La Persistance

Fonctionnalité Module / Projet

Gestion des transactions Spring TX

Hiérarchie d’exceptions génériques Spring TX

Facilite l’utilisation de JDBC Spring JDBC

Support des frameworks de mapping objets

relationnels Hibernate, JPA, iBatis, JDOSpring ORM

API de haut de niveau pour les bases NoSQL,

les grilles de données et JPASpring Data

Marshalling /Unmarshalling XML Spring OXM

Page 11: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 11

Couche de Présentation

Fonctionnalité Module / Projet / Tiers

Standards supportés : Servlet, JSP, JSTL, JSF,

Portlet

Spring Web

Support de frameworks web tiers : Struts, Tiles,

WebWork, Tapestry

Spring Web

Implémentation propriétaire du pattern MVC 2 Spring MVC

Gestion du cycle de vie d’un flot web Spring Web Flow

Support Ajax avec DWR DWR

Support d’applications RIA en Flex Spring BlazeDS

Integration

Page 12: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 12

Communication par web services

Fonctionnalité Module / Projet / Tiers

Web services SOAP avec approche contract-first

avec support des API DOM, JDOM, DOM4J, SAX,

JAXB, Castor XML, XML Beans, JiBX, Xstream

Spring WS

Exposer et consommer des web services SOAP

avec les standards JAX-RPC et JAX-WS et une

approche code-first

Spring Remoting

Web services REST Spring MVC

Espace de nommage dédié à CXF CXF

Page 13: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 13

Intégration au SI

En complément de l’intégration par services web

Fonctionnalité Module / Projet

Support de middleware orienté message (MoM) :

JMS, AMQPSpring JMS

Support communication entrantes et sortantes JCA Spring TX

Communication distante avec EJB, RMI, Caucho, et

JAX-RPCSpring Remoting

Implémentation des Enterprise Integration

PatternsSpring Integration

Traitement par lots avec reprise sur erreur Spring Batch

Authentification LDAP et SSO et gestion des

habilitationsSpring Security

Runtime distribué d’intégration, d’analyse et

d’export de données, notamment vers HadoopSpring XD

Page 14: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 14

Tester les applications

Fonctionnalité Module / Ext

Support des principaux frameworks de tests

unitaires TestNG et JUnitSpring Test

Espace de nommage et API pour les bases de

données embarquées H2, HSQLDB et DerbySpring JDBC

Support du pattern Rollback after the test Spring Test

Tests d’applications web basées sur Spring MVC Spring Test

Simulacres d’objets JEE Spring Test

Tester des services web sans serveur HTTP Spring WS Test

Page 15: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 15

Rapid Application Development

Fonctionnalité Module / Projet

Support des langages dynamiques Groovy,

JRuby et BeanShellSpring Scripting

Génération de code Groovy et de requêtes HQL

à l’aide de convention de nommageGrails

Démarrage rapide d’applications Spring sans

configuration.Spring Boot

Génération de code Java et d’aspects à partir

d’annotationsSpring Roo

Bundle Eclipse proposant wizards, outils visuels

et fonctionnalités de déploiementSpring Tool Suite

IDE graphique et déploiement dans le cloud WaveMaker

Page 16: Workshop Spring  - Session 1 - L'offre Spring et les bases

1. Zoom sur le portfolio de Spring Pivotal

Le cœur du framework Spring

Le support proposé par Spring

2. Les fondamentaux

Fonctionnement du conteneur léger

Les beans Spring

Design patterns rencontré dans Spring

# 16

Worshop n°1 – L’offre Spring

Page 17: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 17

L’inversion de contrôle

Basé sur le découplage des classes et la programmation par interface

BanqueService JpaCompteDAO

* 1

Couplage fort entre un

service métier et un DAO

BanqueService

JpaCompteDAO

«interface»ICompteDAO

* 1

L’introduction de

l’interface permet de

découpler le service de

l’implémentation du DAO

Le service ne dépend plus du DAO

Le DAO dépend d’une interface utilisée par le service

L’inversion de contrôle permet au service de ne pas connaître le code

qu’il va exécuter

Page 18: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 18

Mécanisme permettant d’implémenter l’inversion de contrôle

Le conteneur léger est un assembleur ; il gère :

le cycle de vie des composants applicatifs

et leur mise en relation

La phase d’injection de dépendance est appelée wiring

Les dépendances sont résolues dynamiquement

3 types d’injection : constructeur, mutateur et interface

Injection de dépendances standardisée en 2009 dans :

JSR 330 - Dependency Injection for Java

JSR 299 - Context and Dependency Injection for Java EE (CDI)

L’injection de dépendances

Page 19: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 19

Intercepter un appel

Spring peut modifier la chaîne d’appel des composants pour par exemple :

Greffer des aspects

Insérer un comportement transactionnel

2 types de proxy en fonction de l’appelé :

Interface par l’utilisation de proxy dynamique java.lang.reflect.Proxy

Classe par instrumentation de code

banqueService jpaCompteDAOJdkDynamicAopProxy

invoke

TransactionInterceptor

invoke

crediter

Page 20: Workshop Spring  - Session 1 - L'offre Spring et les bases

1. Zoom sur le portfolio de Spring Pivotal

Le cœur du framework Spring

Le support proposé par Spring

2. Les fondamentaux

Fonctionnement du conteneur léger

Les beans Spring

Design patterns rencontré dans Spring

# 20

Worshop n°1 – L’offre Spring

Page 21: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 21

Bean Spring

Bean Spring = instance d’une classe pouvant être un simple POJO

Possède les caractéristiques suivantes :

un identifiant

un type

une portée

des propriétés (types simples ou structures données)

des collaborateurs

des méthodes d’initialisation / destruction

un constructeur

un nom

un bean parent

un mode d’injection

Injection explicite ou automatique (auto-wiring)

Page 22: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 22

Portées des beans Spring

La portée d’un bean détermine son cycle de vie

Utilisée lors de l’injection ou par la méthode getBean du contexte applicatif

Portées proposées par Spring pour une application web :

Portée Description

singleton

(par défaut)

Un unique bean est créé pour toute la durée de vie du

contexte Spring

prototype Une nouvelle instance est créée à chaque fois que le bean

est référencé

session Une instance de bean est créée pour chaque session HTTP

request Une instance de bean est créée pour chaque requête HTTP

Portées supplémentaires :

chunk pour les batchs et globalSession pour les portlets

Possibilité de créer sa propre portée

Page 23: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 23

L’injection en pratique

Spring propose 3 approches pour configurer son contexte applicatif

Type Atouts

Déclaration XML Aucune adhérence du code à Spring

Centralisation de la configuration

Schémas XML dédiés pour alléger l’écriture

Complet

Automatisée par

annotations

Configuration allégée

Particulièrement adaptée aux tests unitaires

Se rapproche de la JSR-330 Dependency Injection

Par programmation Typage fort et vérifications à la compilation

Refactoring géré nativement par l’IDE

Orienté Objet

Possibilité de mixer ces approches

Complémentaires

Page 24: Workshop Spring  - Session 1 - L'offre Spring et les bases

public class JpaCompteDAO implements ICompteDAO {

}

public class DefaultBanqueService implements IBanqueService {

private ICompteDAO compteDAO;

public void setCompteDAO(ICompteDAO compteDAO) {

this.compteDAO = compteDAO;

}

}

<?xml version="1.0" encoding="UTF-8"?>

<beans … >

<bean id="jpaCompteDAO" class="com.sqli.demo.persistence.impl.JpaCompteDAO"/>

<bean id="banqueService"

class="com.sqli.demo.service.impl.DefaultBanqueService">

<property name="compteDAO" ref="jpaCompteDAO"/>

</bean>

</beans>

# 24

Déclaration de beans en XML

Service et DAO

sous forme de

simple POJO

Wiring par mutateur

Page 25: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 25

Déclaration de beans par annotations

<?xml version="1.0" encoding="UTF-8"?>

<beans ...>

<context:component-scan base-package="com.sqli.demo" />

</beans>

Active la détection des beans Spring présents dans le package

@Repository

public class JpaCompteDAO implements ICompteDAO {

}

@Service("banqueService")

public class DefaultBanqueService implements IBanqueService

{

@Autowired

private ICompteDAO compteDAO;

/* Setter */

}

Beans Spring

annotés

Injection du bean

ayant le type

ICompteDAO

Identifiant du bean

Page 26: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 26

Déclaration par programmation

public class JpaCompteDAO implements ICompteDAO {

}

public class DefaultBanqueService implements IBanqueService {

@Autowired

private ICompteDAO compteDAO;

/* Setter */

}

@Configuration

public class ServiceBancaireConfiguration {

@Bean

public IBanqueService banqueService() {

return new DefaultBanqueService();

}

@Bean

public ICompteDAO jpaCompteDAO() {

return new JpaCompteDAO();

}

}

Les classes

de service et

de DAO ne sont

pas annotées

Classe remplaçant la

configuration XML

Injection du DAO

par son type

Définition de 2 beans

Spring

nom de la méthode

=

nom du bean

Page 27: Workshop Spring  - Session 1 - L'offre Spring et les bases

1. Zoom sur le portfolio de Spring Pivotal

Le cœur du framework Spring

Le support proposé par Spring

2. Les fondamentaux

Fonctionnement du conteneur léger

Les beans Spring

Design patterns rencontré dans Spring

# 27

Worshop n°1 – L’offre Spring

Page 28: Workshop Spring  - Session 1 - L'offre Spring et les bases

# 28

Design Patterns utilisés par Spring

Pattern Exemples d’utilisation

Factory Fabrique de beans, de sessions Hibernate, de

proxy spécifiques, de validateurs

Template Method Classes de template pour Hibernate, JPA, JDBC,

JMS, web service SOAP, REST

Proxy Décoration des beans, transactions, tissage des

aspects (AOP)

Specification Mutualisation de critères de recherche dans

Spring Data

Builder Constructeurs de flow web, de messages

Singleton Portée par défaut des beans

Adapter Listener de messages JMS, entité d’adaptation

de traitement d’un web service