0% ont trouvé ce document utile (0 vote)
26 vues50 pages

Cours 1

Le document présente une introduction au développement par composants en Java EE, en détaillant les architectures multi-niveaux et les services offerts par les intergiciels. Il décrit également les composants Java EE, y compris les servlets, JSP, et EJB, ainsi que leur rôle dans les applications distribuées. Enfin, il évoque les outils et les frameworks associés à Java EE pour le développement d'applications N-Tiers.

Transféré par

micson Nkot libouga
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
26 vues50 pages

Cours 1

Le document présente une introduction au développement par composants en Java EE, en détaillant les architectures multi-niveaux et les services offerts par les intergiciels. Il décrit également les composants Java EE, y compris les servlets, JSP, et EJB, ainsi que leur rôle dans les applications distribuées. Enfin, il évoque les outils et les frameworks associés à Java EE pour le développement d'applications N-Tiers.

Transféré par

micson Nkot libouga
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction au développement

par composants (distribués) Java EE

Intervenant : Chouki TIBERMACINE


Bureau : LIRMM (E.311)
Tél. : [Link].24
Mél. : [Link]@[Link]
Web : [Link]
Plan du cours

Introduction aux architectures multi-niveaux (N-Tiers)

Plate-forme Java EE (Enterprise Edition)

Développement par composants JEE

C. TIBERMACINE 2/50
Composants Java EE
Plan du cours

Introduction aux architectures multi-niveaux (N-Tiers)

Plate-forme Java EE (Enterprise Edition)

Développement par composants JEE

C. TIBERMACINE 3/50
Composants Java EE
Applications distribuées

Application distribuée : ensemble de programmes s'exécutant


sur des machines (physiques ou virtuelles) hôtes différentes

Avantages multiples :
Répartition de charge
Optimisation de l'utilisation des ressources

Middleware (intergiciel) : couche logicielle s'interfaçant


entre l'OS et les applications et garantissant une transparence
vis-à-vis de la distribution des machines hôtes

C. TIBERMACINE 4/50
Composants Java EE
Services offerts par les intergiciels

Interopérabilité : capacité des applications à communiquer


même si elles sont composées d'objets hétérogènes
(langages différents : cas de CORBA, OS différents : cas
de JEE, ...)

Gestion des transactions : propriétés ACID (Atomicité, Cohérence,


Isolation et Durabilité)

Sécurité

Gestion du nommage

...

C. TIBERMACINE 5/50
Composants Java EE
Application distribuée avec une architecture client-serveur

Application distribuée
Programme Programme
client serveur
1 2
Intergiciel Intergiciel

OS 1 OS 2

Hôte 1 Hôte 2
Réseau physique

requête
réponse

C. TIBERMACINE 6/50
Composants Java EE
Application distribuée à objets

Application distribuée
Objets Objets
clients serveurs
1 2
Intergiciel Intergiciel

OS 1 OS 2

Réseau physique

invocation de méthode distante


réponse

C. TIBERMACINE 7/50
Composants Java EE
Application distribuée à objets Java RMI

Application distribuée
Objets Objets
1
clients RMI serveurs RMI
3 2 4
RMI Registry
Intergiciel Intergiciel

OS 1 OS 2

Réseau physique

publication des noms/références invocation de méthodes distantes


recherche (lookup) de références réponse à l'invocation

C. TIBERMACINE 8/50
Composants Java EE
Application distribuée à objets Java RMI

Application distribuée
Objets clients Objets
Interfaces serveurs
distantes Interfaces
Objets distantes
stubs
Intergiciel Intergiciel

OS 1 OS 2

Réseau physique

C. TIBERMACINE 9/50
Composants Java EE
Application distribuée à objets Java RMI

Application distribuée 1. Classes qui implémentent


Objets clients des interfaces qui étendent Objets
[Link]
Interfaces 2. Méthodes distantes serveurs
distantes qui lèvent des exceptions Interfaces
Objets [Link] distantes
stubs
Intergiciel Intergiciel

OS 1 OS 2

Réseau physique

C. TIBERMACINE 10/50
Composants Java EE
Application distribuée à objets Java RMI

Objets serveurs passés en argument = stubs passés


Application distribuée

Objets Objets
Objets clients 1 serveurs
clients/serveurs 2
Interfaces
Objets Objets Objets distantes
stubs1 stubs2 stubs1
Intergiciel Intergiciel Intergiciel

OS 1 OS 2 OS 3

Réseau physique

