Introduction à JavaEE
Présentons-nous
Olivier Truong
2006 : Télécom Bretagne
2006-2014 : Air France
Concepteur/Développeur applications JavaEE
Responsable d’équipe, développeur, coach technique
github.com/oltruong
@oltruong
Introduction à JavaEE
Objectifs
Découvrir l’origine et l’objectif de JavaEE
Parcourir les possibilités offertes par JavaEE et
leurs principes sous-jacents
Partager l’expérience JavaEE
Introduction à JavaEE
Pourquoi JavaEE ?
Pour JavaEE 6
+50 millions téléchargements composants JavaEE
#1 choix pour les développeurs d’entreprise
#1 plateforme de développement
Profils JavaEE recherchés
Introduction à JavaEE
Plan
Survol de JavaEE Les besoins
Un peu d’histoire
Concepts de base
Les fonctionnalités de JavaEE Transverses
Persistance
Logique métier
Communication
Présentation
L’expérience JavaEE Démonstration
La boîte à outils
Avec le recul…
Introduction à JavaEE
Question de programmation
Vous voulez une fonction
qui vous indique si une liste contient un élément précis…
Introduction à JavaEE
JavaEE
Ensemble de spécifications pour construire
une application d’entreprise basée sur le
langage Java
Ensemble d’API mises à disposition
Se concentrer sur la logique métier
Introduction à JavaEE
Java en 1999
Pas de standard Java EE
Pas d’open source (en Java :)
Serveurs proposés par quelques fournisseurs
Introduction à JavaEE
Java EE 7
Plus riche 31 spécifications
Plus léger Profil Web
Elagage (pruning)
Plus simple Toujours plus d’annotations
Introduction à JavaEE
Qui définit JavaEE ?
Java Specification Request
Exemple : JSR342, JSR346
Introduction à JavaEE
Création d’une Java Specification Request (JSR)
Spécification complète
Implémentation de référence
Test de compatibilité
Technology Compatibility Kit (TCK)
Adopt a JSR Program !
Introduction à JavaEE
L’arrivée de l’Open Source
Spécification
puis implémentation
Implémentation
puis spécification
Introduction à JavaEE
Conteneurs, composants et services
Les conteneurs fournissent des services à leurs composants
Introduction à JavaEE
Concrètement…
Conteneur Web : fichier WAR Conteneur EJB : fichier JAR
Application gobale :
fichier EAR
Introduction à JavaEE
Plan
Survol de JavaEE Les besoins
Un peu d’histoire
Concepts de base
Les fonctionnalités de JavaEE Transverse
Persistance
Logique métier
Communication
Présentation
L’expérience JavaEE Démonstration
La boîte à outils
Avec le recul…
Introduction à JavaEE
Context and Dependency Injection 1.1
Le besoin : des objets qui dépendent d’autres
Introduction à JavaEE
Comment instancier mes objets
Tout simplement…
Ou bien avec l’injection de dépendances
Introduction à JavaEE
Principe
Inversion de contrôle (IoC)
Injection de dépendances
Les ressources sont injectées par le conteneur dans
l’application au lieu d’être gérées par l’application
Introduction à JavaEE
Context and Dependency Injection
En cas de conflit…
Utilisation de votre annotation via @Qualifier
Introduction à JavaEE
Le problème
Objet java Base de données
?
Code Java pour traduire en SQL
ID ISBN NAME PRICE
Introduction à JavaEE
La solution
Object-Relational Mapping
Délègue à un framework la correspondance entre objets
et tables
Java Persistence API (2.1)
Introduction à JavaEE
Java Persistence API
Facilite l’Object-Relational Mapping :
Annotations
Fichier de description XML
Objets Entités
Introduction à JavaEE
Java Persistence API
(Configuration par exception)
Convention plutôt que configuration
Introduction à JavaEE
Java Persistence API
Ecriture de requêtes complexes :
Java Persistence Query Language
Similaire au SQL
Retourne des entités et non un tableau
SELECT b from Book b where b.name LIKE ‘Java%'
Introduction à JavaEE
Java Persistence API
Et bien plus encore…
Stratégie d’héritage @Inheritance (Strategy…)
Chargement des relations (EAGER/LAZY)
Gestion des relations 1…n @OnetoMany
Introduction à JavaEE
Tâches complexes
Interaction entre composants
Communication externe
Entreprise Java Beans (3.2)
Composant côté serveur qui encapsule
la logique métier
Introduction à JavaEE
Différence avec la persistance
JPA modélise les noms (Pilote, Avion)
EJB modélise les verbes (affecter un pilote)
Introduction à JavaEE
Bean sans état
Une tâche doit s’accomplir par un appel de méthode
Conteneur EJB
Pool
Instance 1
Instance 2
Client 1
Client 2
Client 3
Introduction à JavaEE
Bean avec état
Tâches nécessitant plusieurs étapes :
une instance par session
Conteneur EJB
Instance 1
Instance 2
Client 1
Client 2
Client 3 Instance 3
Introduction à JavaEE
Pour bien comprendre la différence
Imaginez que vous voulez changer de forfait…
Centre d’appel
Introduction à JavaEE
Bean singleton
Tâches où l’on ne requiert qu’un seul exemplaire
Conteneur EJB
Instance unique
Client 1
Client 2
Client 3
Introduction à JavaEE
Transaction
Ensemble d’opérations qui gardent les données
dans un état cohérent
Exemple : Paiement d’un loyer
Locataire Propriétaire
Introduction à JavaEE
Exemple de transaction
Prélèvement du compte locataire
Versement sur compte propriétaire
Enregistrement des opérations dans l’historique
Introduction à JavaEE
Transaction
A
C
I
D
tomicité
ohérence
solement
urée
Java Transaction API (1.2)
Introduction à JavaEE
Et bien plus encore
Conteneur intégré
API permettant d’exécuter les EJB dans un
environnement Java SE
EJB Lite
Sous ensemble de l’API EJB (profil Web)
Introduction à JavaEE
Communication externe
Echanger avec des systèmes différents
Définir un format d’échange commun
WEB Services (Simple Object Access Protocol,
REpresentational State Transfer)
Introduction à JavaEE
JavaEE et les WebServices
Java Architecture for XML Binding (JAXB)
Java API for XML-Based Web Services (JAX-WS)
Java API for RESTful Web Services (JAX-RS)
Introduction à JavaEE
Nouveauté JavaEE7 : API pour JSON
JavaScript Object Notation : JSON
Plus concis que le format XML
Introduction à JavaEE
Architecture en API
Open Data : exemple : Vélib
Introduction à JavaEE
Servlet
Très utilisées (indirectement)
Version 3.1 : plus simple et plus riche
Reste bas niveau
Introduction à JavaEE
Java Server Page
Langage de script pour écrire une servlet
Cycle de vie géré par le conteneur Web
Introduction à JavaEE
Des marqueurs, encore des marqueurs
JSP Standard Tag Library
Offre des bibliothèques de marqueurs
Introduction à JavaEE
Java Server Faces va encore plus loin
Source : oracle.com
Enrichir toujours plus son interface
Pouvoir définir ses propres composants graphiques
Retourner du contenu multimédia / Utilisation d’Ajax
Introduction à JavaEE
Différents frameworks disponibles
Introduction à JavaEE
Plan
Survol de JavaEE Les besoins
Un peu d’histoire
Concepts de base
Les fonctionnalités de JavaEE Persistance
Logique métier
Présentation
Communication
L’expérience JavaEE Démonstration
La boîte à outils
Avec le recul…
Introduction à JavaEE
Ça n’a pas l’air simple tout ça…
La parole est au maître…
Introduction à JavaEE
Quel est le meilleur framework ?
http://static.raibledesigns.com/repository/presentations/Comparing_JVM_Web_Frameworks_February2014.pdf
Quel besoin ?
Quelles priorités ?
Quelles contraintes ?
Introduction à JavaEE
Conclusion
JavaEE capitalise sur l’expérience pour
construire des applications d’entreprise
Introduction à JavaEE
Conclusion
JavaEE, un standard en perpétuelle évolution,
soutenu par une communauté et influencé par
le monde OpenSource
Plusieurs implémentations disponibles !
Introduction à JavaEE
Conclusion
JavaEE,
une plateforme riche et plus simple
Une palette d’API à votre disposition
Introduction à JavaEE
Conclusion
A VOUS de comprendre le besoin et de
concevoir l’application adéquate !
Introduction à JavaEE
Quelques pensées
Any fool can write code that a computer can
understand. Good programmers write code that
humans can understand. Martin Fowler
Introduction à JavaEE
Quelques pensées
Always code as if the guy who ends up
maintaining your code will be a violent
psychopath who knows where you live. Martin Golding
Ça n’est pas Martin Golding
Introduction à JavaEE
Pour aller plus loin
Lire
Voir, écouter
Rencontrer
http://download.oracle.com/javaee/7/tutorial/doc/
http://jcp.org