Vous êtes sur la page 1sur 62

Introduction à l’architecture n-tiers Java

EE
PRÉSENTÉE PAR:
Zayneb Waari
© 2023-ISETS-
zayneb_waari
Plan
–Description du module

–Marché d’emploi
–Rappel Java SE (Java Standard Edition)
–C’est quoi Java EE ?
–Les spécifications Java EE
–Architecture logique/physique
–Les outils

© 2023-ISETS-
zayneb_waari
Java et le Marché du Travail

•le Top 10 des langages les plus demandés


par les employeurs, en 2018.

• Java est le troisième sur environ


150
langages.

•Source IEEE : https://www.ieee.or


g (Organisation à but non
lucratif).

© 2023-ISETS-
zayneb_waari
Rappels : POO

•La Programmation Orientée Objet (POO) consiste à modéliser informatiquement un ensemble d'éléments
du monde réel, en un ensemble d'entités informatiques (Objets).

• La classe est une abstraction des propriétés communes (attributs et méthodes) d'un ensemble d'objets.

• Un objet est créé par mécanisme d'instanciation, c'est une instance d'une classe

© 2023-ISETS-
zayneb_waari
Rappel Java SE(Java Standard Edition)

Les langages compilés: Les langages interprétés:


• Avantage: Exécution rapide • Avantage: Indépendant de l’OS
•Inconvénient: Dépend de l’OS • Inconvénient: Execution lente (traduction à la volée)
(fichier exécutable)

Java est semi compilé semi interprété:


• Independent de la plateforme d’ exécution
• Temps d’ exécution rapide

Java est portable: « Write Once Run Everywhere »:


• C’est la Java Virtual Machine qui interprète le bytecode: abstraction de l’OS
• Il existe une JVM pour chaque OS: la JVM est l’implémentation de la spécification Java

© 2023-ISETS-
zayneb_waari
Rappel Java SE (Java Standard Edition)

JVM (Java Virtual Machine) : est créé lors du lancement


d’un programme java et permet la conversion
du bytecode vers du code machine

JRE (Java Runtime Environment) : contient les libs


nécessaire pour lancer une jvm, donc permet de lancer un
programme java.

JDK (Java Development Kit) : contient la JRE et les outils


de développement tel que javac.

© 2023-ISETS-
zayneb_waari
JSE, JME et JEE?
• Java Standard Edition est une plateforme destinée au développement des application Desktop,

•Java Micro Edition est une plateforme qui rajoute un ensemble de spécifications à JSE pour permettre le
développement d’applications mobiles,

•Java Entreprise Edition est également basée sur JSE et définit en plus un ensemble de services d’infrastructure,
elle permet de développer des applications distributes multi-tiers pour les entreprises (Affichage, Accès à la base de
données, …).

© 2023-ISETS-
zayneb_waari
Jakarta EE
•“Jakarta EE is the future for cloud-native, light-weight, and traditional enterprise Java applications
• Java EE technologies contributed by Oracle are being used to create the new Jakarta EE platform
• The Eclipse Foundation is the home of Cloud Native Java open innovation

The Jakarta EE Working Group is focused on modernizing Java EE technologies and governance processes to be
more open and community-based”

• PS : Nous continuons à utiliser la plateforme JavaEE7 fournie par Oracle, et non la plateforme JakartaEE fournie par Eclipse.

© 2023-ISETS-
zayneb_waari
C’est quoi Java EE ?
Java EE(Java Enterprise Edition) = Java Standard Edition + bibliothèques

Objectif : Faciliter le développement d'applications web robusteset distribuées.

• Java EE est très utilisé dans la finance.


• Les banques ont confiance dans cette plateforme, parce qu’elle a acquit une très grande maturité
professionnelle.

© 2023-ISETS- 10
zayneb_waari
Les spécifications Java EE
JSR: Java Specification Request
C’est une description formelle de
ce qu’un composant doit offrir.

Exemple de spécification :
JSR 338: JavaTM Persistence 2.1 :
The Java Persistence API is the
Java API for the management of
persistence and
object/relational
mapping in Java EE and Java SE
environments.

