Vous êtes sur la page 1sur 55

Larchitecture J2EE

ludovic.maitre@free.fr

Plan (1/3)
Principes de J2EE Composants, conteneurs et services API Rles Contrats

Le contrat ct client Le contrat du conteneur

Plan (2/3)

Topologie(s) d'une application J2EE


Application multitiers Application web Application Business-to-business

Composants J2EE
Conteneur de composants J2EE Clients J2EE Composants web Composants Enterprise JavaBeans

Plan (3/3)

Technologies J2EE
Remote Method Interface (RMI) JavaBeans Java Naming and Directory Interface (JNDI) Java DataBase Connectivity (JDBC)

Principes de J2EE (1/3)

Larchitecture J2EE est une architecture dapplication distribue base de composants.


Elle identifie et donne les spcifications des composants de lapplication : composants logiciels ou beans (EJB), conteneur serveurs clients Les conteneurs isolent les beans du client et dune implmentation spcifique du serveur. Les beans sont installs dans la partie serveur dune application J2EE.

Principes de J2EE (2/3)

Les conteneurs et serveurs implmentent les mcanismes de bas niveau utiliss par les applications:

transactions, persistance, gestion de la mmoire, Scurit

Les spcifications J2EE sintressent aux activits dune application lies:


au dveloppement, au dploiement, lexcution

Principes de J2EE (3/3)

Rles

J2EE dfinit diffrents rles associs aux diffrentes parties intervenant dans la production dune application

Contrats (1/2)

Larchitecture J2EE dfinit des contrats associs un bean. Ces contrats sont passs entre le conteneur et les clients qui utilisent le beans. Ce sont des rgles obligatoires qui doivent tre respectes par le fournisseur de lEJB et le conteneur.
Le but des contrats est de fournir un modle de dveloppement standard pour les applications qui utilisent les composants EJBs. En particulier, 3 contrats sont dfinis:

le contrat ct client doit permettre de fournir une vue uniforme du beans au client, indpendante de la plate-forme de dploiement le contrat ct conteneur doit permettre la portabilit des beans sur diffrents serveurs EJBs le contrat ct dploiement: fournir un format de fichier standard pour distribuer les beans; ce format doit tre support par tous les outils lis aux EJBs.

Contrats (2/2)

Le contrat ct client

Il prcise que le bean doit pouvoir tre localis en utilisant JNDI.


Il prcise une interface standard daccs au beans qui doit tre fournie par le fournisseur dEJBs (EJB provider).

Linterface standard dfinit en fait 2 interfaces implmenter par les beans :


linterface Home contient les mthodes lies la gestion du beans: create, remove, finder, linterface Remote contient les mthodes de lapplication

Le conteneur doit implmenter un mcanisme de dlgation pour faire suivre les appels au bean.
Il ny 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 retransmettre les messages au bean.

Le contrat du conteneur

Le conteneur doit grer le cycle de vie et ltat des beans, la scurit, les transactions distribues, la concurrence et lextensibilit.
Le conteneur appelle des mthodes fournies par le bean lorsque cest ncessaire (callback methods). Le conteneur doit grer plusieurs types de beans:

Beans de session (session beans) Beans dentit (entity beans)

Les spcifications EJB 2.0 ajoutent un 3me type de beans, les beans message (message driven beans).

Topologie(s) d'une application J2EE

Schma gnral

Application multi-tiers

Client autonome

Client autonome "EJB-centric"

Application web

Dtails application web

Application Business-tobusiness

Composants J2EE (1/2)

Un composant est une unit logicielle de niveau applicatif.


En plus des JavaBeans, qui font partie du J2SE, J2EE supporte les types de composants suivants :

applets, application clientes, composants Enterprise JavaBeans (EJB), composants Web, composants adaptateurs de ressource

Composants J2EE (2/2)

Les applets et applications clientes sont excutes sur le poste du client tandis que les composants EJB, Web et adaptateurs de ressources fonctionnent sur le serveur.
A l'exception des adaptateurs de ressources, les concepteurs et dveloppeurs d'application dveloppent les composants d'une application J2EE. Les adapteurs de ressources et logiciels associs sont en gnral vendus par les fournisseurs de systmes d'information de l'entreprise et ensuite dploys sur les serveurs pour accder aux donnes.

Conteneur de composants J2EE

Tous les composants J2EE dpendent l'excution d'un entit systme baptise conteneur (container). Les conteneurs fournissent aux composants des services de bases comme la gestion du cycle de vie, la scurit, le dploiement et l'excution en thread.