C. TIBERMACINE 11/50
Composants Java EE
Application distribuée avec une architecture N-Tiers

Application distribuée
Objets de Objets du
Objets de
présentation : système
traitement métier
UI d'information
1 4 2 3
Intergiciel Intergiciel Intergiciel

OS 1 OS 2 OS 3

Réseau physique

requête (1 : RMI, HTTP, … puis 2 : JDBC, ...)


réponse

C. TIBERMACINE 12/50
Composants Java EE
Application distribuée avec une architecture N-Tiers

Application distribuée
Objets de
Client Objets de BdD
présentation Objets du SI
lourd/léger traitement métier ...
UI

VM cliente / Intergiciel Intergiciel Intergiciel Intergiciel


navigateur
Web
OS 1 OS 2 OS 3 OS 4 OS 5

Réseau physique

C. TIBERMACINE 13/50
Composants Java EE
Outils intergiciels pour une architecture N-Tiers

Application distribuée
Objets de
Client Objets de BdD
présentation Objets du SI
lourd/léger traitement métier ...
UI Services
Web
VM cliente / Serveur Web Serveur Serveur SGBD
navigateur / d'application d'application d'application ...
Web
OS 1 OS 2 OS 3 OS 4 OS 5

Réseau physique

Java EE : Plate-forme pour applications N-Tiers à base de composants

C. TIBERMACINE 14/50
Composants Java EE
Plan du cours

Introduction aux architectures multi-niveaux (N-Tiers)

Plate-forme Java EE (Enterprise Edition)

Développement par composants JEE

C. TIBERMACINE 15/50
Composants Java EE
Plate-forme Java EE

Anciennement J2EE devenu JEE (suite au passage de Java 2 à 5)

Une solution globale à base de composants pour les applications


N-Tiers en Java

Spécification proposée par Oracle

Implémentations sous la forme de frameworks de développement