Une implémentation de la
spécification JPA (JSR 338) est :

Hibernate: http://hibernate.org/orm/

© 2023-ISETS-
zayneb_waari
Évolution des versions

© 2023-ISETS-
zayneb_waari
Architecture des SI: Rappel

• Une application informatique peut être découpé en trois niveaux d’abstraction

© 2023-ISETS-
zayneb_waari
Couche Présentation
• Appelée IHM (Interface Homme Machine) permet l’interaction de l’application avec l’utilisateur.
• Gère les saisies au clavier et à la souris et la présentation des informations à l’écran,
• Doit être conviviale et ergonomique.

© 2023-ISETS-
zayneb_waari
Logique applicative
• La logique applicative décrit les traitements à réaliser par l’application pour répondre aux besoins des utilisateurs.
• 2 types de traitements:
• Traitements locaux: les contrôles effectuées au niveau du dialogue avec l’IHM(formulaires, champs, boutons
radios..)

• Traitements globaux: les règles de ‘application, appelées aussi logique métier (Business logic)
Logique métier :toutes les règles ou tests de validation personnalisés que vous appliquez aux données avant
de les insérer, de les mettre à jour ou de les supprimer de la base de donnée

© 2023-ISETS-
zayneb_waari
Données
•L’accès aux données regroupe l’ensemble des mécanismes permettant la gestion des informations stockées par
l’application.

• Fonction classique d’un SGBD:


• Définition de données
• Manipulation des données
• Sécurité des données
• Gestion des transactions

© 2023-ISETS-
zayneb_waari
Architecture physique
• Le découpage et la répartition des 3 niveaux d’abstraction permettent de distinguer les architectures physiques:

• 1-tier
• 2-tiers
• 3-tiers
• n-tiers

© 2023-ISETS-
zayneb_waari
Architecture physique: 1tier
• Tier est un mot anglais qui signifie étage ou niveau.

• Une application peut être 1-Tier, 2-Tiers, 3-Tiers ou N-Tiers.

• Une application 1-Tier est, par exemple, la Modification d’un document Word sur un ordinateur Local: Tout est sur
la même machine.

• Inconvénients : Risque de perte des données (non sauvegardées à distance), Impossible d’accéder à une même
ressource par deux utilisateurs en même temps.

© 2023-ISETS-
zayneb_waari
Architecture physique: 2tier
• Le poste client se charge du traitement métier et délègue la gestion des données à un service spécialisé.
• Une application 2-Tiers est typiquement une application client lourd.

• Le niveau Présentation (IHM) et le niveau Traitement l’utilisateur.


• Le niveau Base de Données est sur un autre serveur.

• C’est une architecture Client / Serveur.

• Inconvénient : Toute mise à jour des fonctionnalités nécessitent un déploiement sur toutes les machines des utilisateurs.

© 2023-ISETS-
zayneb_waari
Architecture physique: 3tier
• Une application 3-Tiers est typiquement une application Web :

– Niveau Présentation : IHM (Navigateur sur la machine de l’utilisateur)


– Niveau Traitement : Un serveur d’application qui contient le WAR de notre application (Wildfly,
Tomcat, …).
– Niveau Base de données : Un serveur de BD qui stocke les données de notre application.

© 2023-ISETS-
zayneb_waari
Architecture physique: ntier
• L'architecture n-tiers qualifie la distribution de la couche traitement des données et métier entre de
multiples services et non la multiplication des couches
• La couche traitement peut utiliser plusieurs serveurs si, par exemple, on fait appel à un web services
distants sur d’autres
serveurs applicatifs.
• Voici un exemple d’architecture 2-Tiers, 3-Tiers et 4-Tiers.

© 2023-ISETS-
zayneb_waari
Architecture physique: ntier

• Un serveur d'applications est un logiciel


d'infrastructure offrant un contexte d’exécution
pour des composants applicatifs

- Le conteneur d'EJB assure la gestion: du cycle


de vie du bean, de l'accès au bean, de la sécurité
d'accès, des accès concurrent des transactions

-Un conteneur web est un moteur de servlets


