spring 3.0 en production
DESCRIPTION
TRANSCRIPT
![Page 1: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/2.jpg)
Qui suis-je?
Julien Dubois
Spring par la pratique
Ancien de SpringSource
Responcia
Twitter: @juliendubois
![Page 3: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/5.jpg)
Qu’est-ce que Spring?
Framework IoC
Open Source
Meta-framework
Projets Spring-*
![Page 6: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/7.jpg)
L’injection de dépendances
«Ne nous appelez pas, nous vous rappellerons» - pattern d’Hollywood
![Page 8: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/9.jpg)
La programmation orientée aspect
Les beans Spring sont «améliorés», «enrichis» lors de leur injection
![Page 10: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/11.jpg)
2 - Configurer Spring
![Page 12: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/12.jpg)
Configuration de Spring
Configuration XML
Configuration par annotations
Spring JavaConfig
@Autowiredprivate MonBean monBean;
![Page 13: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/17.jpg)
3 - Spring à l'exécution
![Page 18: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/18.jpg)
Spring est partout
![Page 19: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/20.jpg)
Le lazy-loading
Lazy-loading sur les beans «lents à démarrer»
FBI: Fausse Bonne Idée
![Page 21: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/21.jpg)
L’AOP
Différentes manières de muscler ses objets
Proxy JDK vs CGLIB
AspectJ
![Page 22: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/23.jpg)
Scopes des Beans
Singleton, Session, Flow, Request, Prototype
<aop:scoped-proxy>
Attention au clustering
![Page 24: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/25.jpg)
OSGiOh est-ce j’y aïe?
![Page 26: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/26.jpg)
4 - Spring & Hibernate
![Page 27: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/29.jpg)
Hibernate Validator
Valide vos objets du domaine
Mort au domaine anémique
Supporté par Spring 3
![Page 30: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/31.jpg)
5 - Spring &le Cloud
![Page 32: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/35.jpg)
6 - MonitorerSpring
![Page 36: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/36.jpg)
JMX
Standard
Simple à mettre en place
Fonctionnalités basiques
![Page 37: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/41.jpg)
Réveillez-vous,c’est fini!
![Page 42: Spring 3.0 en production](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.us/reader034/viewer/2022051013/54743efab4af9fcd0a8b55ee/html5/thumbnails/43.jpg)
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/