et environnements de déploiement (serveurs d'applications)

Implémentations actuelles :
Implémentation de référence : Glassfish d'Oracle (utilisé en TP)
Libres : JBoss (WildFly) de Red Hat, JOnAS de OW2, ...
Propriétaires : WebSphere d'IBM, WebLogic d’Oracle, ...

C. TIBERMACINE 16/50
Composants Java EE
Java EE et les applications N-Tiers

Application distribuée
Objets de Objets de Objets de
Client BdD
présentation traitement métier persistance
Java/Web ...
JSP - Servlets EJB Services Entity/DAO
Web
JVM / Serveur Web Serveur Serveur SGBD
navigateur / d'application d'application d'application MySQL/
Web Tomcat/... Glassfish/ Hibernate/ ERP
JBoss/... ... /...
OS 1 OS 2 OS 3 OS 4 OS 5

Réseau physique

C. TIBERMACINE 17/50
Composants Java EE
Features de la Plate-forme JEE

Supporte le développement de composants correspondants


à chaque niveau (Tier) de l'architecture N-Tier
Applications clientes : Java (POJO, Applets, JavaBeans, ...), ...
Composants Web : HTML, CSS, JS, JSP, Servlets, XML, …
Composants métier : Java, EJB, services Web, …

Fournit un mécanisme d'injection de dépendances, qui répond


à tout le requis des composants en termes de ressources (autres
composants connus du serveur, des connexions aux BdD, …) :
Dans le passé (mais toujours possible) : configuration en XML
Actuellement : simples annotations dans le code

Séparation entre aspects fonctionnels et non-fonctionnels :


développeurs se focalisent sur la logique métier→composants réutilisables

C. TIBERMACINE 18/50
Composants Java EE
Communication entre les niveaux

Site Web d'Oracle


[Link]

C. TIBERMACINE 19/50
Composants Java EE
Containers Java EE

Ils font partie du serveur d'application

Ils fournissent les services non-fonctionnels dont les composants


ont besoin : interface avec le serveur

Services non-fonctionnels : sécurité, gestion des transactions,


nommage et répertoires de noms, et gestion de la distribution

Les composants sont déployés dans ces containers

C. TIBERMACINE 20/50
Composants Java EE
Containers Java EE - suite

Site Web d'Oracle


[Link]

C. TIBERMACINE 21/50
Composants Java EE
Support des services Web

La plate-forme Java EE fournit les outils nécessaires


pour développer, déployer des services Web et leurs clients

Service Web : programme serveur qui utilise des standards


ouverts pour la description des interfaces et pour les protocoles
de communication, comme WSDL, SOAP, XML, HTTP, …

JEE masque les détails de ces technologies de bas niveau :


favoriser l'interopérabilité (conversion en XML transparente, ...)

C. TIBERMACINE 22/50
Composants Java EE
APIs Java EE

Site Web d'Oracle


[Link]

C. TIBERMACINE 23/50
Composants Java EE
Plan du cours

Introduction aux architectures multi-niveaux (N-Tiers)

Plate-forme Java EE (Enterprise Edition)

Développement par composants JEE

C. TIBERMACINE 24/50
Composants Java EE
Composants Web

Archive constituée de programmes et ressources Web :


Des documents HTML, CSS et JavaScript
Des images, vidéos, …
Des servlets et programmes JSP
Des classes Java, JavaBeans, …

Servlets et programmes JSP : scripts côté serveur en Java


Ils sont exécutés suite à la réception d'une requête HTTP
Servlets : classes Java implémentant des méthodes
doGet, doPost, ...
Programmes JSP (équivalents aux scripts Php) : scripts Java
transformés en servlets lors du déploiement

Exécution gérée par les containers Web (serveur Web : Tomcat)

C. TIBERMACINE 25/50
Composants Java EE
Composants Web - suite

Site Web d'Oracle


[Link]

C. TIBERMACINE 26/50
Composants Java EE
Contenu des scripts JSP

Scriptlet : balises <% et %> :


instructions Java standards exécutées pendant l’exécution
du script et lors de la fabrication de la réponse HTTP
Expressions : balises <%= et %>
expression dont la valeur, convertie en chaîne,
est incluse dans le code HTML de la réponse HTTP
Déclarations : balises <%! et %>
déclaration de classe, de méthode, d’attribut, etc,
utilisables dans les scriptlet et expressions précédentes
Directives d’inclusion : balises <%@ et %>
directive d’inclusion de bibliothèques ou de fichiers
Commentaire : balises <%-- et --%>

C. TIBERMACINE 27/50
Composants Java EE
Variables pré-définies et pré-initialisées dans les scripts

request (HttpServletRequest) : objet requête HTTP

response (HttpServletResponse) : objet réponse HTTP

out (PrintWriter) : utilisée pour écrire dans le flux en sortie (HTML)


de la réponse → [Link](…) ;

session (HttpSession) : objet session (si elle existe) associée


à l’interaction avec le client

application (ServletContext) : objet réifiant toute l'application


...

C. TIBERMACINE 28/50
Composants Java EE
Exemple de script JSP

<html> <head> <title>Converter</title> </head>


<body>
<h1><center>Converter</center></h1> <hr>
<p>Enter an amount to convert:</p>
<form method="get">
<input type="text" name="amount" size="25"> <br>
<input type="submit" value="Submit"><input type="reset" value="Reset">
</form>
<% String amount = [Link]("amount");
if ( amount != null && [Link]() > 0 ) {
Double d = new Double (amount); %> <p>
<%= amount %> dollars =
<%= [Link]([Link]()) %> Yen.</p><p>
<%= amount %> Yen = <%= [Link]([Link]()) %> Euro.
</p><% } %>
</body>
</html>

C. TIBERMACINE 29/50
Composants Java EE
Composants EJB

Composants implémentant la logique métier de l'application

Composants écrits en Java avec le framework Enterprise


JavaBeans (EJB)

Quand utiliser des composants EJB ?


Application doit passer à l'échelle (nombre grandissant d'utilisateurs)
Intégrité des données avec les transactions
Application peut avoir des utilisateurs variés (lourds, légers, ...)

C. TIBERMACINE 30/50
Composants Java EE
Enterprise JavaBeans

La spécification EJB a été développée par IBM en 1997


puis adoptée par Sun Microsystems (racheté depuis par Oracle)
en 1999

Versions majeures :
EJB 1.0 (1998), EJB 2.0 (2001), puis EJB 3.0 (2006)

La version en vigueur est la 3.2 (mai 2013)

C. TIBERMACINE 31/50
Composants Java EE
Sortes de composants EJB

Il existe deux sortes de composants EJB


Les session beans
Les message-driven beans (MDB)

A l'origine, il y avait une troisième sorte de composants :


entity beans (devenus de simples classes Entity pour POJO)

C. TIBERMACINE 32/50
Composants Java EE
Session Beans

Un session bean encapsule une logique métier pouvant être


invoquée par un programme client (local ou distant)

Il existe trois sortes de session beans :