qui prend en charge et gère les servlets.

© 2023-ISETS- 22
zayneb_waari
Les serveurs d’application

o Apache Tomcat.
o Borland Entreprise Server.
o Citrix.
o Apache Geronimo de la Fondation Apache.
o GlassFish serveur d'application Open Source de Oracle (anciennement Sun Java
System Application Server)
o IBM Websphere Application Server.
o IBM Lotus Domino.

© 2023-ISETS-
zayneb_waari
Le conteneur d'EJB
Spécification EJB (Entreprise Java Bean)
Enterprise JavaBeans (EJB) est une architecture de composants logiciels côté serveur
pour la plateforme de développement Java EE.
• Les EJBs sont des classes java côté serveur.
• Le conteneur EJB est un environnement d’exécution pour les EJB déployés au sein
du serveur d’application.
• Le conteneur EJB se lance au démarrage du serveur d’application. • Le conteneur
EJB gère le cycle de vie des EJBs (instantiation, injection, destruction ...)

Le Bean
Java Bean :Un Bean Java est une classe java qui contient des attributs et leur
accesseurs (getters / setters).

© 2023-ISETS-
zayneb_waari
Types d’EJB

© 2023-ISETS-
zayneb_waari
Session Bean - Stateless (sans état)
• Le conteneur conserve en mémoire un certain nombre d’instances (un pool) de chaque EJB sans état et les
partage entre les clients.
• Ces beans ne mémorisent pas l’état des clients.
• Lorsqu’un client appelle une méthode d’un bean sans état, le conteneur choisit une instance du pool et l’affecte
au
client.
• Lorsque le client en a fini, l’instance est retournée dans le pool et pourra être réutilisé par un autre client.

Il est possible de désactiver


le pooling dans le serveur
d’application wildfly.

Exemple : Site de conversion en ligne.

© 2023-ISETS-
zayneb_waari
Session Bean - Stateless - Lifecycle

© 2023-ISETS-
zayneb_waari
Session Bean - Stateful (avec état)
• Quand un client invoque un EJB avec état sur le serveur, le conteneur EJB doit fournir la même instance
a chaque appel de méthode.
• Cette instance ne peut pas être réutilisé par un autre client.

Exemple : Le panier d'un site de vente par correspondance.

© 2023-ISETS-
zayneb_waari
Session Bean - Stateful - Lifecycle
Le serveur d'applications peut mettre en œuvre deux stratégies en cas d'inactivité
d'un client.

•Il peut tout d'abord passiver l'instance inutilisée. Cela consiste à


sauvegarder l'état de cette instance (typiquement ses variables
d'instance) dans un espace mémoire particulier, qui peut être un
cache disque.
• Lorsque le client revient, son instance peut être
sortie de sa passivation, et continuer à servir ses requêtes.

•Une instance passivée depuis longtemps peut enfin être détruite.


Cela met un terme à la conversation. Si le client revient, c'est une
nouvelle instance d'EJB qui servira ses requêtes.

© 2023-ISETS-
zayneb_waari 10
Session Bean - Singleton

• Un EJB singleton est simplement un bean de session qui n’est instancié qu’une seule
fois par application.

• Meme cycle de vie que Stateful (Slide précédent)

Exemple : Vote en ligne

© 2023-ISETS-
zayneb_waari
Accès aux EJBs : Local /
Remote
• Selon d'où un client invoque l’EJB session, la classe de ce dernier devra :

Implémenter une interface locale (@Local)


ou
Implémenter une interface distante (@Remote)

• Elle pourra aussi ne pas implémenter aucune interface pour le cas d'accès
local.

© 2019 –
ESPRIT
Accès local - Injection de dépendances

• Avec l’injection des dépendances, on n’invoque plus le constructeur nous même dans notre code, mais c’est
plutôt le conteneur EJB qui invoque le constructeur.
•Pour injecter une dépendance il suffit d’annoter l’attribut avec @EJB.
Par exemple :
@EJB
private Voiture voiture; //La classe Voiture doit être un EJB

