JEE: Introduction à Jakarta Enterprise Edition
Java
I311
JEE
Introduction à la construction d’application d’entreprises avec Introduction à Jakarta Enterprise Edition (JEE).
Applications Complexes
- Gestion des ressources :
- Bases de données, systèmes de fichiers, services externes, etc.
- Utilisation efficace et gestion des connexions, des pools de connexions, etc.
- Accès distant :
- Protocoles et technologies : TCP/IP, RMI, CORBA, REST, WebSocket, etc.
- Communication entre services et intégration de systèmes distribués.
- Transactions :
- Gestion des transactions, y compris les transactions applicatives.
- Assurer l’intégrité des données et la cohérence des opérations.
- Gestion et répartition de la charge :
- Clustering et équilibrage de charge pour améliorer la disponibilité et la performance.
- Répartition des requêtes et gestion des sessions.
- Arrêt des serveurs sans arrêt de l’application :
- Techniques pour mettre à jour ou redémarrer les serveurs sans interrompre le service.
- Gestion des déploiements continus et des mises à jour en direct.
- Sécurité :
- Authentification, autorisation, chiffrement des données, etc.
- Protection contre les attaques et les vulnérabilités.
Serveurs d’Application
- Focus sur la logique métier :
- Permet aux développeurs de se concentrer sur la partie “métier” de l’application.
- Les services techniques sont fournis par le serveur d’application (middleware).
- Services fournis par le serveur d’application :
- Gestion des transactions, sécurité, gestion des connexions, etc.
- Facilite le développement en fournissant des services prêts à l’emploi.
- Déploiement d’applications :
- L’application est “déployée” sous forme de briques logicielles sur le serveur.
- Simplifie la gestion et la maintenance des applications.
- Spécifications “parapluie” pour Java :
- S’appuient sur des “standards” pour les services courants.
- Définissent une approche spécifique pour coordonner les services.
- Solutions les plus utilisées :
- Jakarta EE : Une plateforme robuste pour le développement d’applications d’entreprise.
- Spring : Un framework flexible et modulaire pour le développement d’applications Java.
- Infrastructure Middleware
- Couche intermédiaire entre OS et applications
- Gestion des ressources système
- Orchestration des services techniques
Standards & Solutions Java Enterprise
- Plateformes Standards
- Jakarta EE
- Standard officiel Java enterprise
- APIs certifiées
- Serveurs d’applications certifiés
- Gouvernance Eclipse Foundation
- MicroProfile
- Optimisé pour microservices
- Basé sur Jakarta EE
- Monitoring & Résilience
- Compatible Kubernetes
- Jakarta EE
- Solutions Alternatives
- Spring Framework
- Framework enterprise populaire
- Configuration flexible
- Écosystème riche
- Support cloud & microservices
- Quarkus
- Compilation native
- Démarrage ultra-rapide
- Optimisé pour le cloud
- Extensions Kubernetes
- Spring Framework
Ces plateformes partagent des composants communs (Servlet, JPA, CDI…) tout en proposant des approches différentes
Introduction à Jakarta EE
- Évolution Historique
- Ère J2EE (1999-2006)
- Introduction des concepts enterprise Java
- Focus sur les applications distribuées
- Complexité d’implémentation
- Ère J2EE (1999-2006)
- Ère Java EE (2006-2017)
- Modernisation avec annotations
- Simplification des EJBs
- Acquisition par Oracle
- Ère Jakarta EE (2017+)
- 2018: Jakarta EE 8 - Transition Eclipse Foundation
- 2020: Jakarta EE 9 - Nouveau namespace
- 2022: Jakarta EE 10 - Core Profile & cloud features
- 2024: Jakarta EE 11
- Orientée cloud-native (exploiter l’élasticité et la résilience du cloud) et productivité développeur
- Cloud-Native: Optimisé pour containers, Auto scaling, Support microservices, Intégration Kubernetes native, …
- Developer Experience : Java 21, Configuration simplifiée, Zero-config possible, Live reload, …
Spécifications Principales Jakarta EE
- Web & Services
- Servlet 6.0 - Conteneur web & gestion HTTP
- JAX-RS 3.1 - Services web REST
- WebSocket 2.1 - Communication bidirectionnelle
- Données & Métier
- JPA 3.2 - Mapping objet-relationnel
- EJB 4.0 - Composants d’entreprise
- JTA 2.0 - Transactions distribuées
- Infrastructure
- CDI 4.0 - Injection de dépendances
- Security 3.0 - Authentification & autorisation
- JSON-B 3.0 - Binding JSON
Un ensemble cohérent d’APIs standardisées pour le développement d’applications d’entreprise
Jakarta EE
Serveurs d’Applications Jakarta EE
- WildFly
- Descendant de JBoss/RedHat
- Performances élevées
- Clustering robuste
- Support MicroProfile
- Administration centralisée
- GlassFish
- Implémentation de référence
- Support Jakarta EE complet
- Oracle Corporation
- Facile à utiliser
- Payara
- Dérivé optimisé de GlassFish
- Support production 24/7
- Monitoring avancé
- Intégration native cloud
- Version Micro disponible
- Open Liberty
- Développé par IBM
- Configuration automatique
- Optimisé conteneurs
- Support MicroProfile
- Features modulaires à la demande
- Apache TomEE
- Extension de Tomcat
- Faible consommation mémoire
- Support Jakarta EE Web Profile
Liste complète : Jakarta EE Compatibility
Serveurs Utilisés dans ce Cours
- Payara Platform
- Version Full
- Environnement de développement complet
- Interface admin (port 4848)
- Applications web (port 8080)
- Installation via Docker recommandée
- Debug et monitoring intégrés
- Version Micro
- Déploiement microservices
- Image Docker légère (~200MB)
- Démarrage rapide (<5s)
- CLI optimisée
- Idéal pour le cloud
- Version Full
- Open Liberty
- Serveur léger et modulaire
- Mode développement avec reload
- Applications web (port 9080)
- Intégration IDE simplifiée
- Configuration flexible (server.xml)
- Outils de Développement
- Start Jakarta EE
- Générateur de projets
- Templates Maven/Gradle
- Configurations prêtes à l’emploi
- VS Code
- Payara Tools
- Liberty Tools
- Java Extension Pack
- IntelliJ IDEA
- Support Jakarta EE natif (Ultimate)
- Integration serveurs d’applications
- Hot reload optimisé
- Debugging avancé
- Templates Jakarta EE
- Start Jakarta EE
Types de Conteneurs
- Web Container
- Composants Web
- Servlets (Jakarta Servlet)
- Pages JSP/Facelets (Jakarta Faces)
- WebSocket Endpoints
- Resources REST (Jakarta RESTful WS)
- Services
- HTTP request/response
- Cookie/Session management
- Web security & HTTPS
- Content negotiation
- Composants Web
- EJB Container
- Enterprise Beans
- Stateless/Stateful Session Beans
- Singleton Session Beans
- Message-Driven Beans
- Services
- Transaction management (JTA)
- Security (JAAS)
- Resource pooling
- Asynchronous messaging
- Timer services
- Enterprise Beans
- Application Client Container
- Applications
- Java SE clients
- Remote EJB access
- Services
- JNDI naming
- Security context
- EJB invocation
Architecture Multi-tiers
- Tier Client
- Navigateurs web (HTML5/JS), Applications mobiles, Clients Java SE, Applications REST,
- Tier Web
- Présentation
- Jakarta Faces (JSF), Jakarta Pages (JSP)
- Contrôleurs
- Jakarta Servlet, Jakarta REST (JAX-RS), Jakarta WebSocket
- Présentation
- Tier Enterprise
- Services Métier
- Enterprise JavaBeans (EJB), Context & Dependency Injection (CDI), Jakarta Transactions (JTA)
- Messaging
- Jakarta Messaging (JMS), Message-Driven Beans
- Services Métier
- Tier Données
- Persistence
- Jakarta Persistence (JPA), Jakarta NoSQL
- Transaction
- Jakarta Transactions (JTA)
- Persistence
Installation du Serveur d’Application Payara
- Méthodes d’installation :
- Installation manuelle :
- Télécharger Payara depuis : Payara Platform Community Edition
- Différents profils disponibles : web ou full (en fonction des technologies nécessaires) voire micro (pour les microservices).
- Installation avec Docker :
- Images Docker disponibles sur : Docker Hub - Payara
- Configuration avec Docker Compose : GitHub - dockercompose-payara
- Installation depuis Maven avec le plugin Cargo :
- Utiliser le plugin Maven Cargo : Documentation du plugin Cargo
- Installation manuelle :
- Payara Micro :
- Payara Micro est une version légère de Payara Server, idéale pour les microservices.
- Télécharger Payara Micro depuis : Payara Micro
- Ports par défaut :
- 8080 : Port pour les applications.
- 4848 : Port pour l’interface d’administration.
Installation du Serveur d’Application Open Liberty
- Méthodes d’installation :
- Installation manuelle :
- Télécharger Open Liberty depuis : Open Liberty Downloads
- Installation avec Docker :
- Images Docker disponibles sur : Docker Hub - Open Liberty
- Configuration avec Docker : Open Liberty Docker Documentation
- Installation depuis Maven :
- Documentation du plugin Maven : Open Liberty Maven Plugin
- Installation manuelle :
- Open Liberty MicroProfile :
- Open Liberty prend en charge MicroProfile, une collection de spécifications pour les microservices.
- Télécharger Open Liberty MicroProfile depuis : Open Liberty MicroProfile
- Ports par défaut :
- 9080 : Port pour les applications, 9443 : Port pour les applications sécurisées (HTTPS).
Architecture & Déploiement
- JAR (Java Archive)
- Librairies et composants
- CDI Beans
- EJB (Enterprise JavaBeans)
- Structure: META-INF/MANIFEST.MF
- WAR (Web Archive)
- Applications web
- Servlets, JSP, JSF
- Services REST (JAX-RS)
- Structure: WEB-INF/web.xml
- EAR (Enterprise Archive)
- Applications complexes
- Multiple modules (WAR/JAR)
- Configuration globale
- Structure:
- META-INF/application.xml
- lib/
- modules/
Méthodes de Déploiement d’une application (Manuel)
Interface Administration
- Accès:
http://localhost:4848
- Navigation: Applications > Deploy
- Upload du fichier WAR/EAR
Ligne de Commande (asadmin)
nécessite une installation GlassFish/Payara
# Gestion du domaine
asadmin start-domain [domain_name]
asadmin stop-domain [domain_name]
# Déploiement
asadmin deploy myapp.war
asadmin redeploy myapp.war
asadmin undeploy myapp
# Liste des applications
asadmin list-applications
Méthodes de Déploiement d’une application (Automatique)
Maven Plugin
- Cargo Maven Plugin : Documentation
- https://docs.payara.fish/enterprise/docs/documentation/ecosystem/maven-plugin.html
Docker
- Utilisation d’un Dockerfile pour construire une image Docker
FROM payara/server-full:latest
COPY target/myapp.war $DEPLOY_DIR
Méthodes de Déploiement d’une application (A chaud)
- IDEs like IntelliJ IDEA, Eclipse, NetBeans support hot deployment
- Changes in the code are automatically reflected in the running application
- https://docs.payara.fish/enterprise/docs/Technical%20Documentation/Ecosystem/IDE%20Integration/Hot%20Deploy%20and%20Auto%20Deploy.html
- https://www.jetbrains.com/help/idea/updating-applications-on-application-servers.html
Première utilisation JAX-RX + JPA
- https://github.com/ebpro/jakartee-minimal-jpa-jaxrs
- Une entité : Message
- Une DAO (un CDI Bean) : MessageDAO
- L’entity manager est injecté par le framework
- attention au fichier
beans.xml
- Une ressource REST : MessageResource
- Une instance de la DAO est injectée