L’architecture J2EE
L’architecture J2EE
ludovic.maitre@free.fr
Plan (1/3)
Plan (1/3)
Principes de J2EE
Principes de J2EE
Composants, conteneurs et services
Composants, conteneurs et services
API
API
Rôles
Rôles
Contrats
Contrats
Le contrat côté client
Le contrat côté client
Le contrat du conteneur
Le contrat du conteneur
Plan (2/3)
Plan (2/3)
Topologie(s) d'une application J2EE
Topologie(s) d'une application J2EE
Application multitiers
Application multitiers
Application web
Application web
Application Business-to-business
Application Business-to-business
Composants J2EE
Composants J2EE
Conteneur de composants J2EE
Conteneur de composants J2EE
Clients J2EE
Clients J2EE
Composants web
Composants web
Plan (3/3)
Plan (3/3)
Technologies J2EE
Technologies J2EE
Remote Method Interface (RMI)
Remote Method Interface (RMI)
JavaBeans
JavaBeans
Java Naming and Directory Interface (JNDI)
Java Naming and Directory Interface (JNDI)
Java DataBase Connectivity (JDBC)
Java DataBase Connectivity (JDBC)
Principes de J2EE (1/3)
Principes de J2EE (1/3)
L’architecture J2EE est une architecture d’application distribuée à base de L’architecture J2EE est une architecture d’application distribuée à base de
composants. composants.
Elle identifie et donne les spécifications des composants de l’application :Elle identifie et donne les spécifications des composants de l’application :
composants logiciels ou beans (EJB),composants logiciels ou beans (EJB), conteneurconteneur
serveursserveurs clientsclients
Les conteneurs isolent les beans du client et d’une implémentation spécifique du Les conteneurs isolent les beans du client et d’une implémentation spécifique du
serveur. serveur.
Principes de J2EE (2/3)
Principes de J2EE (2/3)
Les conteneurs et serveurs implémentent les mécanismes de bas niveau utilisés Les conteneurs et serveurs implémentent les mécanismes de bas niveau utilisés
par les applications: par les applications:
transactions,transactions, persistance,persistance,
gestion de la mémoire,gestion de la mémoire, SécuritéSécurité
Les spécifications J2EE s’intéressent aux activités d’une application liées:Les spécifications J2EE s’intéressent aux activités d’une application liées:
au développement, au développement, au déploiement,au déploiement, à l’exécutionà l’exécution
Principes de J2EE (3/3)
Rôles
Rôles
J2EE définit différents rôles associés aux différentes parties intervenant dans la J2EE définit différents rôles associés aux différentes parties intervenant dans la
production d’une application production d’une application
Contrats (1/2)
Contrats (1/2)
L’architecture J2EE définit des contrats associés à un bean. Ces contrats L’architecture J2EE définit des contrats associés à un bean. Ces contrats sont passés entre le conteneur et les clients qui utilisent le beans. Ce sont sont passés entre le conteneur et les clients qui utilisent le beans. Ce sont des règles obligatoires qui doivent être respectées par le fournisseur de des règles obligatoires qui doivent être respectées par le fournisseur de l’EJB et le conteneur.
l’EJB et le conteneur.
Le but des contrats est de fournir un modèle de développement standard Le but des contrats est de fournir un modèle de développement standard pour les applications qui utilisent les composants EJBs.
pour les applications qui utilisent les composants EJBs. En particulier, 3 contrats sont définis:En particulier, 3 contrats sont définis:
le contrat côté client doit permettre de fournir une vue uniforme du beans au le contrat côté client doit permettre de fournir une vue uniforme du beans au
client, indépendante de la plate-forme de déploiement client, indépendante de la plate-forme de déploiement
le contrat côté conteneur doit permettre la portabilité des beans sur différents le contrat côté conteneur doit permettre la portabilité des beans sur différents
serveurs EJBs serveurs EJBs
le contrat côté déploiement: fournir un format de fichier standard pour distribuer le contrat côté déploiement: fournir un format de fichier standard pour distribuer
les beans; ce format doit être supporté par tous les outils liés aux EJBs. les beans; ce format doit être supporté par tous les outils liés aux EJBs.
Contrats (2/2)
Le contrat côté client
Le contrat côté client
Il précise que le bean doit pouvoir être localisé en utilisant JNDI.Il précise que le bean doit pouvoir être localisé en utilisant JNDI.
Il précise une interface standard d’accès au beans qui doit être fournie par le Il précise une interface standard d’accès au beans qui doit être fournie par le
fournisseur d’EJBs (EJB provider). fournisseur d’EJBs (EJB provider).
L’interface standard définit en fait 2 interfaces à implémenter par les beans :L’interface standard définit en fait 2 interfaces à implémenter par les beans : l’interface Home contient les méthodes liées à la gestion du beans: create, remove, l’interface Home contient les méthodes liées à la gestion du beans: create, remove,
finder,…
finder,…
l’interface Remote contient les méthodes de l’applicationl’interface Remote contient les méthodes de l’application
Le conteneur doit implémenter un mécanisme de délégation pour faire suivre Le conteneur doit implémenter un mécanisme de délégation pour faire suivre
les appels au bean. les appels au bean.
Il n’y a pas de communication directe entre le client et le bean mais une Il n’y a pas de communication directe entre le client et le bean mais une
communication entre le client et le conteneur, ce dernier se chargeant de communication entre le client et le conteneur, ce dernier se chargeant de retransmettre les messages au bean.
Le contrat du conteneur
Le contrat du conteneur
Le conteneur doit gérer le cycle de vie et l’état des beans, la sécurité, les Le conteneur doit gérer le cycle de vie et l’état des beans, la sécurité, les
transactions distribuées, la concurrence et l’extensibilité. transactions distribuées, la concurrence et l’extensibilité.
Le conteneur appelle des méthodes fournies par le bean lorsque c’est Le conteneur appelle des méthodes fournies par le bean lorsque c’est
nécessaire (callback methods). nécessaire (callback methods).
Le conteneur doit gérer plusieurs types de beans:Le conteneur doit gérer plusieurs types de beans:
Beans de session (session beans)Beans de session (session beans) Beans d’entité (entity beans)Beans d’entité (entity beans)
Les spécifications EJB 2.0 ajoutent un 3ème type de beans, les beans à Les spécifications EJB 2.0 ajoutent un 3ème type de beans, les beans à
message (message driven beans). message (message driven beans).
Topologie(s) d'une
Topologie(s) d'une
application J2EE
application J2EE
Application multi-tiers
Client autonome
Client autonome "EJB-centric"
Application web
Détails application web
Application
Application
Business-to-business
Composants J2EE (1/2)
Composants J2EE (1/2)
Un composant est une unité logicielle de niveau applicatif.
Un composant est une unité logicielle de niveau applicatif.
En plus des JavaBeans, qui font partie du J2SE, J2EE supporte les
En plus des JavaBeans, qui font partie du J2SE, J2EE supporte les
types de composants suivants :
types de composants suivants :
applets, applets,
application clientes, application clientes,
composants Enterprise JavaBeans (EJB), composants Enterprise JavaBeans (EJB), composants Web, composants Web,
Composants J2EE (2/2)
Composants J2EE (2/2)
Les applets et applications clientes sont exécutées sur le poste du
Les applets et applications clientes sont exécutées sur le poste du
client tandis que les composants EJB, Web et adaptateurs de
client tandis que les composants EJB, Web et adaptateurs de
ressources fonctionnent sur le serveur.
ressources fonctionnent sur le serveur.
A l'exception des adaptateurs de ressources, les concepteurs et
A l'exception des adaptateurs de ressources, les concepteurs et
développeurs d'application développent les composants d'une
développeurs d'application développent les composants d'une
application J2EE.
application J2EE.
Les adapteurs de ressources et logiciels associés sont en général
Les adapteurs de ressources et logiciels associés sont en général
vendus par les fournisseurs de systèmes d'information de l'entreprise et
vendus par les fournisseurs de systèmes d'information de l'entreprise et
ensuite déployés sur les serveurs pour accèder aux données.
Conteneur de composants
Conteneur de composants
J2EE
J2EE
Tous les composants J2EE dépendent à l'exécution d'un entité système Tous les composants J2EE dépendent à l'exécution d'un entité système baptisée conteneur (container).
baptisée conteneur (container).
Les conteneurs fournissent aux composants des services de bases comme Les conteneurs fournissent aux composants des services de bases comme la gestion du cycle de vie, la sécurité, le déploiement et l'exécution en
la gestion du cycle de vie, la sécurité, le déploiement et l'exécution en thread.
thread.
Comme c'est le conteneur qui gère ces services, la plupart des paramètres Comme c'est le conteneur qui gère ces services, la plupart des paramètres de configuration de ces services peuvent être configurés lors du
de configuration de ces services peuvent être configurés lors du déploiement des composants en fonction de la plateforme d'accueil. déploiement des composants en fonction de la plateforme d'accueil.
Un fournisseur d'Enterprise Java Bean peut spécifier un nom de base de Un fournisseur d'Enterprise Java Bean peut spécifier un nom de base de données auquel le composant doit accéder et c'est seulement lors du données auquel le composant doit accéder et c'est seulement lors du
déploiement que les informations d'accès à la base (nom d'utilisateur et mot déploiement que les informations d'accès à la base (nom d'utilisateur et mot de passe ) seront configurées.
de passe ) seront configurées.
Les sections suivantes donnent un bref apercu des composants, qui seront Les sections suivantes donnent un bref apercu des composants, qui seront étudiés plus en détail par la suite.
Clients J2EE
Clients J2EE
La plateforme J2EE prévoit que plusieurs types de clients puissent
La plateforme J2EE prévoit que plusieurs types de clients puissent
accéder à une même application et interagir avec les composants côté
accéder à une même application et interagir avec les composants côté
serveur.
Applets
Applets
Les Applets sont des clients Java qui s'exécutent habituellement dans
Les Applets sont des clients Java qui s'exécutent habituellement dans
un navigateur web et qui ont accès à toutes les possibilités du langage
un navigateur web et qui ont accès à toutes les possibilités du langage
Java.
Java.
Les applications J2EE peuvent utiliser des clients applets pour avoir
Les applications J2EE peuvent utiliser des clients applets pour avoir
des interfaces utilisateurs plus puissantes que celles connues en
des interfaces utilisateurs plus puissantes que celles connues en
HTML.
HTML.
Applications clientes
Applications clientes
Des applications clientes s'exécutent dans leur propre conteneur client.Des applications clientes s'exécutent dans leur propre conteneur client.
Le conteneur client est un jeu de librairies et d'API qui supportent le code client, Le conteneur client est un jeu de librairies et d'API qui supportent le code client,
et mettent à sa disposition un moyen d'accéder aux composants métiers de et mettent à sa disposition un moyen d'accéder aux composants métiers de l'application).
l'application).
Les applications clientes ont des interfaces utilisateurs qui peuvent directement Les applications clientes ont des interfaces utilisateurs qui peuvent directement
interagir avec le tier EJB en utilisant RMI-IIOP. interagir avec le tier EJB en utilisant RMI-IIOP.
Les clients ont un accès complet.aux services de la plateforme J2EE comme les Les clients ont un accès complet.aux services de la plateforme J2EE comme les
services de nommage JNDI, l'envoi de messages et JDBC. services de nommage JNDI, l'envoi de messages et JDBC.
Applications clientes
Applications clientes
Java Web Start
Java Web Start
Les applications clientes Java Web Start sont des applications autonomes Les applications clientes Java Web Start sont des applications autonomes
reposant sur les JFC et Swing et capables d'utiliser les services de la plateforme reposant sur les JFC et Swing et capables d'utiliser les services de la plateforme J2EE par l'intermédiaire de la technologie Java WebStart.
J2EE par l'intermédiaire de la technologie Java WebStart.
Ces applications peuvent être installées par le web.Ces applications peuvent être installées par le web.
Elles communiquent avec le serveur en utilisant du XML encapsulé dans du Elles communiquent avec le serveur en utilisant du XML encapsulé dans du
HTTP(S). HTTP(S).
Clients sans fil
Clients sans fil
Les clients sans fil sont basés sur la technologie Mobile Information Device Les clients sans fil sont basés sur la technologie Mobile Information Device
Profile (MIDP), en conjonction avec Connected Limited Device Configuration Profile (MIDP), en conjonction avec Connected Limited Device Configuration (CLDC) qui fournissent un environnement J2ME complet pour les dispositifs (CLDC) qui fournissent un environnement J2ME complet pour les dispositifs sans fil.
Composants web
Composants web
Un composant web est une entité logicielle qui fournit une réponse à une Un composant web est une entité logicielle qui fournit une réponse à une
requête. requête.
Les composants web génèrent habituellement l'interface utilisateur d'une Les composants web génèrent habituellement l'interface utilisateur d'une
application web. application web.
La plate-forme J2EE définit deux types de composants web : La plate-forme J2EE définit deux types de composants web :
les servlets et les servlets et
les JavaServer Pages (JSP). les JavaServer Pages (JSP).
La section suivante donne un aperçu de ces composants qui sont détaillés La section suivante donne un aperçu de ces composants qui sont détaillés
ultérieurement. ultérieurement.
Servlets (1/3)
Servlets (1/3)
Une servlet est un composant qui étend les fonctionnalités d'un serveur
Une servlet est un composant qui étend les fonctionnalités d'un serveur
web de manière portable et efficace.
web de manière portable et efficace.
Un serveur web héberge des classes Java servlets qui sont exécutées
Un serveur web héberge des classes Java servlets qui sont exécutées
à l'intérieur du container web. Le serveur web associe un e ou plusieurs
à l'intérieur du container web. Le serveur web associe un e ou plusieurs
URLs à chaque servlet et lorsque ces URLs sont appelées via une
URLs à chaque servlet et lorsque ces URLs sont appelées via une
requête HTTP de l'utilisateur la servlet est déclenchée.
requête HTTP de l'utilisateur la servlet est déclenchée.
Quand la servlet reçoit une requête du client, elle génère une réponse,
Quand la servlet reçoit une requête du client, elle génère une réponse,
éventuellement en utilisant la logique métier contenue dans des EJBs
éventuellement en utilisant la logique métier contenue dans des EJBs
ou en interrogeant directement une base de données. Elle retourne
ou en interrogeant directement une base de données. Elle retourne
alors une réponse HTML ou XML au demandeur.
Servlets (2/3)
Servlets (2/3)
Un développeur de servlet utilise l'API servlet pour :
Un développeur de servlet utilise l'API servlet pour :
Initialiser et finaliser la servletInitialiser et finaliser la servlet
Accéder à l'environnement de la servletAccéder à l'environnement de la servlet
Recevoir ou rediriger les requêtes et envoyer les réponsesRecevoir ou rediriger les requêtes et envoyer les réponses Interagir avec d'autres servlets ou composantsInteragir avec d'autres servlets ou composants
Maintenir les informations de sessions du clientMaintenir les informations de sessions du client
Filtrer avant ou après traitement les requêtes et les réponsesFiltrer avant ou après traitement les requêtes et les réponses Implémenter la sécurité sur le tiers webImplémenter la sécurité sur le tiers web
Servlets (3/3)
Servlets (3/3)
Les servlets sont des classes Java exécutées par le serveur web en
Les servlets sont des classes Java exécutées par le serveur web en
réponse à une requête du client (en utilisant le protocole http).
réponse à une requête du client (en utilisant le protocole http).
Les servlets sont définies dans les packages suivants:
Les servlets sont définies dans les packages suivants:
javax.servlet, contient les classes génériques (indépendantes du protocole) javax.servlet, contient les classes génériques (indépendantes du protocole)
des servlets. La classe HTTPServlet utilise la classe ServletException de des servlets. La classe HTTPServlet utilise la classe ServletException de ce package pour indiquer un problème de servlet.
ce package pour indiquer un problème de servlet.
javax.servlet.http, contient la classe de serlvet concue pour le protocole javax.servlet.http, contient la classe de serlvet concue pour le protocole
HTTP (classe HttpServlet). HTTP (classe HttpServlet).
En général les servlets utilisent aussi le package java.io pour les
En général les servlets utilisent aussi le package java.io pour les
entrées/sorties système.
entrées/sorties système.
La classe HttpServlet utilise la classe IOException de ce package pour
La classe HttpServlet utilise la classe IOException de ce package pour
signaler les erreurs d'entrée-sortie.
JavaServer Pages (1/3)
JavaServer Pages (1/3)
La technologie JavaServer Pages (JSP) fournit un moyen simple et
La technologie JavaServer Pages (JSP) fournit un moyen simple et
extensible pour générer du contenu dynamique pour le client web.
extensible pour générer du contenu dynamique pour le client web.
Une page JSP est un document texte qui décrit comment traiter la
Une page JSP est un document texte qui décrit comment traiter la
requête d'un client et comment créer une réponse.
JavaServer Pages (2/3)
JavaServer Pages (2/3)
Une page JSP contient :
Une page JSP contient :
Des informations de formatage (modèle) du document web, habituellement Des informations de formatage (modèle) du document web, habituellement
en HTML ou XML. en HTML ou XML.
Les concepteurs web peuvent modifier cette partie de la page sans affecter les Les concepteurs web peuvent modifier cette partie de la page sans affecter les
parties dynamiques. Cette approche permet de séparer la présentation du
parties dynamiques. Cette approche permet de séparer la présentation du
contenu dynamique.
contenu dynamique.
Des éléments JSP et de script pour générer le contenu dynamique du Des éléments JSP et de script pour générer le contenu dynamique du
document Web. document Web.
La plupart des pages JSP utilisent aussi des JavaBeans et/ou des Enterprise La plupart des pages JSP utilisent aussi des JavaBeans et/ou des Enterprise
JavaBeans pour réaliser les opérations complexes de l'application. Les JSP
JavaBeans pour réaliser les opérations complexes de l'application. Les JSP
permettent en standard d'instancier des beans, de modifier ou lire leurs attributs
permettent en standard d'instancier des beans, de modifier ou lire leurs attributs
et de télécharger des applets.
et de télécharger des applets.
La technologie JSP est extensible en utilisant des balises personnalisées La technologie JSP est extensible en utilisant des balises personnalisées
qui peuvent être encapsulées dans des bibliothèques de balises qui peuvent être encapsulées dans des bibliothèques de balises personnalisées (taglibs)
Java Server Pages (3/3)
Java Server Pages (3/3)
La technologie JavaServer Page (JSP) permet de mettre des fragments de code java dans La technologie JavaServer Page (JSP) permet de mettre des fragments de code java dans
une page HTML statique.
une page HTML statique.
Lorsque la page JSP est chargée par un navigateur web, le code java est exécuté sur le Lorsque la page JSP est chargée par un navigateur web, le code java est exécuté sur le
serveur. Celui-ci crée une servlet correspondante, qui est ensuite compilée et exécutée en
serveur. Celui-ci crée une servlet correspondante, qui est ensuite compilée et exécutée en
tâche de fond.
tâche de fond.
La servlet retourne une page HTML ou un rapport en XML qui peut alors être transmis au La servlet retourne une page HTML ou un rapport en XML qui peut alors être transmis au
client ou subir d’autres traitements.
client ou subir d’autres traitements.
Les JSP sont définies dans une classe d'implémentation appelée le package.Les JSP sont définies dans une classe d'implémentation appelée le package.
Une page JSP est un document texte qui décrit comment créer un objet réponse (response) Une page JSP est un document texte qui décrit comment créer un objet réponse (response)
à partir d’un objet requête (request) pour un protocole donné.
à partir d’un objet requête (request) pour un protocole donné.
Le traitement d’une page JSP peut entraîner la création et/ou l’utilisation d’autres objets.Le traitement d’une page JSP peut entraîner la création et/ou l’utilisation d’autres objets.
Conteneur de
Conteneur de
composants web
composants web
Les composants web sont hébergés dans des conteneurs de servlets, Les composants web sont hébergés dans des conteneurs de servlets, conteneurs de JSP et conteneurs web.
conteneurs de JSP et conteneurs web.
En sus des fonctionnalités normales d'un conteneur de composants, un En sus des fonctionnalités normales d'un conteneur de composants, un conteneur de servlets (servlets container) fournit les services réseaux par conteneur de servlets (servlets container) fournit les services réseaux par lesquels les requêtes et réponses sont émises.
lesquels les requêtes et réponses sont émises.
Il décode également les requêtes et formate les réponses dans le format Il décode également les requêtes et formate les réponses dans le format approprié.
approprié.
Tous les conteneurs de servlets doivent supporter le protocole HTTP et Tous les conteneurs de servlets doivent supporter le protocole HTTP et peuvent aussi supporter le protocole HTTPS.
peuvent aussi supporter le protocole HTTPS.
Un conteneur de JSP (JSP container) fournit les mêmes services qu'un Un conteneur de JSP (JSP container) fournit les mêmes services qu'un conteneur de servlets.
conteneur de servlets.
Ces conteneurs sont généralement appelés conteneurs web (Web Ces conteneurs sont généralement appelés conteneurs web (Web containers).
Enterprise Java Beans (1/5)
Enterprise Java Beans (1/5)
Le terme Enterprise Java Bean recouvre deux notions:Le terme Enterprise Java Bean recouvre deux notions:
c’est le nom générique d’une architecture permettant la programmation répartie en c’est le nom générique d’une architecture permettant la programmation répartie en
Java
Java
c’est le nom de composants exécutés sur un serveur et appelés par un client distantc’est le nom de composants exécutés sur un serveur et appelés par un client distant
Les EJBs n’ont en commun que le nom avec les Java Beans traditionnels, qui Les EJBs n’ont en commun que le nom avec les Java Beans traditionnels, qui
sont des composants côté clients utilisés pour obtenir une meilleurs séparation sont des composants côté clients utilisés pour obtenir une meilleurs séparation suivant le modèle MVC ( model – view – controller).
suivant le modèle MVC ( model – view – controller).
Les Enterprise Java Beans ont pour but de rendre les applications faciles à Les Enterprise Java Beans ont pour but de rendre les applications faciles à
développer, à déployer et à administrer. développer, à déployer et à administrer.
Les EJBs sont indépendants de la plate-forme d’exécution, étant écrits en Java: Les EJBs sont indépendants de la plate-forme d’exécution, étant écrits en Java:
le déploiement d’un EJB se fait sans recompilation ni modification du le déploiement d’un EJB se fait sans recompilation ni modification du code-source.
source.
Les spécifications EJB définissent une architecture pour la construction Les spécifications EJB définissent une architecture pour la construction
d’applications Java dont la partie serveur est construite à partir de composants d’applications Java dont la partie serveur est construite à partir de composants Enterprise Beans.
Enterprise Java Beans (2/5)
Enterprise Java Beans (2/5)
Leurs caractéristiques principales sont les suivantes:
Leurs caractéristiques principales sont les suivantes:
les composants EB sont “écrits une fois, exécutable partout” (write once, les composants EB sont “écrits une fois, exécutable partout” (write once,
run anywhere) run anywhere)
ces composants sont des composants côtés serveur (analogues aux objets ces composants sont des composants côtés serveur (analogues aux objets
métiers de CORBA) métiers de CORBA)
Les EJBs ne sont pas les seuls composants exploités dans une
Les EJBs ne sont pas les seuls composants exploités dans une
application J2EE mais ils en sont la partie centrale.
application J2EE mais ils en sont la partie centrale.
Les EJBs résident sur le serveur d'EJB.
Les EJBs résident sur le serveur d'EJB.
Leurs méthodes sont accessibles aux clients (tiers web, application
Leurs méthodes sont accessibles aux clients (tiers web, application
autonome) en utilisant l'interface distante home du beans.
autonome) en utilisant l'interface distante home du beans.
Cette interface décrit les méthodes du bean (paramètres…) et permet
Cette interface décrit les méthodes du bean (paramètres…) et permet
au client de les appeler.
au client de les appeler.
Lorsqu'une méthode est déclenchée, l'appel est enveloppé dans un
Lorsqu'une méthode est déclenchée, l'appel est enveloppé dans un
message RMI transmis au serveur d'EJB, qui exécute alors la méthode
message RMI transmis au serveur d'EJB, qui exécute alors la méthode
de l'ÉB et retourne le résultat au client dans un autre message RMI.
Enterprise JavaBeans (3/5)
Enterprise JavaBeans (3/5)
L'architecture Enterprise JavaBeans est une technologie côté serveur
L'architecture Enterprise JavaBeans est une technologie côté serveur
pour développer et déployer des composants contenant la logique
pour développer et déployer des composants contenant la logique
métier d'une application d'entreprise.
métier d'une application d'entreprise.
Les composants Enterprise JavaBeans, aussi appelé Enterprise Beans,
Les composants Enterprise JavaBeans, aussi appelé Enterprise Beans,
sont scalables, transactionnel et supporte l'accès concurrent.
Enterprise JavaBeans (4/5)
Enterprise JavaBeans (4/5)
Il y a 3 types d'entreprise beans : les beans de sessions, d'entité et de
Il y a 3 types d'entreprise beans : les beans de sessions, d'entité et de
messages.
messages.
Les beans de session et d'entité comportent 2 interfaces :
Les beans de session et d'entité comportent 2 interfaces :
une interface de composant : l'interface de composant définit les méthodes une interface de composant : l'interface de composant définit les méthodes
métiers du bean, métiers du bean,
une interface home : l'interface home définit les méthodes pour créer, une interface home : l'interface home définit les méthodes pour créer,
trouver, supprimer et accéder aux méta-données d'un bean. trouver, supprimer et accéder aux méta-données d'un bean.
Les beans à message n'ont pas d'interfaces home et composant.
Les beans à message n'ont pas d'interfaces home et composant.
Enterprise JavaBeans (5/5)
Enterprise JavaBeans (5/5)
Les interfaces distantes (remote interface) sont des interfaces RMI qui
Les interfaces distantes (remote interface) sont des interfaces RMI qui
permettent au client du bean d'être situé n'importe où.
permettent au client du bean d'être situé n'importe où.
Dans ce cas les arguments et valeurs de retour communiquées entre le client et Dans ce cas les arguments et valeurs de retour communiquées entre le client et
le beans distant sont sérialisées pour être transportées sur le réseau, ce qui
le beans distant sont sérialisées pour être transportées sur le réseau, ce qui
consomme des ressources.
consomme des ressources.
Les interfaces locales impliquent que les clients du beans soient
Les interfaces locales impliquent que les clients du beans soient
localisés dans la même machine virtuelle que le beans.
localisés dans la même machine virtuelle que le beans.
Dans ce cas les arguments et valeurs de retours échangés sont transmis par Dans ce cas les arguments et valeurs de retours échangés sont transmis par
référence. Cette méthode est plus performante que la méthode distante.
référence. Cette méthode est plus performante que la méthode distante.
La section suivante donne un aperçu des composants EJB. Ils sont
La section suivante donne un aperçu des composants EJB. Ils sont
décrits en détail dans la suite du document.
Beans de session
Beans de session
(session beans)
(session beans)
Un bean de session fournit un service au client et habituellement n'existe que le Un bean de session fournit un service au client et habituellement n'existe que le
temps d'une session cliente. temps d'une session cliente.
Un bean de session accompli des opérations de calcul ou d'accès à une base de Un bean de session accompli des opérations de calcul ou d'accès à une base de
données pour le client. données pour le client.
Bien qu'un bean de session puisse être transactionnel, il ne dispose pas de Bien qu'un bean de session puisse être transactionnel, il ne dispose pas de
mécanismes de reprise sur erreur en cas de plantage du serveur. mécanismes de reprise sur erreur en cas de plantage du serveur.
Les bean de session peuvent être sans état (stateless) ou peuvent maintenir des Les bean de session peuvent être sans état (stateless) ou peuvent maintenir des
informations d'état entre les appels de méthode et les transactions (statefull). informations d'état entre les appels de méthode et les transactions (statefull).
Si le beans maintient des informations d'état, c'est au container d'EJB de garder Si le beans maintient des informations d'état, c'est au container d'EJB de garder
ces informations lorsque le bean est déchargé de la mémoire du serveur. ces informations lorsque le bean est déchargé de la mémoire du serveur. Cependant c'est au bean lui-même de gérer la persistance des données s'il y a Cependant c'est au bean lui-même de gérer la persistance des données s'il y a lieu.
Beans d'entité
Beans d'entité
(entity beans)
(entity beans)
Un bean d'entité est un objet persistant qui représente des données stockées Un bean d'entité est un objet persistant qui représente des données stockées
dans un entrepôt de données. dans un entrepôt de données.
Un bean d'entité est identifié par sa clé primaire (primary key).Un bean d'entité est identifié par sa clé primaire (primary key).
Un bean d'entité peut assurer lui-même la persistance de ses données ou la Un bean d'entité peut assurer lui-même la persistance de ses données ou la
déléguer au conteneur d'EJB. déléguer au conteneur d'EJB.
Les beans dont la persistance est gérée par le conteneur sont plus portables et Les beans dont la persistance est gérée par le conteneur sont plus portables et
peuvent maintenir des relations entre eux. Cette fonction permet de joindre peuvent maintenir des relations entre eux. Cette fonction permet de joindre plusieurs tables de bases de données.
plusieurs tables de bases de données.
Si le bean gère lui-même sa persistance, alors le programmeur devra sûrement Si le bean gère lui-même sa persistance, alors le programmeur devra sûrement
changer une partie du code SQL en changeant de base de données. changer une partie du code SQL en changeant de base de données.
Bean à message
Bean à message
(message-driven beans)
(message-driven beans)
Un bean à message permet à un client asynchrone d'accéder à la logique métier Un bean à message permet à un client asynchrone d'accéder à la logique métier
d'un tiers EJB. d'un tiers EJB.
Un bean à message permet à des clients asynchrones d'accéder à la logique Un bean à message permet à des clients asynchrones d'accéder à la logique
métier du tiers EJB. Les beans à messages sont activés uniquement par des métier du tiers EJB. Les beans à messages sont activés uniquement par des messages recus d'une file de message JMS qu'ils écoutent.
messages recus d'une file de message JMS qu'ils écoutent.
Les clients n'accèdent pas directement au bean à message mais envoient un Les clients n'accèdent pas directement au bean à message mais envoient un
message à la file JMS. message à la file JMS.
Comme les beans à messages n'ont pas besoin d'exposer leurs méthodes à un Comme les beans à messages n'ont pas besoin d'exposer leurs méthodes à un
client ils n'implémentent pas les interfaces composant ou home. client ils n'implémentent pas les interfaces composant ou home.
Conteneur d'EJB
Conteneur d'EJB
(EJB Component Containers)
(EJB Component Containers)
Les Enterprise beans sont hébergés dans des conteneurs d'EJB (EJB Les Enterprise beans sont hébergés dans des conteneurs d'EJB (EJB
container). container).
En plus des services traditionnels d'un conteneur, un conteneur EJB fournit auw En plus des services traditionnels d'un conteneur, un conteneur EJB fournit auw
beans qu’il héberge des services de : beans qu’il héberge des services de :
Transaction,Transaction, Persistance,Persistance,
Technologies J2EE (1/4)
Technologies J2EE (1/4)
La plate-forme J2EE comme la plate-forme J2SE incluent un grand
La plate-forme J2EE comme la plate-forme J2SE incluent un grand
nombre de bibliothèques de code (API) prédéfinies pour les fonctions
nombre de bibliothèques de code (API) prédéfinies pour les fonctions
de base d'une application.
de base d'une application.
Les conteneurs fournissent aux composants un accès aux APIs du
Les conteneurs fournissent aux composants un accès aux APIs du
J2SE, ce qui inclut l'accès aux APIs Java IDL et JDBC 2.0 core.
J2SE, ce qui inclut l'accès aux APIs Java IDL et JDBC 2.0 core.
Le tableau suivant résume les APIs accessibles en fonction du type de
Le tableau suivant résume les APIs accessibles en fonction du type de
conteneur.
Technologies J2EE (2/4)
Technologies J2EE (2/4)
API Applet Application
Client Web EJB
JDBC 2.0 Extension N Y Y Y JTA 1.0 N N Y Y JNDI 1.2 N Y Y Y Servlet 2.3 N N Y N JSP 1.2 N N Y N EJB 2.0 N Y1 Y2 Y RMI-IIOP 1.0 N Y Y Y JMS 1.0 N Y Y Y JavaMail 1.2 N N Y Y JAF 1.0 N N Y Y JAXP 1.1 N Y Y Y JAAS 1.0 N Y Y Y Connector 1.0 N N Y Y
Technologies J2EE (3/4)
Technologies J2EE (4/4)
Technologies J2EE (4/4)
L'architecture L'architecture J2EE ConnectorJ2EE Connector (JCA)(JCA) est l'infrastructure pour interagir avec une est l'infrastructure pour interagir avec une
grande variété de systèmes d'information d'entreprise tels que des ERPs, des CRM, et
grande variété de systèmes d'information d'entreprise tels que des ERPs, des CRM, et
autres progiciels.
autres progiciels.
L'API L'API Java Database Connectivity (JDBC)Java Database Connectivity (JDBC) est utilisée pour accéder à des données est utilisée pour accéder à des données
relationnelles à partir de programmes Java
relationnelles à partir de programmes Java
La Java La Java Transaction API (JTA)Transaction API (JTA) est utilisée pour gérer et coordonner les transactions est utilisée pour gérer et coordonner les transactions
entre un ensemble hétérogène de systèmes d'information d'entreprise.
entre un ensemble hétérogène de systèmes d'information d'entreprise.
L'API L'API Java Naming and Directory Interface (JNDI)Java Naming and Directory Interface (JNDI) est utilisée pour accéder aux est utilisée pour accéder aux
services de nommage et d'annuaire de l'entreprise.
services de nommage et d'annuaire de l'entreprise.
L'API L'API Java Message Service (JMS)Java Message Service (JMS) est utilisée pour émettre et recevoir des est utilisée pour émettre et recevoir des
messages via les systèmes de messagerie d'entreprise comme IBM MQ Series ou
messages via les systèmes de messagerie d'entreprise comme IBM MQ Series ou
TIBCO Rendezvous. Dans l'architecture J2EE les Message Driven Beans fournissent
TIBCO Rendezvous. Dans l'architecture J2EE les Message Driven Beans fournissent
une approche à base de composant pour encapsuler les fonctionnalités de messagerie
une approche à base de composant pour encapsuler les fonctionnalités de messagerie
d’entreprise.
d’entreprise.
La La JavaMail APIJavaMail API est utilisée pour émettre et recevoir des mails. est utilisée pour émettre et recevoir des mails. Java IDLJava IDL est utilisée pour appeler des services CORBA est utilisée pour appeler des services CORBA
L'API L'API Java pour XML (JAXP)Java pour XML (JAXP) est utilisée pour l'intégration avec les systèmes et est utilisée pour l'intégration avec les systèmes et
applications existants et pour implémenter les web services dans la plate-forme J2EE.
applications existants et pour implémenter les web services dans la plate-forme J2EE. JAX-RPCJAX-RPC est utilisé pour les services web est utilisé pour les services web
Remote Method Interface
Remote Method Interface
(RMI)
(RMI)
Interface pour les méthodes distantes.
Interface pour les méthodes distantes.
Le package java correspondant est javax.rmi.
Le package java correspondant est javax.rmi.
Le principe de RMI est de rendre possible l’accès aux méthodes d’un
Le principe de RMI est de rendre possible l’accès aux méthodes d’un
objet distant en établissant une connexion réseau (socket) entre le
objet distant en établissant une connexion réseau (socket) entre le
client et le serveur où sont stockés les objets.
client et le serveur où sont stockés les objets.
Le client connaît les méthodes de l’objet distant au moyen des classes
Le client connaît les méthodes de l’objet distant au moyen des classes
stubs qui contiennent les signatures des méthodes distantes.
stubs qui contiennent les signatures des méthodes distantes.
Les classes javax.rmi sont utilisées pour chercher l'interface home d'un
Les classes javax.rmi sont utilisées pour chercher l'interface home d'un
beans de session et l'activer sur le serveur distant.
JavaBeans
JavaBeans
Il est possible d’utiliser la technologie JavaBeans (package Beans.*)
Il est possible d’utiliser la technologie JavaBeans (package Beans.*)
entre une page JSP et un bean pour obtenir une meilleure séparation
entre une page JSP et un bean pour obtenir une meilleure séparation
entre Modèle, Vue et Contrôleur (Model View Controller – MVC).
MVC
MVC
Le modèle MVC est un patron de conception (design pattern) qui
Le modèle MVC est un patron de conception (design pattern) qui
consiste en 3 types d’objets:
consiste en 3 types d’objets:
le Modèle procure la logique métier de l’application, le Modèle procure la logique métier de l’application, la Vue est la présentation de l’application,la Vue est la présentation de l’application,
le Contrôleur est un objet qui gère les interactions entre l’utilisateur et la le Contrôleur est un objet qui gère les interactions entre l’utilisateur et la
Vue. Vue.
Un patron de conception décrit un problème récurrent et ses solutions,
Un patron de conception décrit un problème récurrent et ses solutions,
les solutions ne sont jamais exactement les mêmes pour chaque
les solutions ne sont jamais exactement les mêmes pour chaque
occurrence du problème mais le patron de conception donne une
occurrence du problème mais le patron de conception donne une
solution générale au problème qu’il suffit d’adapter .
Java Naming and Directory
Java Naming and Directory
Interface (JNDI)
Interface (JNDI)
La technologie JNDI est utilisée dans J2EE pour localiser les objets sur un serveur et La technologie JNDI est utilisée dans J2EE pour localiser les objets sur un serveur et
accéder aux objets externes à partir des composants J2EE. accéder aux objets externes à partir des composants J2EE.
Chaque conteneur stocke une référence aux objets qu’il peut créer et instancie ces Chaque conteneur stocke une référence aux objets qu’il peut créer et instancie ces
objets à la demande des clients ou des applications qui fonctionnent sur le serveur. objets à la demande des clients ou des applications qui fonctionnent sur le serveur.
Le conteneur met aussi à la disposition des composants un jeu de ressources JNDI Le conteneur met aussi à la disposition des composants un jeu de ressources JNDI
initial, issu de la configuration du serveur et/ou des applications web (via les initial, issu de la configuration du serveur et/ou des applications web (via les descripteurs de déploiement).
descripteurs de déploiement).
Un objet InitialContext est crée par le conteneur lorsqu'une web application est Un objet InitialContext est crée par le conteneur lorsqu'une web application est
déployée. Cet objet est accessible par les composants, en lecture seulement. déployée. Cet objet est accessible par les composants, en lecture seulement.
L'API JNDI est définie dans le package javax.naming. L'API JNDI est définie dans le package javax.naming.
L'autre rôle de JNDI dans une application J2EE est la localisation des interfaces L'autre rôle de JNDI dans une application J2EE est la localisation des interfaces
distantes des beans. distantes des beans.
Exemple d’utilisation de JNDI
Exemple d’utilisation de JNDI
Dans Tomcat, les ressources JDNI initiales sont accessibles dans
Dans Tomcat, les ressources JDNI initiales sont accessibles dans
l'espace de nommage java:comp/env.
l'espace de nommage java:comp/env.
Exemple d'accès à une ressource JDBC par JNDI :
Exemple d'accès à une ressource JDBC par JNDI :
// Obtain our environment naming context
// Obtain our environment naming context
Context initCtx = new InitialContext();
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Context envCtx = (Context) initCtx.lookup("java:comp/env");
// Look up our data source
// Look up our data source
DataSource ds = (DataSource)
DataSource ds = (DataSource)
envCtx.lookup("jdbc/EmployeeDB");
envCtx.lookup("jdbc/EmployeeDB");
// Allocate and use a connection from the pool
// Allocate and use a connection from the pool
Connection conn = ds.getConnection();
Connection conn = ds.getConnection();
... use this connection to access the database ...
... use this connection to access the database ...
conn.close();
Java DataBase Connectivity
Java DataBase Connectivity
(JDBC)
(JDBC)
Cette API est développée par Sun en collaboration avec les grands éditeurs de SGBD.Cette API est développée par Sun en collaboration avec les grands éditeurs de SGBD. Elle supporte plus de 50 drivers, permettant de se connecter aux bases de 40 éditeurs Elle supporte plus de 50 drivers, permettant de se connecter aux bases de 40 éditeurs
parmis lesquels Oracle, Informix, Postgres, Ingres, Sybase ...
parmis lesquels Oracle, Informix, Postgres, Ingres, Sybase ...
JDBC supporte le SQL 2 ANSI pour l’écriture des requêtes plus des extensions JDBC supporte le SQL 2 ANSI pour l’écriture des requêtes plus des extensions spécifiques à chaque base de données.
spécifiques à chaque base de données.
Les tâches assurées par JDBC sont:Les tâches assurées par JDBC sont:
Gestion des connexions et transactionsGestion des connexions et transactions Préparation de requêtes SQLPréparation de requêtes SQL
Accès aisé aux résultatsAccès aisé aux résultats
JDBC est une architecture “bas niveau”, qui est utilisée dans les applications J2EE pour JDBC est une architecture “bas niveau”, qui est utilisée dans les applications J2EE pour assurer les fonctions de persistance des données.
assurer les fonctions de persistance des données.
L’utilisation de JDBC est faite soit par le conteneur d’application (Container Managed L’utilisation de JDBC est faite soit par le conteneur d’application (Container Managed Persistence) soit directement dans le beans (Bean Managed Persistence).
Persistence) soit directement dans le beans (Bean Managed Persistence).
L’utilisation typique de JDBC dans une classe java est la suivante:L’utilisation typique de JDBC dans une classe java est la suivante:
Chargement du driverChargement du driver
Connection à la base (classe Connection)Connection à la base (classe Connection)
Expression d’une requête (classes Statement et PreparedStatement)Expression d’une requête (classes Statement et PreparedStatement) Analyse du résultat (classe ResultSet)Analyse du résultat (classe ResultSet)