Comme c'est le conteneur qui gre ces services, la plupart des paramtres de configuration de ces services peuvent tre configurs lors du dploiement des composants en fonction de la plateforme d'accueil.
Un fournisseur d'Enterprise Java Bean peut spcifier un nom de base de donnes auquel le composant doit accder et c'est seulement lors du dploiement que les informations d'accs la base (nom d'utilisateur et mot de passe ) seront configures. Les sections suivantes donnent un bref apercu des composants, qui seront tudis plus en dtail par la suite.

Clients J2EE

La plateforme J2EE prvoit que plusieurs types de clients puissent accder une mme application et interagir avec les composants ct serveur.

Applets

Les Applets sont des clients Java qui s'excutent habituellement dans un navigateur web et qui ont accs toutes les possibilits du langage Java.
Les applications J2EE peuvent utiliser des clients applets pour avoir des interfaces utilisateurs plus puissantes que celles connues en HTML. Les applets communiquent avec le serveur par HTTP.

Applications clientes

Des applications clientes s'excutent dans leur propre conteneur client.


Le conteneur client est un jeu de librairies et d'API qui supportent le code client, et mettent sa disposition un moyen d'accder aux composants mtiers de l'application). Les applications clientes ont des interfaces utilisateurs qui peuvent directement interagir avec le tier EJB en utilisant RMI-IIOP. Les clients ont un accs complet.aux services de la plateforme J2EE comme les services de nommage JNDI, l'envoi de messages et JDBC. Le conteneur client gre l'accs ces services et les communications RMI-IIOP.

Applications clientes Java Web Start

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 J2EE par l'intermdiaire de la technologie Java WebStart.
Ces applications peuvent tre installes par le web. Elles communiquent avec le serveur en utilisant du XML encapsul dans du HTTP(S).

Clients sans fil

Les clients sans fil sont bass sur la technologie Mobile Information Device Profile (MIDP), en conjonction avec Connected Limited Device Configuration (CLDC) qui fournissent un environnement J2ME complet pour les dispositifs sans fil.

Composants web

Un composant web est une entit logicielle qui fournit une rponse une requte. Les composants web gnrent habituellement l'interface utilisateur d'une application web. La plate-forme J2EE dfinit deux types de composants web :

les servlets et les JavaServer Pages (JSP).

La section suivante donne un aperu de ces composants qui sont dtaills ultrieurement.

Servlets (1/3)

Une servlet est un composant qui tend les fonctionnalits d'un serveur web de manire portable et efficace.
Un serveur web hberge des classes Java servlets qui sont excutes l'intrieur du container web. Le serveur web associe un e ou plusieurs URLs chaque servlet et lorsque ces URLs sont appeles via une requte HTTP de l'utilisateur la servlet est dclenche. Quand la servlet reoit une requte du client, elle gnre une rponse, ventuellement en utilisant la logique mtier contenue dans des EJBs ou en interrogeant directement une base de donnes. Elle retourne alors une rponse HTML ou XML au demandeur.

Servlets (2/3)

Un dveloppeur de servlet utilise l'API servlet pour :


Initialiser et finaliser la servlet Accder l'environnement de la servlet Recevoir ou rediriger les requtes et envoyer les rponses Interagir avec d'autres servlets ou composants Maintenir les informations de sessions du client Filtrer avant ou aprs traitement les requtes et les rponses Implmenter la scurit sur le tiers web

Servlets (3/3)

Les servlets sont des classes Java excutes par le serveur web en rponse une requte du client (en utilisant le protocole http). Les servlets sont dfinies dans les packages suivants:

javax.servlet, contient les classes gnriques (indpendantes du protocole) des servlets. La classe HTTPServlet utilise la classe ServletException de ce package pour indiquer un problme de servlet. javax.servlet.http, contient la classe de serlvet concue pour le protocole HTTP (classe HttpServlet).

En gnral les servlets utilisent aussi le package java.io pour les entres/sorties systme. La classe HttpServlet utilise la classe IOException de ce package pour signaler les erreurs d'entre-sortie.

JavaServer Pages (1/3)

La technologie JavaServer Pages (JSP) fournit un moyen simple et extensible pour gnrer du contenu dynamique pour le client web.
Une page JSP est un document texte qui dcrit comment traiter la requte d'un client et comment crer une rponse.

JavaServer Pages (2/3)

Une page JSP contient :