Stateful : conserve un état conversationnel avec un client
(dans les variables d'instances de la classe qui l'implémente)
Stateless : ne conserve pas d'état
Solution efficace : le serveur gère un pool de beans
Bean implémente un service Web
Singleton : bean instancié une fois pour toute l'application
Gère un état partagé par plusieurs clients
S'occupe de l'initialisation ou du nettoyage de l'application

C. TIBERMACINE 33/50
Composants Java EE
Développement d'un session bean

Écrire l'interface du composant : une interface Java standard


public interface Converter {
public double toCurrency(double amount, String currency);
public Map<Monnaie,Double> toOtherCurrencies(double amount);
public List<Monnaie> getAvailableCurrencies();
}

Pour une interface locale, annoter l'interface par @Local


(annotation par défaut) [Link]

Pour une interface distante, annoter l'interface par @Remote

Dans ce cas, le composant qui l'implémente est un bean dont


les méthodes peuvent être invoquées à distance (dans d'autres
JVM : autres serveurs, simples JVM ou machines physiques)

C. TIBERMACINE 34/50
Composants Java EE
Développement d'un session bean - suite

Écrire la classe du composant : une classe Java ordinaire


Mettre une annotation @Session : pour bean sans interface
Ajouter une annotation @Stateless pour un bean sans état
@Stateless
public class ConverterBean implements Converter {
...
}
Pour un bean stateful, remplacer l'annotation @Stateless
par @Stateful

Pour un composant distribué, ajouter l'annotation :


@Remote([Link])

Pour un composant local, on peut mettre l'annotation @Local

C. TIBERMACINE 35/50
Composants Java EE
Accès à un bean

L'obtention d'une référence vers un bean peut se faire


de deux façons :
En profitant de l'injection de dépendances fournie
par le container EJB :
façon la plus simple
mais ça ne marche que dans les composants
déployés dans un serveur Java EE

En utilisant le service de répertoire de noms (JNDI :


Java Naming and Directory Interface) fourni par le container :
solution qui marche dans n'importe quel client (Java SE, ...)

C. TIBERMACINE 36/50
Composants Java EE
L'accès à un bean via JNDI

Lors du déploiement d'un composant EJB, les beans qui y sont


définis s'enregistrent auprès d'un service de répertoire JNDI

Le client d'un bean recherche (fait un lookup) d'un bean


en utilisant trois espaces de noms JNDI possibles :
java:global[/application name]/module name /enterprise bean name[/interface name ]
pour rechercher un bean distant
java:module/enterprise bean name/[interface name]
pour rechercher un bean qui se trouve dans le même composant
java:app[/module name]/enterprise bean name [/interface name]
pour rechercher un bean dans la même application EAR
(Enterprise ARchive)

JAR : archive d'un composant EJB, WAR : archive d'un composant


Web et EAR : archive d'une application (ensemble de JAR et WAR)

C. TIBERMACINE 37/50
Composants Java EE
L'accès à un bean via JNDI - suite

Invoquer la méthode lookup avec le nom JNDI du bean

Exemple :
InitialContext context = new InitialContext();
Converter converter = (Converter) [Link](
"java:global/Converter/Converter-ejb/ConverterBean");

Ou :
[Link]("java:...");

C. TIBERMACINE 38/50
Composants Java EE
L'accès à un bean via l'injection de dépendances

Il suffit d'annoter un attribut de la classe du bean par l'annotation :


@EJB (il faudra importer le type [Link])

Exemple :

@EJB
Converter converter;

Le container recherchera un bean de type Converter et affectera


sa référence à l'attribut converter

A partir d'un script JSP, utiliser la balise


<jsp:useBean id="converter" scope="session" class="[Link]" />

C. TIBERMACINE 39/50
Composants Java EE
Message-Driven Beans (MDB)

Composants permettant aux applications JEE de s'exécuter


en partie (en traitant des messages) de façon asynchrone

Ils sont utilisés pour ne pas obliger le serveur de traiter


des réceptions de messages bloquantes

Ils agissent le plus souvent comme écouteurs de messages


de type JMS (Java Messaging Service)

Ces messages peuvent être envoyées par n'importe quel


autre composant JEE ou programme, en général

Les MDB ne maintiennent pas d'état conversationnel


avec un client (ils sont gérés sous la forme de pool de beans)

C. TIBERMACINE 40/50
Composants Java EE
Caractéristiques des Message-Driven Beans

Les MDB n'ont pas d'interfaces utilisables directement


par des programmes clients

Ils sont exécutés de façon automatique à la réception


d'un message : leur méthode callback onMessage(…) est invoquée

Le message est reçu en paramètre de la méthode onMessage

