Top Banner
Spring 3 en production JUG Summer Camp 11/09/2010
43

Spring 3.0 en production

Nov 22, 2014

Download

Technology

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Spring 3.0 en production

Spring 3 en production

J U G S u m m e r C a m p 1 1 / 0 9 / 2 0 1 0

Page 2: Spring 3.0 en production

Qui suis-je?

Julien Dubois

Spring par la pratique

Ancien de SpringSource

Responcia

Twitter: @juliendubois

Page 3: Spring 3.0 en production

Sommaire

(1)Introduction rapide à Spring

(2)Configurer Spring

(3)Spring à l'exécution

(4)Spring & Hibernate

(5)Spring & le Cloud

(6)Monitorer Spring

Page 4: Spring 3.0 en production

1 - Introduction rapide à Spring

Si vous ne connaissez pas, c’est le moment de vous jeter à

l’eau!

Page 5: Spring 3.0 en production

Qu’est-ce que Spring?

Framework IoC

Open Source

Meta-framework

Projets Spring-*

Page 6: Spring 3.0 en production

Les bases de Spring

Un Bean Spring = Un objet Java «simple»

Généralement un singleton, mais pas forcément

Configuré et instancié au démarrage de l’application

Page 7: Spring 3.0 en production

L’injection de dépendances

«Ne nous appelez pas, nous vous rappellerons» - pattern d’Hollywood

Page 8: Spring 3.0 en production

Exemple: injection par constructeur

public class MonServiceImpl implements MonService {

private AutreService autreService;

public MonServiceImpl( AutreService autreService) {

this.autreService = autreService; } }

Page 9: Spring 3.0 en production

La programmation orientée aspect

Les beans Spring sont «améliorés», «enrichis» lors de leur injection

Page 10: Spring 3.0 en production

Exemple: transaction & sécurité avec l’aop