Des informations de formatage (modle) du document web, habituellement en HTML ou XML.

Les concepteurs web peuvent modifier cette partie de la page sans affecter les parties dynamiques. Cette approche permet de sparer la prsentation du contenu dynamique.

Des lments JSP et de script pour gnrer le contenu dynamique du document Web.

La plupart des pages JSP utilisent aussi des JavaBeans et/ou des Enterprise JavaBeans pour raliser les oprations complexes de l'application. Les JSP permettent en standard d'instancier des beans, de modifier ou lire leurs attributs et de tlcharger des applets.

La technologie JSP est extensible en utilisant des balises personnalises qui peuvent tre encapsules dans des bibliothques de balises personnalises (taglibs)

Java Server Pages (3/3)

La technologie JavaServer Page (JSP) permet de mettre des fragments de code java dans une page HTML statique. Lorsque la page JSP est charge par un navigateur web, le code java est excut sur le serveur. Celui-ci cre une servlet correspondante, qui est ensuite compile et excute en tche de fond.

La servlet retourne une page HTML ou un rapport en XML qui peut alors tre transmis au client ou subir dautres traitements.
Les JSP sont dfinies dans une classe d'implmentation appele le package. Une page JSP est un document texte qui dcrit comment crer un objet rponse (response) partir dun objet requte (request) pour un protocole donn. Le traitement dune page JSP peut entraner la cration et/ou lutilisation dautres objets.

Le protocole HTTP est le protocole utilis par dfaut.

Conteneur de composants web

Les composants web sont hbergs dans des conteneurs de servlets, conteneurs de JSP et conteneurs web. En sus des fonctionnalits normales d'un conteneur de composants, un conteneur de servlets (servlets container) fournit les services rseaux par lesquels les requtes et rponses sont mises.

Il dcode galement les requtes et formate les rponses dans le format appropri.
Tous les conteneurs de servlets doivent supporter le protocole HTTP et peuvent aussi supporter le protocole HTTPS. Un conteneur de JSP (JSP container) fournit les mmes services qu'un conteneur de servlets. Ces conteneurs sont gnralement appels conteneurs web (Web containers).

Enterprise Java Beans (1/5)

Le terme Enterprise Java Bean recouvre deux notions:

cest le nom gnrique dune architecture permettant la programmation rpartie en Java cest le nom de composants excuts sur un serveur et appels par un client distant

Les EJBs nont en commun que le nom avec les Java Beans traditionnels, qui sont des composants ct clients utiliss pour obtenir une meilleurs sparation suivant le modle MVC ( model view controller). Les Enterprise Java Beans ont pour but de rendre les applications faciles dvelopper, dployer et administrer. Les EJBs sont indpendants de la plate-forme dexcution, tant crits en Java: le dploiement dun EJB se fait sans recompilation ni modification du codesource. Les spcifications EJB dfinissent une architecture pour la construction dapplications Java dont la partie serveur est construite partir de composants Enterprise Beans.

Enterprise Java Beans (2/5)

Leurs caractristiques principales sont les suivantes:


les composants EB sont crits une fois, excutable partout (write once, run anywhere) ces composants sont des composants cts serveur (analogues aux objets mtiers de CORBA)

Les EJBs ne sont pas les seuls composants exploits dans une application J2EE mais ils en sont la partie centrale. Les EJBs rsident sur le serveur d'EJB. Leurs mthodes sont accessibles aux clients (tiers web, application autonome) en utilisant l'interface distante home du beans. Cette interface dcrit les mthodes du bean (paramtres) et permet au client de les appeler. Lorsqu'une mthode est dclenche, l'appel est envelopp dans un message RMI transmis au serveur d'EJB, qui excute alors la mthode de l'B et retourne le rsultat au client dans un autre message RMI.

Enterprise JavaBeans (3/5)

L'architecture Enterprise JavaBeans est une technologie ct serveur pour dvelopper et dployer des composants contenant la logique mtier d'une application d'entreprise. Les composants Enterprise JavaBeans, aussi appel Enterprise Beans, sont scalables, transactionnel et supporte l'accs concurrent.

Enterprise JavaBeans (4/5)

Il y a 3 types d'entreprise beans : les beans de sessions, d'entit et de messages.


Les beans de session et d'entit comportent 2 interfaces :

une interface de composant : l'interface de composant dfinit les mthodes mtiers du bean, une interface home : l'interface home dfinit les mthodes pour crer, trouver, supprimer et accder aux mta-donnes d'un bean.

