Spring 3 en production JUG Summer Camp 11/09/2010
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
Qui suis-je?
Julien Dubois
Spring par la pratique
Ancien de SpringSource
Responcia
Twitter: @juliendubois
Sommaire
(1)Introduction rapide à Spring
(2)Configurer Spring
(3)Spring à l'exécution
(4)Spring & Hibernate
(5)Spring & le Cloud
(6)Monitorer Spring
1 - Introduction rapide à Spring
Si vous ne connaissez pas, c’est le moment de vous jeter à
l’eau!
Qu’est-ce que Spring?
Framework IoC
Open Source
Meta-framework
Projets Spring-*
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
L’injection de dépendances
«Ne nous appelez pas, nous vous rappellerons» - pattern d’Hollywood
Exemple: injection par constructeur
public class MonServiceImpl implements MonService {
private AutreService autreService;
public MonServiceImpl( AutreService autreService) {
this.autreService = autreService; } }
La programmation orientée aspect
Les beans Spring sont «améliorés», «enrichis» lors de leur injection
Exemple: transaction & sécurité avec l’aop
public class MonServiceImpl implements MonService {
@Transactional @Secured("ROLE_USER") public long methodeMetier(String value) { // ... }}
2 - Configurer Spring
Configuration de Spring
Configuration XML
Configuration par annotations
Spring JavaConfig
@Autowiredprivate MonBean monBean;
Fichiers XMLDivisez pour mieux régner
Utilisez les namespaces
Stockez les fichiers dansMETA-INF/spring
La configuration d’infrastructure varie suivant les environnements
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"/>
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"/>
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)
3 - Spring à l'exécution
Spring est partout
Démarrez du bon pied
Valider l’application au démarrage
@Required et @Autowired - assurance d’une injection réussie
Le lazy-loading
Lazy-loading sur les beans «lents à démarrer»
FBI: Fausse Bonne Idée
L’AOP
Différentes manières de muscler ses objets
Proxy JDK vs CGLIB
AspectJ
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
Scopes des Beans
Singleton, Session, Flow, Request, Prototype
<aop:scoped-proxy>
Attention au clustering
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"/>
OSGiOh est-ce j’y aïe?
4 - Spring & Hibernate
Spring & HibernateUn secret peu ébruité par SpringSource et JBoss
Une corrélation de 1 dans l’utilisation des deux projets
Le chargement «paresseux»
Lazy-loading ou outer join?
Utilisez un cache de 2nd niveau
Optimisez vos named queries
Hibernate Validator
Valide vos objets du domaine
Mort au domaine anémique
Supporté par Spring 3
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
5 - Spring &le Cloud
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
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
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
6 - MonitorerSpring
JMX
Standard
Simple à mettre en place
Fonctionnalités basiques
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>
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
Hyperic
Historique des données, agrégation de plusieurs serveurs
Nombreuses technologies reconnues, dont Spring
Open Source, financé par VMWare
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
Réveillez-vous,c’est fini!
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
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/