SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Spring 3 en
    production
S p r i n g U s e r G r o u p   F R
          2 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


@Autowired
private MonBean monBean;
Fichiers XML
Divisez pour mieux
régner

Utilisez les namespaces

Stockez les fichiers
dans
META-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      Contexte parent
Spring                         (métier)

Souvent utilisé sans le
savoir (Spring MVC)

Permet une séparation
logique de l’architecture   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
                          Bean Spring
Attention à être thread
safe!
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"/>
OSGi
Oh est-ce j’y aïe?
4 - Spring &
 Hibernate
Spring & Hibernate
Un 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 - Monitorer
    Spring
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: julien@responcia.fr

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

      Un feedback?
Envoyez-le sur Twitter: @juliendubois
Crédits photos
                La 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/yakobusan/2436481628/
‣http://www.flickr.com/photos/kooks2006/30477042/       ‣http://www.flickr.com/photos/leomei/2651904068/
‣http://www.flickr.com/photos/pedrosimoes7/118946291/ ‣http://www.flickr.com/photos/henryleong/2684287324/
‣http://www.flickr.com/photos/liberato/149365463/       ‣http://www.flickr.com/photos/srgblog/2831815666/
‣http://www.flickr.com/photos/livenature/177452444/     ‣http://www.flickr.com/photos/bramus/2998573943/
‣http://www.flickr.com/photos/liberato/185711145/       ‣http://www.flickr.com/photos/mogwai_83/3022261893/
‣http://www.flickr.com/photos/gadl/312754502/           ‣http://www.flickr.com/photos/nnova/3060019732/
‣http://www.flickr.com/photos/mikebaird/343297515/      ‣http://www.flickr.com/photos/mikebaird/3072645479/
‣http://www.flickr.com/photos/mikebaird/343298668/      ‣http://www.flickr.com/photos/lrargerich/3366007510/
‣http://www.flickr.com/photos/mikebaird/343306006/      ‣http://www.flickr.com/photos/nostri-imago/3413984703/
‣http://www.flickr.com/photos/mikebaird/393734903/      ‣http://www.flickr.com/photos/kaibara/4068996309/
‣http://www.flickr.com/photos/revdancatt/449142212/     ‣http://www.flickr.com/photos/8085704@N05/4343639127/
‣http://www.flickr.com/photos/noelzialee/481283924/     ‣http://www.flickr.com/photos/jurvetson/4685661036/
‣http://www.flickr.com/photos/mikebaird/1659436047/     ‣http://www.flickr.com/photos/iancarroll/4743903048/
‣http://www.flickr.com/photos/cipherswarm/2369136756/
‣http://www.flickr.com/photos/soldiersmediacenter/850896205/
‣

Weitere ähnliche Inhalte

Was ist angesagt?

Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Eric SIBER
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Ippon
 
Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Ippon
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVCNathaniel Richand
 
JPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesJPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesIppon
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les basesAntoine Rey
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Ippon
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Ippon
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsAntoine Rey
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootDNG Consulting
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes AgilesIppon
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework springAntoine Rey
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring BatchAntoine Rey
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur SpringAntoine Rey
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Julien Jakubowski
 

Was ist angesagt? (20)

Maven
MavenMaven
Maven
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
 
Spring Batch ParisJUG
Spring Batch ParisJUG Spring Batch ParisJUG
Spring Batch ParisJUG
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
 
Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
JPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesJPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à Achilles
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du temps
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring Batch
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
 

Andere mochten auch

Gérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerGérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerJulien Dubois
 
Get started with docker &amp; dev ops
Get started with docker &amp; dev opsGet started with docker &amp; dev ops
Get started with docker &amp; dev opsAsya Dudnik
 
использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.Asya Dudnik
 
JHipster à Devoxx 2015
JHipster à Devoxx 2015JHipster à Devoxx 2015
JHipster à Devoxx 2015Julien Dubois
 
Requêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraRequêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraJulien Dubois
 
Performance tuning the Spring Pet Clinic sample application
Performance tuning the Spring Pet Clinic sample applicationPerformance tuning the Spring Pet Clinic sample application
Performance tuning the Spring Pet Clinic sample applicationJulien Dubois
 

Andere mochten auch (9)

Gérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerGérer son environnement de développement avec Docker
Gérer son environnement de développement avec Docker
 
Threads in java
Threads in javaThreads in java
Threads in java
 
Get started with docker &amp; dev ops
Get started with docker &amp; dev opsGet started with docker &amp; dev ops
Get started with docker &amp; dev ops
 
использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.использование Hibernate java persistence.part 1.
использование Hibernate java persistence.part 1.
 
Spring in java
Spring in javaSpring in java
Spring in java
 
De Devoxx au CAC40
De Devoxx au CAC40De Devoxx au CAC40
De Devoxx au CAC40
 
JHipster à Devoxx 2015
JHipster à Devoxx 2015JHipster à Devoxx 2015
JHipster à Devoxx 2015
 
Requêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraRequêtes multi-critères avec Cassandra
Requêtes multi-critères avec Cassandra
 
Performance tuning the Spring Pet Clinic sample application
Performance tuning the Spring Pet Clinic sample applicationPerformance tuning the Spring Pet Clinic sample application
Performance tuning the Spring Pet Clinic sample application
 

Ähnlich wie Spring 3 en production

cours8-GL-minfo-1718.pdf
cours8-GL-minfo-1718.pdfcours8-GL-minfo-1718.pdf
cours8-GL-minfo-1718.pdfSliimAmiri
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Julien Dubois
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSyrine Ben aziza
 
Lbv Dev Meetup #2
 Lbv Dev Meetup #2 Lbv Dev Meetup #2
Lbv Dev Meetup #2LbvDev
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJSVISEO
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Société ELOSI
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012FastConnect
 
Play Framework
Play FrameworkPlay Framework
Play FrameworkArmaklan
 
Introduction à Spring.pdf
Introduction à Spring.pdfIntroduction à Spring.pdf
Introduction à Spring.pdfbadrfathallah2
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
 

Ähnlich wie Spring 3 en production (20)

Spring 3.0 en production
Spring 3.0 en productionSpring 3.0 en production
Spring 3.0 en production
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
cours8-GL-minfo-1718.pdf
cours8-GL-minfo-1718.pdfcours8-GL-minfo-1718.pdf
cours8-GL-minfo-1718.pdf
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
 
Lbv Dev Meetup #2
 Lbv Dev Meetup #2 Lbv Dev Meetup #2
Lbv Dev Meetup #2
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
 
Sonar-Hodson-Maven
Sonar-Hodson-MavenSonar-Hodson-Maven
Sonar-Hodson-Maven
 
Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 
Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 
Spring.NET
Spring.NETSpring.NET
Spring.NET
 
Javavs net
Javavs netJavavs net
Javavs net
 
Présentation1
Présentation1Présentation1
Présentation1
 
Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !Devoxx 2017 : toutes les actualités technologiques à surveiller !
Devoxx 2017 : toutes les actualités technologiques à surveiller !
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012
 
Play Framework
Play FrameworkPlay Framework
Play Framework
 
Introduction à Spring.pdf
Introduction à Spring.pdfIntroduction à Spring.pdf
Introduction à Spring.pdf
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 

Mehr von Julien Dubois

Accessibility in the UK
Accessibility in the UKAccessibility in the UK
Accessibility in the UKJulien Dubois
 
Java on Azure "Back to Basics" series - databases introduction
Java on Azure "Back to Basics" series - databases introductionJava on Azure "Back to Basics" series - databases introduction
Java on Azure "Back to Basics" series - databases introductionJulien Dubois
 
JHipster Code 2020 keynote
JHipster Code 2020 keynoteJHipster Code 2020 keynote
JHipster Code 2020 keynoteJulien Dubois
 
Running Spring Boot microservices in the cloud
Running Spring Boot microservices in the cloudRunning Spring Boot microservices in the cloud
Running Spring Boot microservices in the cloudJulien Dubois
 
JHipster Conf 2019 English keynote
JHipster Conf 2019 English keynoteJHipster Conf 2019 English keynote
JHipster Conf 2019 English keynoteJulien Dubois
 
JHipster Conf 2019 French keynote
JHipster Conf 2019 French keynoteJHipster Conf 2019 French keynote
JHipster Conf 2019 French keynoteJulien Dubois
 
Créer et développer une communauté Open Source
Créer et développer une communauté Open SourceCréer et développer une communauté Open Source
Créer et développer une communauté Open SourceJulien Dubois
 
JHipster Conf 2018 Quiz
JHipster Conf 2018 QuizJHipster Conf 2018 Quiz
JHipster Conf 2018 QuizJulien Dubois
 
Devoxx Belgium 2017 - easy microservices with JHipster
Devoxx Belgium 2017 - easy microservices with JHipsterDevoxx Belgium 2017 - easy microservices with JHipster
Devoxx Belgium 2017 - easy microservices with JHipsterJulien Dubois
 
JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)Julien Dubois
 
Devoxx : being productive with JHipster
Devoxx : being productive with JHipsterDevoxx : being productive with JHipster
Devoxx : being productive with JHipsterJulien Dubois
 
Développer et déployer dans le cloud
Développer et déployer dans le cloudDévelopper et déployer dans le cloud
Développer et déployer dans le cloudJulien Dubois
 
JHipster for Spring Boot webinar
JHipster for Spring Boot webinarJHipster for Spring Boot webinar
JHipster for Spring Boot webinarJulien Dubois
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéJulien Dubois
 
Developing modular Java applications
Developing modular Java applicationsDeveloping modular Java applications
Developing modular Java applicationsJulien Dubois
 

Mehr von Julien Dubois (17)

Accessibility in the UK
Accessibility in the UKAccessibility in the UK
Accessibility in the UK
 
Java on Azure "Back to Basics" series - databases introduction
Java on Azure "Back to Basics" series - databases introductionJava on Azure "Back to Basics" series - databases introduction
Java on Azure "Back to Basics" series - databases introduction
 
JHipster Code 2020 keynote
JHipster Code 2020 keynoteJHipster Code 2020 keynote
JHipster Code 2020 keynote
 
Running Spring Boot microservices in the cloud
Running Spring Boot microservices in the cloudRunning Spring Boot microservices in the cloud
Running Spring Boot microservices in the cloud
 
Spring on Azure
Spring on AzureSpring on Azure
Spring on Azure
 
JHipster Conf 2019 English keynote
JHipster Conf 2019 English keynoteJHipster Conf 2019 English keynote
JHipster Conf 2019 English keynote
 
JHipster Conf 2019 French keynote
JHipster Conf 2019 French keynoteJHipster Conf 2019 French keynote
JHipster Conf 2019 French keynote
 
Créer et développer une communauté Open Source
Créer et développer une communauté Open SourceCréer et développer une communauté Open Source
Créer et développer une communauté Open Source
 
JHipster Conf 2018 Quiz
JHipster Conf 2018 QuizJHipster Conf 2018 Quiz
JHipster Conf 2018 Quiz
 
Devoxx Belgium 2017 - easy microservices with JHipster
Devoxx Belgium 2017 - easy microservices with JHipsterDevoxx Belgium 2017 - easy microservices with JHipster
Devoxx Belgium 2017 - easy microservices with JHipster
 
JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)
 
Devoxx : being productive with JHipster
Devoxx : being productive with JHipsterDevoxx : being productive with JHipster
Devoxx : being productive with JHipster
 
JHipster overview
JHipster overviewJHipster overview
JHipster overview
 
Développer et déployer dans le cloud
Développer et déployer dans le cloudDévelopper et déployer dans le cloud
Développer et déployer dans le cloud
 
JHipster for Spring Boot webinar
JHipster for Spring Boot webinarJHipster for Spring Boot webinar
JHipster for Spring Boot webinar
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
 
Developing modular Java applications
Developing modular Java applicationsDeveloping modular Java applications
Developing modular Java applications
 