Les beans message n'ont pas d'interfaces home et composant. Les interfaces composant et home d'un bean sont locales ou distantes.

Enterprise JavaBeans (5/5)

Les interfaces distantes (remote interface) sont des interfaces RMI qui permettent au client du bean d'tre situ n'importe o.

Dans ce cas les arguments et valeurs de retour communiques entre le client et le beans distant sont srialises pour tre transportes sur le rseau, ce qui consomme des ressources.

Les interfaces locales impliquent que les clients du beans soient localiss dans la mme machine virtuelle que le beans.

Dans ce cas les arguments et valeurs de retours changs sont transmis par rfrence. Cette mthode est plus performante que la mthode distante.

La section suivante donne un aperu des composants EJB. Ils sont dcrits en dtail dans la suite du document.

Beans de session (session beans)

Un bean de session fournit un service au client et habituellement n'existe que le temps d'une session cliente. Un bean de session accompli des oprations de calcul ou d'accs une base de donnes pour le client.

Bien qu'un bean de session puisse tre transactionnel, il ne dispose pas de mcanismes de reprise sur erreur en cas de plantage du serveur.
Les bean de session peuvent tre sans tat (stateless) ou peuvent maintenir des informations d'tat entre les appels de mthode et les transactions (statefull). Si le beans maintient des informations d'tat, c'est au container d'EJB de garder ces informations lorsque le bean est dcharg de la mmoire du serveur. Cependant c'est au bean lui-mme de grer la persistance des donnes s'il y a lieu.

Beans d'entit (entity beans)


Un bean d'entit est un objet persistant qui reprsente des donnes stockes dans un entrept de donnes.
Un bean d'entit est identifi par sa cl primaire (primary key). Un bean d'entit peut assurer lui-mme la persistance de ses donnes ou la dlguer au conteneur d'EJB. Les beans dont la persistance est gre par le conteneur sont plus portables et peuvent maintenir des relations entre eux. Cette fonction permet de joindre plusieurs tables de bases de donnes. Si le bean gre lui-mme sa persistance, alors le programmeur devra srement changer une partie du code SQL en changeant de base de donnes.

Bean message (message-driven beans)

Un bean message permet un client asynchrone d'accder la logique mtier d'un tiers EJB.
Un bean message permet des clients asynchrones d'accder la logique mtier du tiers EJB. Les beans messages sont activs uniquement par des messages recus d'une file de message JMS qu'ils coutent. Les clients n'accdent pas directement au bean message mais envoient un message la file JMS. Comme les beans messages n'ont pas besoin d'exposer leurs mthodes un client ils n'implmentent pas les interfaces composant ou home. Ils ne maintiennent pas non plus d'information d'tat sur le client.

Conteneur d'EJB (EJB Component Containers)

Les Enterprise beans sont hbergs dans des conteneurs d'EJB (EJB container).
En plus des services traditionnels d'un conteneur, un conteneur EJB fournit auw beans quil hberge des services de :

Transaction, Persistance, Accs aux services J2EE et aux APIs de communication

Technologies J2EE (1/4)

La plate-forme J2EE comme la plate-forme J2SE incluent un grand nombre de bibliothques de code (API) prdfinies pour les fonctions de base d'une application.
Les conteneurs fournissent aux composants un accs aux APIs du J2SE, ce qui inclut l'accs aux APIs Java IDL et JDBC 2.0 core. Le tableau suivant rsume les APIs accessibles en fonction du type de conteneur.

Technologies J2EE (2/4)


API JDBC 2.0 Extension JTA 1.0 JNDI 1.2 Servlet 2.3 Applet N N N N Application Client Y N Y N Web Y Y Y Y EJB Y Y Y N

JSP 1.2
EJB 2.0 RMI-IIOP 1.0 JMS 1.0 JavaMail 1.2 JAF 1.0 JAXP 1.1

N
N N N N N N

N
Y1 Y Y N N Y

Y
Y2 Y Y Y Y Y

N
Y Y Y Y Y Y

JAAS 1.0
Connector 1.0

N
N

Y
N

Y
Y

Y
Y

Technologies J2EE (3/4)

Technologies J2EE (4/4)