public class MonServiceImpl implements MonService {

@Transactional @Secured("ROLE_USER") public long methodeMetier(String value) { // ... }}

Page 11: Spring 3.0 en production

2 - Configurer Spring

Page 12: Spring 3.0 en production

Configuration de Spring

Configuration XML

Configuration par annotations

Spring JavaConfig

@Autowiredprivate MonBean monBean;

Page 13: Spring 3.0 en production

Fichiers XMLDivisez pour mieux régner

Utilisez les namespaces

Stockez les fichiers dansMETA-INF/spring

La configuration d’infrastructure varie suivant les environnements

Page 14: Spring 3.0 en production

Gestion des propriétés

Gagnez en souplesse: externalisez vos propriétés

Proposez des valeurs par défaut, faciles à surcharger

<context:property-placeholder location="classpath*:META-INF/spring/*.properties, classpath*:*.properties"/>

Page 15: Spring 3.0 en production

Utilisez votre serveur d’applications

Un serveur d’applications fournit de nombreux services (DataSources, JMS...)

Plus performant, plus simple à exploiter que l’équivalent Spring

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/myDS"/>

Page 16: Spring 3.0 en production

Les application contexts hiérarchiques

On peut avoir une hiérarchie de contexts Spring

Souvent utilisé sans le savoir (Spring MVC)

Permet une séparation logique de l’architecture

Contexte parent(métier)

Contexte enfant(présentation)

Page 17: Spring 3.0 en production

3 - Spring à l'exécution

Page 18: Spring 3.0 en production

Spring est partout

Page 19: Spring 3.0 en production

Démarrez du bon pied

Valider l’application au démarrage

@Required et @Autowired - assurance d’une injection réussie

Page 20: Spring 3.0 en production

Le lazy-loading

Lazy-loading sur les beans «lents à démarrer»

FBI: Fausse Bonne Idée

Page 21: Spring 3.0 en production

L’AOP

Différentes manières de muscler ses objets

Proxy JDK vs CGLIB

AspectJ

Page 22: Spring 3.0 en production

Après le démarrage

Les beans Spring sont disponibles

Et vont être attaqués par de nombreuses threads en parallèle

Attention à être thread safe!

Bean Spring

Page 23: Spring 3.0 en production

Scopes des Beans

Singleton, Session, Flow, Request, Prototype

<aop:scoped-proxy>

Attention au clustering

Page 24: Spring 3.0 en production

Lancement de traitements asynchrones

@Async

TaskExecutor

Permet de tenir la charge comme Twitter

Astuce: avoir un pool d’une seule thread

<task:executor id="executor" pool-size="1"/>

Page 25: Spring 3.0 en production

OSGiOh est-ce j’y aïe?

Page 26: Spring 3.0 en production

4 - Spring & Hibernate

Page 27: Spring 3.0 en production

Spring & HibernateUn secret peu ébruité par SpringSource et JBoss

Une corrélation de 1 dans l’utilisation des deux projets

Page 28: Spring 3.0 en production

Le chargement «paresseux»

Lazy-loading ou outer join?

Utilisez un cache de 2nd niveau

Optimisez vos named queries

Page 29: Spring 3.0 en production

Hibernate Validator

Valide vos objets du domaine

Mort au domaine anémique

Supporté par Spring 3

Page 30: Spring 3.0 en production

Hibernate Search

La méthode intelligente pour embarquer un moteur de recherche

Peut grandement alléger la charge de votre base de données

Parfaitement intégré à Hibernate, transparent pour Spring

Page 31: Spring 3.0 en production

5 - Spring &le Cloud

Page 32: Spring 3.0 en production

Plusieurs types de cloud

IaaS (Infrastructure As A Service): Amazon

Simple location de matériel à la demande

PaaS (Platform As A Service): Google

Cache distribué, base de données spécialisée

Page 33: Spring 3.0 en production

Spring dans le nuage: la théorie

Configuration identique: IoC et AOP doivent fonctionner de la même manière

Permet une plus grande portabilité, en particulier pour le PaaS

Historiquement, une force de Spring: portabilité entre les serveurs d’applications

Page 34: Spring 3.0 en production

Spring dans le nuage: la pratique

Lancer des Singletons dans une JVM pose rarement un problème

Spring ne gère pas les vrais problèmes:

Cache distribué

Base de données

Sessions utilisateurs

Page 35: Spring 3.0 en production

6 - MonitorerSpring

Page 36: Spring 3.0 en production

JMX

Standard

Simple à mettre en place

Fonctionnalités basiques

Page 37: Spring 3.0 en production

Exemple: Spring JMX

<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"> <property name="beans"> <map> <entry key="bean:name=test" value-ref="testBean"/> </map> </property></bean>

Page 38: Spring 3.0 en production

Interro surprise

Cette configuration peut également être réalisée par annotation, pourquoi privilégier le XML?

C’est une configuration d'infrastructure

Elle varie en fonction de l’environnement

Il suffit de copier/coller le fichier pour avoir du monitoring

Page 39: Spring 3.0 en production

Hyperic

Historique des données, agrégation de plusieurs serveurs

Nombreuses technologies reconnues, dont Spring

Open Source, financé par VMWare

Page 40: Spring 3.0 en production

Monitoring de la JVM

Pur monitoring, pas de management

Niveau de détail très fin

Monte en gamme et attaque le monitoring «métier»

Une offre commerciale intéressante: New Relic

Page 41: Spring 3.0 en production

Réveillez-vous,c’est fini!

Page 42: Spring 3.0 en production

Des questions?Vous pouvez les poser sur http://responcia.net

Par e-mail: [email protected]

Ou tout de suite, s’il reste du temps :-)

Un feedback?Envoyez-le sur Twitter: @juliendubois

Page 43: Spring 3.0 en production

Crédits photosLa plupart des photos utilisées pour cette présentation sont sous licence Creative Commons

‣http://www.flickr.com/photos/sebpaquet/5221678/‣http://www.flickr.com/photos/kooks2006/30477042/‣http://www.flickr.com/photos/pedrosimoes7/118946291/‣http://www.flickr.com/photos/liberato/149365463/‣http://www.flickr.com/photos/livenature/177452444/‣http://www.flickr.com/photos/liberato/185711145/‣http://www.flickr.com/photos/gadl/312754502/‣http://www.flickr.com/photos/mikebaird/343297515/‣http://www.flickr.com/photos/mikebaird/343298668/‣http://www.flickr.com/photos/mikebaird/343306006/‣http://www.flickr.com/photos/mikebaird/393734903/‣http://www.flickr.com/photos/revdancatt/449142212/‣http://www.flickr.com/photos/noelzialee/481283924/‣http://www.flickr.com/photos/mikebaird/1659436047/‣http://www.flickr.com/photos/cipherswarm/2369136756/‣http://www.flickr.com/photos/soldiersmediacenter/850896205/‣

‣http://www.flickr.com/photos/yakobusan/2436481628/‣http://www.flickr.com/photos/leomei/2651904068/‣http://www.flickr.com/photos/henryleong/2684287324/‣http://www.flickr.com/photos/srgblog/2831815666/‣http://www.flickr.com/photos/bramus/2998573943/‣http://www.flickr.com/photos/mogwai_83/3022261893/‣http://www.flickr.com/photos/nnova/3060019732/‣http://www.flickr.com/photos/mikebaird/3072645479/‣http://www.flickr.com/photos/lrargerich/3366007510/‣http://www.flickr.com/photos/nostri-imago/3413984703/‣http://www.flickr.com/photos/kaibara/4068996309/‣http://www.flickr.com/photos/8085704@N05/4343639127/‣http://www.flickr.com/photos/jurvetson/4685661036/‣http://www.flickr.com/photos/iancarroll/4743903048/