© 2019 –
ESPRIT
Accès distant à un EJB (Remote)–
JNDI (Java Naming and Directory
• Interface)
JNDI ( Java Naming and Directory Interface ) : est une API Java de connexion à des annuaires.

• Un annuaire est l’ensemble de références qui permettent d’accéder des ressources (des URL).

• Exemple : java.naming.provider.url=http-remoting://127.0.0.1:9080

• Chaque serveur d’application possède son propre annuaire qui lui permet de publier les références des
composants déployés dans le serveur en leurs associant un nom. Comme ça, ils seront accessibles en
local ou à distance par d’autres composants.

© 2019 –
ESPRIT
Accès distant à un EJB (Remote)

© 2019 –
ESPRIT
Accès distant à un EJB –
JNDI (Java Naming and Directory
Interface)
• Lorsqu'un client distant appelle un EJB, il ne travaille pas directement avec une
instance de cet EJB mais avec un proxy qui le représente au niveau du client :

String jndiName = "bonjour-ejb/HelloService!tn.esprit.service.HelloServiceRemote";

Context context = new InitialContext();

HelloServiceRemote proxy=(HelloServiceRemote) context.lookup(jndiName);

System.out.println(proxy.sayHello("hello"));

16
TP1 EJB Stateless : bonjour-ejb
• Créer un Nouveau Projet Maven Simple (cocher ‘Skip Archetype’)

© 2019 –
ESPRIT
TP1 EJB Stateless : bonjour-ejb
• GroupId : tn.esprit
• ArtefactId / Name / Description : bonjour-ejb
• Packaging : ejb

© 2019 –
ESPRIT
TP1 EJB Stateless : bonjour-ejb
• Warning : CHKJ2905W: The EJB Validator did not run because ejb-jar.xml could not be loaded or found. Run the XML validator for more
information bonjour-ejb. Unknown EJB Validator Message
• Solution, MAJ pom.xml, comme suivant, et Maven Update Project :
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.5</version>
<configuration>
<ejbVersion>3.2</ejbVersion>
<jarName>${project.artifactId}</jarName>
</configuration>
</plugin>
</plugins>
</build>
© 2019 –
ESPRIT
TP1 EJB Stateless : bonjour-ejb

• Mettre à jour le pom.xml pour utiliser Java 1.8 :


<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>

• Faite Bouton Droit sur le Projet, Maven Update Project :

• Avant Maven Update Projet :

• Après Maven Update Project :