L'architecture J2EE Connector (JCA) est l'infrastructure pour interagir avec une grande varit de systmes d'information d'entreprise tels que des ERPs, des CRM, et autres progiciels. L'API Java Database Connectivity (JDBC) est utilise pour accder des donnes relationnelles partir de programmes Java La Java Transaction API (JTA) est utilise pour grer et coordonner les transactions entre un ensemble htrogne de systmes d'information d'entreprise. L'API Java Naming and Directory Interface (JNDI) est utilise pour accder aux services de nommage et d'annuaire de l'entreprise. L'API Java Message Service (JMS) est utilise pour mettre et recevoir des messages via les systmes de messagerie d'entreprise comme IBM MQ Series ou TIBCO Rendezvous. Dans l'architecture J2EE les Message Driven Beans fournissent une approche base de composant pour encapsuler les fonctionnalits de messagerie dentreprise. La JavaMail API est utilise pour mettre et recevoir des mails. Java IDL est utilise pour appeler des services CORBA L'API Java pour XML (JAXP) est utilise pour l'intgration avec les systmes et applications existants et pour implmenter les web services dans la plate-forme J2EE. JAX-RPC est utilis pour les services web

Remote Method Interface (RMI)

Interface pour les mthodes distantes.


Le package java correspondant est javax.rmi. Le principe de RMI est de rendre possible laccs aux mthodes dun objet distant en tablissant une connexion rseau (socket) entre le client et le serveur o sont stocks les objets. Le client connat les mthodes de lobjet distant au moyen des classes stubs qui contiennent les signatures des mthodes distantes. Les classes javax.rmi sont utilises pour chercher l'interface home d'un beans de session et l'activer sur le serveur distant.

JavaBeans

Il est possible dutiliser la technologie JavaBeans (package Beans.*) entre une page JSP et un bean pour obtenir une meilleure sparation entre Modle, Vue et Contrleur (Model View Controller MVC).

MVC

Le modle MVC est un patron de conception (design pattern) qui consiste en 3 types dobjets:

le Modle procure la logique mtier de lapplication, la Vue est la prsentation de lapplication, le Contrleur est un objet qui gre les interactions entre lutilisateur et la Vue.

Un patron de conception dcrit un problme rcurrent et ses solutions, les solutions ne sont jamais exactement les mmes pour chaque occurrence du problme mais le patron de conception donne une solution gnrale au problme quil suffit dadapter .

Java Naming and Directory Interface (JNDI)

La technologie JNDI est utilise dans J2EE pour localiser les objets sur un serveur et accder aux objets externes partir des composants J2EE.
Chaque conteneur stocke une rfrence aux objets quil peut crer et instancie ces 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 initial, issu de la configuration du serveur et/ou des applications web (via les descripteurs de dploiement). Un objet InitialContext est cre par le conteneur lorsqu'une web application est dploye. Cet objet est accessible par les composants, en lecture seulement. L'API JNDI est dfinie dans le package javax.naming. L'autre rle de JNDI dans une application J2EE est la localisation des interfaces distantes des beans.

Exemple dutilisation de JNDI

Dans Tomcat, les ressources JDNI initiales sont accessibles dans l'espace de nommage java:comp/env. Exemple d'accs une ressource JDBC par JNDI : // Obtain our environment naming context Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); // Look up our data source DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB"); // Allocate and use a connection from the pool Connection conn = ds.getConnection(); ... use this connection to access the database ... conn.close();

Java DataBase Connectivity (JDBC)


Cette API est dveloppe 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 parmis lesquels Oracle, Informix, Postgres, Ingres, Sybase ... JDBC supporte le SQL 2 ANSI pour lcriture des requtes plus des extensions spcifiques chaque base de donnes. Les tches assures par JDBC sont:

Gestion des connexions et transactions Prparation de requtes SQL Accs ais aux rsultats

JDBC est une architecture bas niveau, qui est utilise dans les applications J2EE pour assurer les fonctions de persistance des donnes. Lutilisation de JDBC est faite soit par le conteneur dapplication (Container Managed Persistence) soit directement dans le beans (Bean Managed Persistence). Lutilisation typique de JDBC dans une classe java est la suivante:

Chargement du driver Connection la base (classe Connection) Expression dune requte (classes Statement et PreparedStatement) Analyse du rsultat (classe ResultSet)

Exemple de connection JDBC


String url = jdbc:postgresql://murphy/towns Connection c = DriverManager. getConnection( url); Statement s = c. createStatement(); ResultSet r = s. executeQuery( SELECT * FROM VILLES); while (r. next()) { int i = r. getInt(" Population"); String s = r. getString(" Ville"); System. out. println( Ville + s+ a + i+ hab.); ...... }