Spring 3 en production

  • 1. Spring 3 en production S p r i n g U s e r G r o u p F R 2 1 / 0 9 / 2 0 1 0
  • 2. Qui suis-je? Julien Dubois Spring par la pratique Ancien de SpringSource Responcia Twitter: @juliendubois
  • 3. Sommaire (1)Introduction rapide à Spring (2)Configurer Spring (3)Spring à l'exécution (4)Spring & Hibernate (5)Spring & le Cloud (6)Monitorer Spring
  • 4. 1 - Introduction rapide à Spring Si vous ne connaissez pas, c’est le moment de vous jeter à l’eau!
  • 5. Qu’est-ce que Spring? Framework IoC Open Source Meta-framework Projets Spring-*
  • 6. 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
  • 7. L’injection de dépendances «Ne nous appelez pas, nous vous rappellerons» - pattern d’Hollywood
  • 8. Exemple: injection par constructeur public class MonServiceImpl implements MonService { private AutreService autreService; public MonServiceImpl( AutreService autreService) { this.autreService = autreService; } }
  • 9. La programmation orientée aspect Les beans Spring sont «améliorés», «enrichis» lors de leur injection
  • 10. Exemple: transaction & sécurité avec l’aop public class MonServiceImpl implements MonService { @Transactional @Secured("ROLE_USER") public long methodeMetier(String value) { // ... } }
  • 11. 2 - Configurer Spring
  • 12. Configuration de Spring Configuration XML Configuration par annotations Spring JavaConfig @Autowired private MonBean monBean;
  • 13. Fichiers XML Divisez pour mieux régner Utilisez les namespaces Stockez les fichiers dans META-INF/spring La configuration d’infrastructure varie suivant les environnements
  • 14. 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"/>
  • 15. 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"/>
  • 16. Les application contexts hiérarchiques On peut avoir une hiérarchie de contexts Contexte parent Spring (métier) Souvent utilisé sans le savoir (Spring MVC) Permet une séparation logique de l’architecture Contexte enfant (présentation)
  • 17. 3 - Spring à l'exécution
  • 19. Démarrez du bon pied Valider l’application au démarrage @Required et @Autowired - assurance d’une injection réussie
  • 20. Le lazy-loading Lazy-loading sur les beans «lents à démarrer» FBI: Fausse Bonne Idée
  • 21. L’AOP Différentes manières de muscler ses objets Proxy JDK vs CGLIB AspectJ
  • 22. Après le démarrage Les beans Spring sont disponibles Et vont être attaqués par de nombreuses threads en parallèle Bean Spring Attention à être thread safe!
  • 23. Scopes des Beans Singleton, Session, Flow, Request, Prototype <aop:scoped-proxy> Attention au clustering
  • 24. 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"/>
  • 26. 4 - Spring & Hibernate
  • 27. Spring & Hibernate Un secret peu ébruité par SpringSource et JBoss Une corrélation de 1 dans l’utilisation des deux projets
  • 28. Le chargement «paresseux» Lazy-loading ou outer join? Utilisez un cache de 2nd niveau Optimisez vos named queries
  • 29. Hibernate Validator Valide vos objets du domaine Mort au domaine anémique! Supporté par Spring 3
  • 30. 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
  • 31. 5 - Spring & le Cloud
  • 32. 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
  • 33. 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
  • 34. 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
  • 35. 6 - Monitorer Spring
  • 36. JMX Standard Simple à mettre en place Fonctionnalités basiques
  • 37. 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>
  • 38. 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
  • 39. Hyperic Historique des données, agrégation de plusieurs serveurs Nombreuses technologies reconnues, dont Spring Open Source, financé par VMWare
  • 40. 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
  • 42. Des questions? Vous pouvez les poser sur http://responcia.net Par e-mail: julien@responcia.fr Ou tout de suite, s’il reste du temps :-) Un feedback? Envoyez-le sur Twitter: @juliendubois
  • 43. Crédits photos La 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/yakobusan/2436481628/ ‣http://www.flickr.com/photos/kooks2006/30477042/ ‣http://www.flickr.com/photos/leomei/2651904068/ ‣http://www.flickr.com/photos/pedrosimoes7/118946291/ ‣http://www.flickr.com/photos/henryleong/2684287324/ ‣http://www.flickr.com/photos/liberato/149365463/ ‣http://www.flickr.com/photos/srgblog/2831815666/ ‣http://www.flickr.com/photos/livenature/177452444/ ‣http://www.flickr.com/photos/bramus/2998573943/ ‣http://www.flickr.com/photos/liberato/185711145/ ‣http://www.flickr.com/photos/mogwai_83/3022261893/ ‣http://www.flickr.com/photos/gadl/312754502/ ‣http://www.flickr.com/photos/nnova/3060019732/ ‣http://www.flickr.com/photos/mikebaird/343297515/ ‣http://www.flickr.com/photos/mikebaird/3072645479/ ‣http://www.flickr.com/photos/mikebaird/343298668/ ‣http://www.flickr.com/photos/lrargerich/3366007510/ ‣http://www.flickr.com/photos/mikebaird/343306006/ ‣http://www.flickr.com/photos/nostri-imago/3413984703/ ‣http://www.flickr.com/photos/mikebaird/393734903/ ‣http://www.flickr.com/photos/kaibara/4068996309/ ‣http://www.flickr.com/photos/revdancatt/449142212/ ‣http://www.flickr.com/photos/8085704@N05/4343639127/ ‣http://www.flickr.com/photos/noelzialee/481283924/ ‣http://www.flickr.com/photos/jurvetson/4685661036/ ‣http://www.flickr.com/photos/mikebaird/1659436047/ ‣http://www.flickr.com/photos/iancarroll/4743903048/ ‣http://www.flickr.com/photos/cipherswarm/2369136756/ ‣http://www.flickr.com/photos/soldiersmediacenter/850896205/ ‣