Ils écoutent une destination de messages : une ressource


gérée par le container EJB

Les clients envoient des messages vers cette ressource

C. TIBERMACINE 41/50
Composants Java EE
Implémentation de Message-Driven Beans

Ils sont implémentés par une classe unique (classe du bean)


import [Link].* ; import [Link].*;
@MessageDriven(mappedName = "jms/MailContentQueue", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "[Link]")})
public class MailerMDB implements MessageListener {
@EJB
Converter converter;
public MailerMDB() {
}
@Override
public void onMessage([Link] message) {
try {
if (message instanceof TextMessage) { … }
}
catch (JMSException ex) {[Link]();}
…}
}

C. TIBERMACINE 42/50
Composants Java EE
Envoi de message à un MDB

Utiliser JNDI pour obtenir une référence vers la destination


du message (une file de message : message queue)
Ensuite déposer le message en utilisant l'API JMS
Exemple :
Context jndiContext = new InitialContext();
[Link] connectionFactory =
(QueueConnectionFactory)[Link](
"jms/MailContentQueueFactory");
Connection connection = [Link]();
Session sessionQ = [Link](false,
Session.AUTO_ACKNOWLEDGE);
TextMessage message = [Link]();
String text = "Hello World !!!"; [Link](text);
[Link] queue = ([Link])
[Link]("jms/MailContentQueue");
MessageProducer messageProducer=[Link](queue);
[Link](message);

C. TIBERMACINE 43/50
Composants Java EE
Cycle de vie des composants EJB

Site Web d'Oracle


[Link]

Session Bean Stateful

Message-Drive Bean

Session Bean Stateless

C. TIBERMACINE 44/50
Composants Java EE
EJB et services Web

Possibilités : 1) d'invoquer les opérations de services Web (SW)


depuis un bean et 2) de publier un bean comme un SW
WSDL (Web Services Description Language) : langage
de description des interfaces de services Web
Il est basé sur XML
Interface de service Web :
Nom et localisation du service sur le Web
Ensemble d'opérations avec leurs signatures (types, ...)
Moyens d'utiliser le service Web : quel protocole, ...
Implémentation du service Web : dans n'importe quel langage
SOAP (Simple Object Access Protocol) : protocole
de communication (requête/réponse) entre clients et services Web
Il est basé sur XML (format des messages échangés)
Il est souvent utilisé au dessus de HTTP

C. TIBERMACINE 45/50
Composants Java EE
Interagir avec des services Web

Générer la classe du proxy du SW et les classes JavaBeans


(des types de paramètres …) en utilisant une commande du JDK
wsimport [Link] -d .
Solution qui marche avec n'importe quel client Java (EE ou SE)

Créer le proxy du service Web :


CurrencyConvertorSoap cc = new CurrencyConvertor()
.getCurrencyConvertorSoap();

Invoquer les méthodes métiers :


for([Link] c : [Link]()) {…}

double rate = [Link]([Link], c);

[Link] est le package qui contient les classes générées

C. TIBERMACINE 46/50
Composants Java EE
Produire des services Web

Un bean session sans état peut être publié comme service Web

Son interface sera considérée comme l'interface


du service Web et sa classe, l'implémentation du SW

Il suffit de :
Annoter la classe du bean avec @WebService ([Link])
Annoter les méthodes publiées avec @WebMethod

Il existe une méthode plus automatisée : New > Web Service


> Create Web Service from Existing Session Bean

Lors du déploiement, le serveur d'application génère le document


WSDL qui décrit l’interface du service Web (et fournit une interface
Web de test des opérations du service)

C. TIBERMACINE 47/50
Composants Java EE
Services Web REST

Il existe une forme de services Web plus légère : services


Web REST (REpresentational State Transfer)

Ce type de services s'appuient principalement sur HTTP


(méthodes GET, POST, …) et rarement sur SOAP

Communication entre client et service Web plus légère


(pour les messages, pas d'enveloppe SOAP dans les req/rep HTTP)

Invocation des opérations du service=accès à des ressources Web

Exemple :
[Link]
[Link]

C. TIBERMACINE 48/50
Composants Java EE
Quelques références

Tutoriel Java EE. Site Web d'Oracle :


[Link]

Introduction to Java Platform, Enterprise Edition 7.


Oracle White Paper. Juin 2013.
[Link]

C. TIBERMACINE 49/50
Composants Java EE
Questions

C. TIBERMACINE 50/50
Composants Java EE

Vous aimerez peut-être aussi