JEE: Introduction à Jakarta Enterprise Edition

Université de Toulon

LIS UMR CNRS 7020

2024-11-13

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
  • 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

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 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

Jakarta EE - Profiles

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
  • 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

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
  • 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
  • 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
  • Tier Enterprise
    • Services Métier
      • Enterprise JavaBeans (EJB), Context & Dependency Injection (CDI), Jakarta Transactions (JTA)
    • Messaging
      • Jakarta Messaging (JMS), Message-Driven Beans
  • Tier Données
    • Persistence
      • Jakarta Persistence (JPA), Jakarta NoSQL
    • Transaction
      • Jakarta Transactions (JTA)

Installation du Serveur d’Application Payara

  • Méthodes d’installation :
  • 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 :
  • 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