© 2019 –
ESPRIT
TP1 EJB Stateless : bonjour-ejb
• Ajouter la dépendance nécessaire pour développer des EJB (Récupérer cette dépendance de
https://mvnrepository.com ) :

<!-- https://mvnrepository.com/artifact/javax/javaee-api -->


<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>

© 2019 –
ESPRIT
TP1 EJB Stateless : bonjour-ejb

• Exercice :
• Créer le package tn.esprit.service
• Créer deux interfaces, HelloServiceLocal et HelloServiceRemote. Ces interfaces déclarent la méthode
sayHello(String msg)
• Créer la classe HelloService qui implémente ces deux interfaces, et donc qui implémente la méthode sayHello :

• Correction sur les slides suivants :

© 2019 –
ESPRIT
TP1 EJB Stateless : bonjour-ejb
• Création d’un package, des Interfaces et des
Classes :

23
TP1 EJB Stateless : bonjour-ejb
package tn.esprit.service;

import javax.ejb.Local;

@Local
public interface HelloServiceLocal
{
String sayHello(String msg);
}

• Créer HelloServiceRemote par analogie.


TP1 EJB Stateless : bonjour-ejb
package t n . e s p ri t . s e r v i c e ;

import javax.ejb.Remote;

@Remote
public interface HelloServiceRemote {
String sayHello(String msg);
}

© 2019 –
ESPRIT
TP1 EJB Stateless : bonjour-ejb
• Création de la classe HelloService (qui implémente les Interfaces) :

© 2019 –
ESPRIT
TP1 EJB Stateless : bonjour-ejb
package t n . es p r i t . se rv i c e;

import javax.ejb.Stateless;

@Stateless
public class HelloService implements HelloServiceLocal, HelloServiceRemote {

@Override
public String sayHello(String msg) {
return msg;
}

© 2019 –
ESPRIT
TP1 EJB Stateless : bonjour-ejb
• Ajouter le Projet à WildFly et démarrer le serveur :

• L’EJB sera déployé (voir la console) :

java:global/bonjour-ejb/HelloService!tn.esprit.service.HelloServiceLocal
java:app/bonjour-ejb/HelloService!tn.esprit.service.HelloServiceLocal
java:module/HelloService!tn.esprit.service.HelloServiceLocal
java:global/bonjour-ejb/HelloService!tn.esprit.service.HelloServiceRemote
java:app/bonjour-ejb/HelloService!tn.esprit.service.HelloServiceRemote
java:module/HelloService!tn.esprit.service.HelloServiceRemote
java:jboss/exported/bonjour-ejb/HelloService!
tn.esprit.service.HelloServiceRemote
© 2019 –
ESPRIT
TP1 EJB Stateless: bonjour-ejb-client
• Créer un Nouveau Projet Maven Simple (cocher ‘Skip Archetype’)
• GroupId : tn.esprit
• ArtefactId / Name / Description : bonjour-ejb-client
• Packaging : jar
• Mettre à jour le pom.xml pour utiliser Java 1.8 :
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
• Faite Bouton Droit sur le Projet, Maven Update Project.

© 2019 –
ESPRIT
TP1 EJB Stateless: bonjour-ejb-client

• Ajouter la dépendance nécessaire pour développer le client EJB de https://mvnrepository.com


: wildfly-ejb-client-bom , version 14.0.0.Final, type pom.

• Ajouter la dépendance nécessaire vers notre EJB qu’on a créé bonjour-ejb, version 1.0, type
ejb. Dans quel repository se trouve ce jar? Créer la dépendance à ajouter dans le pom.xml.

© 2019 –
ESPRIT
TP1 EJB Stateless: bonjour-ejb-client
<dependencies>
<!-- https://mvnrepository.com/artifact/org.wildfly/wildfly-ejb-client-bom -->
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-ejb-client-bom</artifactId>
<version>11.0.0.Final</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>tn.esprit</groupId>
<artifactId>bonjour-ejb</artifactId>
<version>1.0</version>
<type>ejb</type>
</dependency>
</dependencies>

© 2019 –
ESPRIT
TP1 EJB Stateless: bonjour-ejb-client
• Créer le package tn.esprit
• Créer la classe Client : HelloServiceClient.java, qui contient une méthode main(), le jndiName est à récupérée de
la console (configuration affichée lors du déploiement de notre EJB bonjour-ejb) :
package tn.esprit;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import tn.esprit.service.HelloServiceRemote;
public class HelloServiceClient {
public static void main(String[] args) throws
NamingException {
String jndiName = "bonjour-ejb/HelloService!tn.esprit.service.HelloServiceRemote";
Context context = new
HelloServiceRemote InitialContext();
proxy = (HelloServiceRemote) context.lookup(jndiName);
System.out.println(proxy.sayHello("Bonjour Esprit!!!"));
}
}

© 2019 –
ESPRIT
TP1 EJB Stateless: bonjour-ejb-client

• Dans /src/main/resources, Créer le fichier de properties jndi.properties. Son contenu :

• Attention : Le copier / Coller des propriétés dans le fichier jndi.properties peut créer
des espaces « » à la fin des lignes et des anti slachs « \ ».
• Supprimer les espaces à la fin de chaque ligne, et les anti-slach dans l’URL.

java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory
java.naming.provider.url=http-remoting://127.0.0.1:9080
jboss.naming.client.ejb.context=true

© 2019 –
ESPRIT
TP1 EJB Stateless: bonjour-ejb-client
• sept.
Lancer 24, 2018main(),
la méthode 9:54:53 AM org.xnio.Xnio
et comprendre < c l’EJB
l’appel de l i n i t >:
INFO: XNIO version 3.3.1.Final
sept. 24, 2018 9:54:53 AM org.xnio.nio.NioXnio < c l i n i t >
INFO: XNIO NIO Implementati on Version 3.3.1.Final
sept. 24, 2018 9:54:53 AM org.jboss.remoti ng3.EndpointImpl < c l i n i t >
INFO: JBoss Remoting version 4.0.9.Final
sept. 24, 2018 9:54:53 AM org.jboss.ejb.client.remoti ng.VersionReceiver handleMessage INFO:
EJBCLIENT000017: Received server version 2 and marshalling strategies [ r i v e r ] sept. 24, 2018
assoc i a t e
9:54:53 AM org.jboss.ejb.client.remoti ng.Remoti ngConnecti onEJBReceiver INFO: EJBCLIENT000013:
Successful version handshake completed f o r receiver context
EJBReceiverContext{clientContext=org.jboss.ejb.client.EJBClientContext@63753b6d, receiver=Remoting connection EJB
r e c e i v e r [connection=Remoting connection <6d998ce2>,channel=jboss.ejb,nodename=m104]} on channel Channel ID abf37bd4
(outbound) o f Remoting connection 2758fe70 t o /127.0.0.1:9080
s e p t . 24, 2018 9:54:53 AM o r g . j b o s s . e j b . c l i e n t . E J B C l i e n t < c l i n i t >
INFO: JBoss EJB C l i e n t version 2 . 1 . 1 . F i n a l
Bonjour E s p r i t ! ! !

© 2019 –
ESPRIT
TP2 EJB Stateful (facultatif): panier-ejb

• Vous pouvez vous inspirer du TP1 bonjour-ejb (même étapes) :


• Créer un Nouveau Projet Maven Simple (cocher ‘Skip Archetype’)
• GroupId : tn.esprit
• ArtefactId / Name / Description : panier-serveur
• Packaging : ejb
• Mettre à jour le pom.xml : Utiliser Java 1.8
• Mettre à jour le pom.xml : Ajouter la dépendance javaee-api
• Mettre à jour le pom.xml : Ajouter le plugin maven-ejb-plugin
• Créer le package tn.esprit.service
• Créer deux interfaces, PanierLocal et PanierRemote. Ces interfaces déclarent les méthodes retirerProduit(Produit
produit, int montantTotalPanier) et ajouterProduit(Produit produit, int montantTotalPanier)
• Créer la classe PanierService qui implémente ces deux interfaces

© 2019 –
ESPRIT
TP2 EJB Stateful (facultatif): panier-ejb

• Récupérer la configuration affichée sur la console, pour l’utiliser au niveau du client :

jav a: globa l/ P anier-s erv eur / Pa nierS e rv ic e! t n. es prit . s erv ic e. P anie rRemot e
java:app/Panier-serveur/CompteBancaireService!tn.esprit.service.PanierRemote
java:module/PanierService!tn.esprit.service.PanierRemote
java: j b oss/ exported / Pan i e r - serveur/ CompteBancai r e Service!
t n . espri t . servi c e .Panie rRemote jav a: global/ P anier-s erv eur/ Compt eBanc aireServ ic e!
t n. es prit . s erv ic e. PanierLoc al java:app/Panier-serveur/CompteBancaireService!
tn.esprit.service.PanierLocal
jav a: module/ Pani erServ ic e! t n . es pr it . s erv ic e. P anierL oc a l

© 2019 –
ESPRIT
TP2 EJB Stateful (facultatif): panier-ejb

• Créer le projet Panier-client en suivant les mêmes étapes que pour la création du projet bonjour-ejb-client :
• Créer un Nouveau Projet Maven Simple (cocher ‘Skip Archetype’)
• GroupId : tn.esprit
• ArtefactId / Name / Description : Panier-client
• Packaging : jar
• Mettre à jour le pom.xml pour utiliser Java 1.8 :
• Ajouter les dépendances vers compte-bancaire-serveur et wildfly-ejb-client-bom
• Créer le package tn.esprit
• Créer la classe Client : PanierClient.java, qui contient une méthode main(), et le fichier de properties
jndi.properties.

© 2019 –
ESPRIT
TP2 EJB Stateful (facultatif): panier-ejb
public static void main(String[] args) throws NamingException {
String jndiName = « Panier-serveur/PanierService!tn.esprit.service.PanierRemote";
Context context = new InitialContext();
PanierRemote proxy = (PanierRemote) context.lookup(jndiName);
proxy.ajouterProduit("Ordinateur", 200);
proxy. ajouterProduit (« Tablette", 100);
}

java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory
java.naming.provider.url=http-remoting://127.0.0.1:9080
jboss.naming.client.ejb.context=true

© 2019 –
ESPRIT
TP3 EJB Singleton (facultatif): compte-bancaire-serveur
• Vous pouvez vous inspirer du TP1 bonjour-ejb (même étapes) :
• Créer un Nouveau Projet Maven Simple (cocher ‘Skip Archetype’)
• GroupId : tn.esprit
• ArtefactId / Name / Description : compte-bancaire-serveur
• Packaging : ejb
• Mettre à jour le pom.xml : Utiliser Java 1.8
• Mettre à jour le pom.xml : Ajouter la dépendance javaee-api
• Mettre à jour le pom.xml : Ajouter le plugin maven-ejb-plugin
• Créer le package tn.esprit.service
• Créer deux interfaces, CompteBancaireLocal et CompteBancaireRemote. Ces interfaces déclarent les méthodes
retirerArgent(String personne, int montant) et verserArgent(String personne, int montant)
• Créer la classe CompteBancaireService qui implémente ces deux interfaces

© 2019 –
ESPRIT
TP3 EJB Singleton (facultatif): compte-bancaire-serveur

• Récupérer la configuration affichée sur la console, pour l’utiliser au niveau du client :

java:global/compte-bancaire-serveur/CompteBancaireService!tn.esprit.service.CompteBancaireRemote
java:app/compte-bancaire-serveur/CompteBancaireService!tn.esprit.service.CompteBancaireRemote
java:module/CompteBancaireService!tn.esprit.service.CompteBancaireRemote
java:jboss/exported/compte-bancaire-serveur/CompteBancaireService!tn.esprit.service.CompteBancaireRemote
java:global/compte-bancaire-serveur/CompteBancaireService!tn.esprit.service.CompteBancaireLocal
java:app/compte-bancaire-serveur/CompteBancaireService!tn.esprit.service.CompteBancaireLocal
java:module/CompteBancaireService!tn.esprit.service.CompteBancaireLocal

© 2019 –
ESPRIT
TP3 EJB Singleton (facultatif): compte-bancaire-client

• Créer le projet compte-bancaire-client en suivant les mêmes étapes que pour la création du projet bonjour-ejb-client
:
• Créer un Nouveau Projet Maven Simple (cocher ‘Skip Archetype’)
• GroupId : tn.esprit
• ArtefactId / Name / Description : compte-bancaire-client
• Packaging : jar
• Mettre à jour le pom.xml pour utiliser Java 1.8 :
• Ajouter les dépendances vers compte-bancaire-serveur et wildfly-ejb-client-bom
• Créer le package tn.esprit
• Créer la classe Client : CompteBancaireClient.java, qui contient une méthode main(), et le fichier de properties
jndi.properties.

© 2019 –
ESPRIT
TP3 EJB Singleton (facultatif): compte-bancaire-client
public static void main(String[] args) throws NamingException {
String jndiName = "compte-bancaire-serveur/CompteBancaireService!
tn.esprit.service.CompteBancaireRemote"; Context context = new InitialContext();
CompteBancaireRemote proxy = (CompteBancaireRemote) context.lookup(jndiName);
proxy.verserArgent("Mourad", 20);
proxy.verserArgent("Mohamed", 10);
}

java.naming.factory.initial=
org.jboss.naming.remote.client.InitialContextFactory
java.naming.provider.url=http-remoting://127.0.0.1:9080
jboss.naming.client.ejb.context=true

© 2019 –
ESPRIT
Prochain Cours

• Finaliser les exercices relatifs aux EJBs


•Découvrir la spécification JPA relative à la persistance des données
• Créer votre première entité JPA.

© 2019 –
ESPRIT

Vous aimerez peut-être aussi