les composants d`entreprise - Polytech`Lille, page Olivier Caron

publicité
GIS 4
Architectures Logicielles
Les architectures 3-tiers
Partie II : les composants d’entreprise
Olivier Caron
Polytech Lille
Avenue Paul Langevin Cité Scientifique Lille 1
59655 Villeneuve d’Ascq cedex
http://ocaron.plil.fr
[email protected]
Olivier Caron
March 3, 2017
1/79
GIS 4
Architectures Logicielles
c Dave Barry
Nous ne pouvons pas prédire où nous conduira la révolution informatique.
Tout ce que nous savons avec certitude, c’est que, quand on y sera enfin,
on n’aura pas assez de RAM.
Olivier Caron
March 3, 2017
2/79
GIS 4
Architectures Logicielles
Sources
• Spécifications Oracle EJB 2.1, EJB 3.1 ,
http://www.oracle.com/technetwork/java/
javaee/documentation
Olivier Caron
March 3, 2017
3/79
GIS 4
Architectures Logicielles
Sources
• Spécifications Oracle EJB 2.1, EJB 3.1 ,
http://www.oracle.com/technetwork/java/
javaee/documentation
• Documentation JBoss, http://www.jboss.org ou
http://wildfly.org
Olivier Caron
March 3, 2017
3/79
GIS 4
Architectures Logicielles
Sources
• Spécifications Oracle EJB 2.1, EJB 3.1 ,
http://www.oracle.com/technetwork/java/
javaee/documentation
• Documentation JBoss, http://www.jboss.org ou
http://wildfly.org
• Documentation Oracle (ex SUN, Javasoft),
http://docs.oracle.com/javaee/7/tutorial
Olivier Caron
March 3, 2017
3/79
GIS 4
Architectures Logicielles
Les architectures 3-tiers
Applets Java
Composants Serveur
SGBD
Form HTML
Réseau
Fichiers
JSP
...
Olivier Caron
March 3, 2017
4/79
GIS 4
Architectures Logicielles
Les modèles de composants serveur
• Le modèle de composants JEE-EJB
Olivier Caron
March 3, 2017
5/79
GIS 4
Architectures Logicielles
Les modèles de composants serveur
• Le modèle de composants JEE-EJB
• Orienté bases de données, multi-serveur d’applications,
mono-langage (Java)
Olivier Caron
March 3, 2017
5/79
GIS 4
Architectures Logicielles
Les modèles de composants serveur
• Le modèle de composants JEE-EJB
• Orienté bases de données, multi-serveur d’applications,
mono-langage (Java)
• Le modèle de composants CORBA
Olivier Caron
March 3, 2017
5/79
GIS 4
Architectures Logicielles
Les modèles de composants serveur
• Le modèle de composants JEE-EJB
• Orienté bases de données, multi-serveur d’applications,
mono-langage (Java)
• Le modèle de composants CORBA
• Multi-serveurs, multi-langages, multi-plates-formes
Olivier Caron
March 3, 2017
5/79
GIS 4
Architectures Logicielles
Les modèles de composants serveur
• Le modèle de composants JEE-EJB
• Orienté bases de données, multi-serveur d’applications,
mono-langage (Java)
• Le modèle de composants CORBA
• Multi-serveurs, multi-langages, multi-plates-formes
• Des langages de spécifications de composants (IDL3)
Olivier Caron
March 3, 2017
5/79
GIS 4
Architectures Logicielles
Les modèles de composants serveur
• Le modèle de composants JEE-EJB
• Orienté bases de données, multi-serveur d’applications,
mono-langage (Java)
• Le modèle de composants CORBA
• Multi-serveurs, multi-langages, multi-plates-formes
• Des langages de spécifications de composants (IDL3)
• Des langages de spécifications de déploiement (CIDL)
Olivier Caron
March 3, 2017
5/79
GIS 4
Architectures Logicielles
Les modèles de composants serveur
• Le modèle de composants JEE-EJB
• Orienté bases de données, multi-serveur d’applications,
mono-langage (Java)
• Le modèle de composants CORBA
• Multi-serveurs, multi-langages, multi-plates-formes
• Des langages de spécifications de composants (IDL3)
• Des langages de spécifications de déploiement (CIDL)
• Le modèle .Net
Olivier Caron
March 3, 2017
5/79
GIS 4
Architectures Logicielles
Les modèles de composants serveur
• Le modèle de composants JEE-EJB
• Orienté bases de données, multi-serveur d’applications,
mono-langage (Java)
• Le modèle de composants CORBA
• Multi-serveurs, multi-langages, multi-plates-formes
• Des langages de spécifications de composants (IDL3)
• Des langages de spécifications de déploiement (CIDL)
• Le modèle .Net
• Multi-langages (C++, VBScript, C#)
Olivier Caron
March 3, 2017
5/79
GIS 4
Architectures Logicielles
Les modèles de composants serveur
• Le modèle de composants JEE-EJB
• Orienté bases de données, multi-serveur d’applications,
mono-langage (Java)
• Le modèle de composants CORBA
• Multi-serveurs, multi-langages, multi-plates-formes
• Des langages de spécifications de composants (IDL3)
• Des langages de spécifications de déploiement (CIDL)
• Le modèle .Net
• Multi-langages (C++, VBScript, C#)
• Multi-plates-formes windows mais aussi plateforme linux :
http://www.mono-project.com
Olivier Caron
March 3, 2017
5/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (1/3)
• Des objets trop complexes
Olivier Caron
March 3, 2017
6/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (1/3)
• Des objets trop complexes
Olivier Caron
March 3, 2017
6/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (1/3)
• Des objets trop complexes
public class ObjetServeur
{
private int x ;
public void setX(int value)
{
this.x=value ;
}
public int getX()
{
return this.x ;
}
public ObjetServeur()
{ ... }
}
Olivier Caron
March 3, 2017
6/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (1/3)
• Des objets trop complexes
public class ObjetServeur
extends UnicastRemoteObject
{
private int x ;
public void setX(int value)
throws RemoteException
{
this.x=value ;
Gestion du réseau
}
public int getX()
throws RemoteException
{
return this.x ;
}
public ObjetServeur()
throws RemoteException
{ ... }
}
Olivier Caron
March 3, 2017
6/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (1/3)
• Des objets trop complexes
public class ObjetServeur
extends UnicastRemoteObject
{
private int x ;
public void setX(int value)
throws RemoteException
{
if (User.getAuthentification()...
this.x=value ;
Gestion du réseau
}
public int getX()
throws RemoteException
Gestion de la sécurité
{
if (User.getAuthentification()...
return this.x ;
}
public ObjetServeur()
throws RemoteException
{ ... }
}
Olivier Caron
March 3, 2017
6/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (1/3)
• Des objets trop complexes
public class ObjetServeur
extends UnicastRemoteObject
{
private int x ;
public void setX(int value)
throws RemoteException
{
if (User.getAuthentification()...
this.x=value ;
// code JDBC : stockage de X
...
Gestion du réseau
}
public int getX()
throws RemoteException
{
Gestion de la sécurité
Gestion de la persistance
if (User.getAuthentification()...
//code JDBC : restauration de X
...
return this.x ;
}
public ObjetServeur()
throws RemoteException
{ ... }
}
Olivier Caron
March 3, 2017
6/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (1/3)
• Des objets trop complexes
public class ObjetServeur
extends UnicastRemoteObject
{
private int x ;
public void setX(int value)
throws RemoteException
{
Tx.beginTransaction() ;
if (User.getAuthentification()...
this.x=value ;
// code JDBC : stockage de X
...
Tx.commitTransaction() ;
Gestion du réseau
}
public int getX()
throws RemoteException
Tx.beginTransaction() ;
if (User.getAuthentification()...
{
Gestion de la sécurité
Gestion de la persistance
Gestion des transactions
//code JDBC : restauration de X
...
Tx.commitTransaction() ;
return this.x ;
}
public ObjetServeur()
throws RemoteException
{ ... }
}
Olivier Caron
March 3, 2017
6/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (1/3)
• Des objets trop complexes
public class ObjetServeur extends UnicastRemoteObject {
private int x ;
public void setX(int value) throws RemoteException {
Tx.beginTransaction() ;
if (User.getAuthentification()...
this.x=value ;
// code JDBC : stockage de X
...
Tx.commitTransaction() ;
}
public int getX() throws RemoteException
Tx.beginTransaction() ;
if (User.getAuthentification()...
//code JDBC : restauration de X
...
Tx.commitTransaction() ;
return this.x ;
{
Gestion du réseau
Gestion de la sécurité
Gestion de la persistance
Gestion des transactions
}
public ObjetServeur() throws RemoteException
{ ... }
}
Olivier Caron
March 3, 2017
7/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (2/3)
• 1ère étape :une meilleure structuration objet
Olivier Caron
March 3, 2017
8/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (2/3)
• 1ère étape :une meilleure structuration objet
Olivier Caron
March 3, 2017
8/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (2/3)
• 1ère étape :une meilleure structuration objet
Objet Serveur
Olivier Caron
March 3, 2017
8/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (2/3)
• 1ère étape :une meilleure structuration objet
Gestion du réseau
Gestion de la sécurité
Objet Serveur
Gestion de la persistance
Gestion des transactions
Objet Serveur
Olivier Caron
March 3, 2017
8/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (2/3)
• 1ère étape : une meilleure structuration objet
Gestion du réseau
Gestion de la sécurité
Objet Serveur
Gestion de la persistance
Gestion des transactions
Objet Serveur
Olivier Caron
March 3, 2017
9/79
GIS 4
Architectures Logicielles
Des objets aux composants d’entreprise (3/3)
• 2nde étape : complète séparation, notion de conteneur
Composant
Gestion de
la persistance
descriptions
Gestion du
réseau
Gestion de
la sécurité
Gestion des
transactions
Objet Serveur
Conteneur de composants
Olivier Caron
March 3, 2017
10/79
GIS 4
Architectures Logicielles
Les composants d’entreprise : en résumé
• Applications cibles trop complexes :
Olivier Caron
March 3, 2017
11/79
GIS 4
Architectures Logicielles
Les composants d’entreprise : en résumé
• Applications cibles trop complexes :
• Gérer le réseau, la sécurité, les transactions, les bases de données,
le déploiement,. . .
Olivier Caron
March 3, 2017
11/79
GIS 4
Architectures Logicielles
Les composants d’entreprise : en résumé
• Applications cibles trop complexes :
• Gérer le réseau, la sécurité, les transactions, les bases de données,
le déploiement,. . .
• La solution : fournir un modèle de composants qui autorise un
découpage aspects fonctionnels et aspects techniques :
Olivier Caron
March 3, 2017
11/79
GIS 4
Architectures Logicielles
Les composants d’entreprise : en résumé
• Applications cibles trop complexes :
• Gérer le réseau, la sécurité, les transactions, les bases de données,
le déploiement,. . .
• La solution : fournir un modèle de composants qui autorise un
découpage aspects fonctionnels et aspects techniques :
• aspects fonctionnels (le code métier) écrits dans un langage de
programmation suivant un cadre de programmation
Olivier Caron
March 3, 2017
11/79
GIS 4
Architectures Logicielles
Les composants d’entreprise : en résumé
• Applications cibles trop complexes :
• Gérer le réseau, la sécurité, les transactions, les bases de données,
le déploiement,. . .
• La solution : fournir un modèle de composants qui autorise un
découpage aspects fonctionnels et aspects techniques :
• aspects fonctionnels (le code métier) écrits dans un langage de
programmation suivant un cadre de programmation
• aspects techniques décrits séparément (utilisation XML possible)
Olivier Caron
March 3, 2017
11/79
GIS 4
Architectures Logicielles
Les composants d’entreprise : en résumé
• Applications cibles trop complexes :
• Gérer le réseau, la sécurité, les transactions, les bases de données,
le déploiement,. . .
• La solution : fournir un modèle de composants qui autorise un
découpage aspects fonctionnels et aspects techniques :
• aspects fonctionnels (le code métier) écrits dans un langage de
programmation suivant un cadre de programmation
• aspects techniques décrits séparément (utilisation XML possible)
• Avantage : réutilisez une application avec aspects techniques
différents sans toucher au ”vrai” code !
Olivier Caron
March 3, 2017
11/79
GIS 4
Architectures Logicielles
Objectifs de la norme JEE-EJB (Enterprise Java Beans)
• Conçue par Sun Microsystems (depuis 1998)
Olivier Caron
March 3, 2017
12/79
GIS 4
Architectures Logicielles
Objectifs de la norme JEE-EJB (Enterprise Java Beans)
• Conçue par Sun Microsystems (depuis 1998)
• Modèle différent des Java Beans !
Olivier Caron
March 3, 2017
12/79
GIS 4
Architectures Logicielles
Objectifs de la norme JEE-EJB (Enterprise Java Beans)
• Conçue par Sun Microsystems (depuis 1998)
• Modèle différent des Java Beans !
• Objectifs :
Olivier Caron
March 3, 2017
12/79
GIS 4
Architectures Logicielles
Objectifs de la norme JEE-EJB (Enterprise Java Beans)
• Conçue par Sun Microsystems (depuis 1998)
• Modèle différent des Java Beans !
• Objectifs :
• Fournir aux applications d’entreprise une architecture normalisée de
composants logiciels répartis
Olivier Caron
March 3, 2017
12/79
GIS 4
Architectures Logicielles
Objectifs de la norme JEE-EJB (Enterprise Java Beans)
• Conçue par Sun Microsystems (depuis 1998)
• Modèle différent des Java Beans !
• Objectifs :
• Fournir aux applications d’entreprise une architecture normalisée de
composants logiciels répartis
• Etre multi-plateforme (pas de recompilation Java)
Olivier Caron
March 3, 2017
12/79
GIS 4
Architectures Logicielles
Objectifs de la norme JEE-EJB (Enterprise Java Beans)
• Conçue par Sun Microsystems (depuis 1998)
• Modèle différent des Java Beans !
• Objectifs :
• Fournir aux applications d’entreprise une architecture normalisée de
composants logiciels répartis
• Etre multi-plateforme (pas de recompilation Java)
• Prise en compte de 3 aspects techniques :
persistance (couplage bases de données), sécurité et transactions
Olivier Caron
March 3, 2017
12/79
GIS 4
Architectures Logicielles
Objectifs de la norme JEE-EJB (Enterprise Java Beans)
• Conçue par Sun Microsystems (depuis 1998)
• Modèle différent des Java Beans !
• Objectifs :
• Fournir aux applications d’entreprise une architecture normalisée de
composants logiciels répartis
• Etre multi-plateforme (pas de recompilation Java)
• Prise en compte de 3 aspects techniques :
persistance (couplage bases de données), sécurité et transactions
• Support réseau assuré par protocole RMI/IIOP
Olivier Caron
March 3, 2017
12/79
GIS 4
Architectures Logicielles
Objectifs de la norme JEE-EJB (Enterprise Java Beans)
• Conçue par Sun Microsystems (depuis 1998)
• Modèle différent des Java Beans !
• Objectifs :
• Fournir aux applications d’entreprise une architecture normalisée de
composants logiciels répartis
• Etre multi-plateforme (pas de recompilation Java)
• Prise en compte de 3 aspects techniques :
persistance (couplage bases de données), sécurité et transactions
• Support réseau assuré par protocole RMI/IIOP
• Adaptée aux architectures 3-tiers
Olivier Caron
March 3, 2017
12/79
GIS 4
Architectures Logicielles
L’architecture JEE
Conteneur WEB
Conteneur EJB
Servlets
pages JSP
RMI/IIOP
JNDI
JTA
JDBC
JMS
JavaMail
JAF
comp. EJB
RMI/IIOP
JNDI
JTA
JDBC
JMS
JavaMail
JAF
serveur J2EE
application
cliente
Olivier Caron
Serveur J2EE
SGBD
March 3, 2017
13/79
GIS 4
Architectures Logicielles
Une multitude de serveurs d’applications EJB
• Oracle Glassfish (SGBDR, modèle objet-relationnel)
Olivier Caron
March 3, 2017
14/79
GIS 4
Architectures Logicielles
Une multitude de serveurs d’applications EJB
• Oracle Glassfish (SGBDR, modèle objet-relationnel)
• Inprise, JBoss, JONAS,. . .
Olivier Caron
March 3, 2017
14/79
GIS 4
Architectures Logicielles
Une multitude de serveurs d’applications EJB
• Oracle Glassfish (SGBDR, modèle objet-relationnel)
• Inprise, JBoss, JONAS,. . .
• L’écriture d’une application EJB est indépendante d’un serveur EJB
Olivier Caron
March 3, 2017
14/79
GIS 4
Architectures Logicielles
Evolution des EJB
• des EJB 1.0 aux EJB 3.1
Olivier Caron
March 3, 2017
15/79
GIS 4
Architectures Logicielles
Evolution des EJB
• des EJB 1.0 aux EJB 3.1
• Grammaires XML dédiées aux services
Olivier Caron
March 3, 2017
15/79
GIS 4
Architectures Logicielles
Evolution des EJB
• des EJB 1.0 aux EJB 3.1
• Grammaires XML dédiées aux services
• Définition et amélioration d’un framework
Olivier Caron
March 3, 2017
15/79
GIS 4
Architectures Logicielles
Evolution des EJB
• des EJB 1.0 aux EJB 3.1
• Grammaires XML dédiées aux services
• Définition et amélioration d’un framework
• Arrivée des EJB 3.0 (2006), EJB 3.1 (2011)
Olivier Caron
March 3, 2017
15/79
GIS 4
Architectures Logicielles
Evolution des EJB
• des EJB 1.0 aux EJB 3.1
• Grammaires XML dédiées aux services
• Définition et amélioration d’un framework
• Arrivée des EJB 3.0 (2006), EJB 3.1 (2011)
• Etat février 06 : phase finale de spécification
Olivier Caron
March 3, 2017
15/79
GIS 4
Architectures Logicielles
Evolution des EJB
• des EJB 1.0 aux EJB 3.1
• Grammaires XML dédiées aux services
• Définition et amélioration d’un framework
• Arrivée des EJB 3.0 (2006), EJB 3.1 (2011)
• Etat février 06 : phase finale de spécification
• Utilisation des mécanismes Java 1.5
Olivier Caron
March 3, 2017
15/79
GIS 4
Architectures Logicielles
Evolution des EJB
• des EJB 1.0 aux EJB 3.1
• Grammaires XML dédiées aux services
• Définition et amélioration d’un framework
• Arrivée des EJB 3.0 (2006), EJB 3.1 (2011)
• Etat février 06 : phase finale de spécification
• Utilisation des mécanismes Java 1.5
• Libérer le programmeur de tout framework
Olivier Caron
March 3, 2017
15/79
GIS 4
Architectures Logicielles
Evolution des EJB
• des EJB 1.0 aux EJB 3.1
• Grammaires XML dédiées aux services
• Définition et amélioration d’un framework
• Arrivée des EJB 3.0 (2006), EJB 3.1 (2011)
•
•
•
•
Etat février 06 : phase finale de spécification
Utilisation des mécanismes Java 1.5
Libérer le programmeur de tout framework
Substituer la notation XML par des annotations Java
Olivier Caron
March 3, 2017
15/79
GIS 4
Architectures Logicielles
Evolution des EJB
• des EJB 1.0 aux EJB 3.1
• Grammaires XML dédiées aux services
• Définition et amélioration d’un framework
• Arrivée des EJB 3.0 (2006), EJB 3.1 (2011)
•
•
•
•
•
Etat février 06 : phase finale de spécification
Utilisation des mécanismes Java 1.5
Libérer le programmeur de tout framework
Substituer la notation XML par des annotations Java
Garder la compatibilité EJB
Olivier Caron
March 3, 2017
15/79
GIS 4
Architectures Logicielles
Les types de composants EJB
• Les composants Session
Olivier Caron
March 3, 2017
16/79
GIS 4
Architectures Logicielles
Les types de composants EJB
• Les composants Session
• Assurent les services métiers
Olivier Caron
March 3, 2017
16/79
GIS 4
Architectures Logicielles
Les types de composants EJB
• Les composants Session
• Assurent les services métiers
• interface avec les composants web ou clients
Olivier Caron
March 3, 2017
16/79
GIS 4
Architectures Logicielles
Les types de composants EJB
• Les composants Session
• Assurent les services métiers
• interface avec les composants web ou clients
• Avec ou sans état transactionnel (Stateless, Stateful)
Olivier Caron
March 3, 2017
16/79
GIS 4
Architectures Logicielles
Les types de composants EJB
• Les composants Session
• Assurent les services métiers
• interface avec les composants web ou clients
• Avec ou sans état transactionnel (Stateless, Stateful)
• Les composants Entités
Olivier Caron
March 3, 2017
16/79
GIS 4
Architectures Logicielles
Les types de composants EJB
• Les composants Session
• Assurent les services métiers
• interface avec les composants web ou clients
• Avec ou sans état transactionnel (Stateless, Stateful)
• Les composants Entités
• Représentent les objets métiers
Olivier Caron
March 3, 2017
16/79
GIS 4
Architectures Logicielles
Les types de composants EJB
• Les composants Session
• Assurent les services métiers
• interface avec les composants web ou clients
• Avec ou sans état transactionnel (Stateless, Stateful)
• Les composants Entités
• Représentent les objets métiers
• Interface avec les bases de données
Olivier Caron
March 3, 2017
16/79
GIS 4
Architectures Logicielles
Les types de composants EJB
• Les composants Session
• Assurent les services métiers
• interface avec les composants web ou clients
• Avec ou sans état transactionnel (Stateless, Stateful)
• Les composants Entités
• Représentent les objets métiers
• Interface avec les bases de données
• Persistance gérée ou pas par le conteneur (CMP, BMP)
Olivier Caron
March 3, 2017
16/79
GIS 4
Architectures Logicielles
Les types de composants EJB
• Les composants Session
• Assurent les services métiers
• interface avec les composants web ou clients
• Avec ou sans état transactionnel (Stateless, Stateful)
• Les composants Entités
• Représentent les objets métiers
• Interface avec les bases de données
• Persistance gérée ou pas par le conteneur (CMP, BMP)
• Les composants ”Message Driven” (à partir de la norme EJB 2.0)
Olivier Caron
March 3, 2017
16/79
GIS 4
Architectures Logicielles
Les types de composants EJB
• Les composants Session
• Assurent les services métiers
• interface avec les composants web ou clients
• Avec ou sans état transactionnel (Stateless, Stateful)
• Les composants Entités
• Représentent les objets métiers
• Interface avec les bases de données
• Persistance gérée ou pas par le conteneur (CMP, BMP)
• Les composants ”Message Driven” (à partir de la norme EJB 2.0)
• Gestion asynchrone, événementielle
Olivier Caron
March 3, 2017
16/79
GIS 4
Architectures Logicielles
Conception et Structuration des composants (1/2)
Entité
Session
...
Services Métiers
Entité
WEB
Objets Métiers
• Exemple banque :
Olivier Caron
March 3, 2017
17/79
GIS 4
Architectures Logicielles
Conception et Structuration des composants (1/2)
Entité
Session
...
Services Métiers
Entité
WEB
Objets Métiers
• Exemple banque :
• virement de comptes → service (session)
Olivier Caron
March 3, 2017
17/79
GIS 4
Architectures Logicielles
Conception et Structuration des composants (1/2)
Entité
Session
...
Services Métiers
Entité
WEB
Objets Métiers
• Exemple banque :
• virement de comptes → service (session)
• info solde → données (entité)
Olivier Caron
March 3, 2017
17/79
GIS 4
Architectures Logicielles
Conception et Structuration des composants (2/2)
• Use Case et diagrammes de séquences définissent les composants
sessions
Olivier Caron
March 3, 2017
18/79
GIS 4
Architectures Logicielles
Conception et Structuration des composants (2/2)
• Use Case et diagrammes de séquences définissent les composants
sessions
• Structure du système d’information définit les composants entité
Olivier Caron
March 3, 2017
18/79
GIS 4
Architectures Logicielles
Conception et Structuration des composants (2/2)
• Use Case et diagrammes de séquences définissent les composants
sessions
• Structure du système d’information définit les composants entité
• Notion d’interfaces locales et distantes (performances)
Olivier Caron
March 3, 2017
18/79
GIS 4
Architectures Logicielles
Gestion des composants par le serveur
• Objectif : le serveur doit pouvoir gérer des milliers, millions d’objets
distribués simultanément !
Olivier Caron
March 3, 2017
19/79
GIS 4
Architectures Logicielles
Gestion des composants par le serveur
• Objectif : le serveur doit pouvoir gérer des milliers, millions d’objets
distribués simultanément !
• Le type du composant (entité, session avec état, session sans état)
implique un cycle de vie différent, un mode de fonctionnement
particulier
Olivier Caron
March 3, 2017
19/79
GIS 4
Architectures Logicielles
Gestion des composants par le serveur
• Objectif : le serveur doit pouvoir gérer des milliers, millions d’objets
distribués simultanément !
• Le type du composant (entité, session avec état, session sans état)
implique un cycle de vie différent, un mode de fonctionnement
particulier
• Le client n’accéde jamais directement au composant, cela autorise
des mécanismes de swap selon le composant.
Olivier Caron
March 3, 2017
19/79
GIS 4
Architectures Logicielles
Norme EJB 3.0
• Concepts de base :
Olivier Caron
March 3, 2017
20/79
GIS 4
Architectures Logicielles
Norme EJB 3.0
• Concepts de base :
• Plus de framework (ou minimal), liberté de programmation
Des ”objets POJO” (Plain Old java Objects)
Olivier Caron
March 3, 2017
20/79
GIS 4
Architectures Logicielles
Norme EJB 3.0
• Concepts de base :
• Plus de framework (ou minimal), liberté de programmation
Des ”objets POJO” (Plain Old java Objects)
• Héritage, polymorphisme, etc : tout est possible.
Olivier Caron
March 3, 2017
20/79
GIS 4
Architectures Logicielles
Norme EJB 3.0
• Concepts de base :
• Plus de framework (ou minimal), liberté de programmation
Des ”objets POJO” (Plain Old java Objects)
• Héritage, polymorphisme, etc : tout est possible.
• Ecriture XML éventuellement remplacée par annotations Java
Olivier Caron
March 3, 2017
20/79
GIS 4
Architectures Logicielles
Norme EJB 3.0
• Concepts de base :
• Plus de framework (ou minimal), liberté de programmation
Des ”objets POJO” (Plain Old java Objects)
• Héritage, polymorphisme, etc : tout est possible.
• Ecriture XML éventuellement remplacée par annotations Java
• Les pré-requis : Java 5
Olivier Caron
March 3, 2017
20/79
GIS 4
Architectures Logicielles
Norme EJB 3.0
• Concepts de base :
• Plus de framework (ou minimal), liberté de programmation
Des ”objets POJO” (Plain Old java Objects)
• Héritage, polymorphisme, etc : tout est possible.
• Ecriture XML éventuellement remplacée par annotations Java
• Les pré-requis : Java 5
• Les annotations Java
Olivier Caron
March 3, 2017
20/79
GIS 4
Architectures Logicielles
Norme EJB 3.0
• Concepts de base :
• Plus de framework (ou minimal), liberté de programmation
Des ”objets POJO” (Plain Old java Objects)
• Héritage, polymorphisme, etc : tout est possible.
• Ecriture XML éventuellement remplacée par annotations Java
• Les pré-requis : Java 5
• Les annotations Java
• La généricité Java (gestion des associations)
Olivier Caron
March 3, 2017
20/79
GIS 4
Architectures Logicielles
Une application JEE - EJB 3 (1/3)
Application J2EE (fichier ear)
application.xml
module
EJB (fichier
jar)
module
moduleEJB
EJB(fichier
(fichierjar)
jar)
ejb-jar.xml
(facultatif)
ejb-jar.xml
(facultatif)
ejb-jar.xml (facultatif)
session
EJB
session
EJB
sessionEJB
EJB session
session
sessionEJB
EJB
module
WEB
(fichier
module
WEB
(fichierwar)
war)
module
WEB
module
WEB(fichier
(fichierwar)
war)
web.xml
web.xml
web.xml
web.xml
Web
Web
Web
Web
Web
Web
Web
Web
Olivier Caron
module
moduleEJB
EJB(fichier
(fichierjar)
jar)
persistence.xml
persistence.xml
entité
entitéEJB
EJB
March 3, 2017
entité
entitéEJB
EJB
21/79
GIS 4
Architectures Logicielles
Une application JEE - EJB 3 (2/3)
<?xml version= ” 1 . 0 ” encoding= ” UTF−8” ?>
<a p p l i c a t i o n xmlns= ” h t t p : / / j a v a . sun . com / xml / ns / javaee ”
x m l n s : x s i = ” h t t p : / / www. w3 . org / 2 0 0 1 /XMLSchema−i n s t a n c e ” version= ” 6 ”
monAppli/
META-INF/
application.xml
mesComposantsWeb.war
mesEJBEntites.jar
mesEJBSessions.jar
jar cvf monAppli.ear
monAppli/*
Olivier Caron
x s i : s c h e m a L o c a t i o n = ” h t t p : / / j a v a . sun . com / xml / ns / javaee
h t t p : / / j a v a . sun . com / xml / ns / javaee / a p p l i c a t i o n 6 . xsd ”>
<d i s p l a y−name>monAppli</ d i s p l a y−name>
<module>
<web>
<web−u r i>mesComposantsWeb . war</ web−u r i>
<c o n t e x t−r o o t>r e p e r t o i r e R a c i n e</ c o n t e x t−r o o t>
</ web>
</ module>
<module> <e j b>mesEJBSessions . j a r</ e j b>
</ module>
<module> <e j b>mesEJBEntites . j a r</ e j b>
</ module>
</ a p p l i c a t i o n>
March 3, 2017
22/79
GIS 4
Architectures Logicielles
Les composants sessions EJB 3.1
• Assurent les services métiers.
Olivier Caron
March 3, 2017
23/79
GIS 4
Architectures Logicielles
Les composants sessions EJB 3.1
• Assurent les services métiers.
• Doivent disposer d’une interface métier (décrite par une interface
Java)
Olivier Caron
March 3, 2017
23/79
GIS 4
Architectures Logicielles
Les composants sessions EJB 3.1
• Assurent les services métiers.
• Doivent disposer d’une interface métier (décrite par une interface
Java)
• On distingue :
Olivier Caron
March 3, 2017
23/79
GIS 4
Architectures Logicielles
Les composants sessions EJB 3.1
• Assurent les services métiers.
• Doivent disposer d’une interface métier (décrite par une interface
Java)
• On distingue :
• les composants sessions avec ou sans état transactionnel (Stateful,
Stateless)
Olivier Caron
March 3, 2017
23/79
GIS 4
Architectures Logicielles
Les composants sessions EJB 3.1
• Assurent les services métiers.
• Doivent disposer d’une interface métier (décrite par une interface
Java)
• On distingue :
• les composants sessions avec ou sans état transactionnel (Stateful,
Stateless)
• Les composants accessibles à distance et/ou localement.
Olivier Caron
March 3, 2017
23/79
GIS 4
Architectures Logicielles
Accès aux composants sessions
• Une application JEE (.ear) ne peut être déployée que sur un seul
serveur
Olivier Caron
March 3, 2017
24/79
GIS 4
Architectures Logicielles
Accès aux composants sessions
• Une application JEE (.ear) ne peut être déployée que sur un seul
serveur
• Une application peut communiquer avec d’autres applications situées
sur le même serveur ou pas
Olivier Caron
March 3, 2017
24/79
GIS 4
Architectures Logicielles
Accès aux composants sessions
• Une application JEE (.ear) ne peut être déployée que sur un seul
serveur
• Une application peut communiquer avec d’autres applications situées
sur le même serveur ou pas
• On distingue (pour des raisons de performances) :
Olivier Caron
March 3, 2017
24/79
GIS 4
Architectures Logicielles
Accès aux composants sessions
• Une application JEE (.ear) ne peut être déployée que sur un seul
serveur
• Une application peut communiquer avec d’autres applications situées
sur le même serveur ou pas
• On distingue (pour des raisons de performances) :
• Les accès locaux : composants session EJB ou Web situés dans une
même application
Olivier Caron
March 3, 2017
24/79
GIS 4
Architectures Logicielles
Accès aux composants sessions
• Une application JEE (.ear) ne peut être déployée que sur un seul
serveur
• Une application peut communiquer avec d’autres applications situées
sur le même serveur ou pas
• On distingue (pour des raisons de performances) :
• Les accès locaux : composants session EJB ou Web situés dans une
même application
• Les accès distants : composants sessions entre plusieurs applications
(protocole RMI/IIOP)
Olivier Caron
March 3, 2017
24/79
GIS 4
Architectures Logicielles
Accès distants ou locaux
Serveur J2EE
Serveur J2EE
appli 2
appli 1
accès local
appli 3
accès distant
appli cliente
Olivier Caron
March 3, 2017
25/79
GIS 4
Architectures Logicielles
Exemple de composant session sans état (1/3)
package ocaron . exempleSession ;
import j a v a x . e j b . S t a t e l e s s ;
@Stateless
public class C a l c u l S a l a i r e B e a n
implements CalculSalaireRemote , C a l c u l S a l a i r e L o c a l {
public C a l c u l S a l a i r e B e a n ( ) {}
public double g e t S a l a i r e ( i n t nbreHeures ) {
r e t u r n nbreHeures ∗ t a u x H o r a i r e ;
}
}
Olivier Caron
March 3, 2017
26/79
GIS 4
Architectures Logicielles
Exemple de composant session sans état (2/3)
package ocaron . exempleSession ;
public i n t e r f a c e C a l c u l S a l a i r e {
public f i n a l s t a t i c double t a u x H o r a i r e = 8.03 ;
public double g e t S a l a i r e ( i n t nbreHeures ) ;
}
Olivier Caron
March 3, 2017
27/79
GIS 4
Architectures Logicielles
Exemple de composant session sans état (3/3)
package ocaron . exempleSession ;
import j a v a x . e j b . Remote ;
@Remote public i n t e r f a c e Ca lc ul Sa la ire Re mo te
extends C a l c u l S a l a i r e {}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
package ocaron . exempleSession ;
import j a v a x . e j b . L o c a l ;
@Local public i n t e r f a c e C a l c u l S a l a i r e L o c a l
extends C a l c u l S a l a i r e {}
Ce composant est accessible à distante et de manière locale avec les
mêmes fonctionnalités (même interface java).
Olivier Caron
March 3, 2017
28/79
GIS 4
Architectures Logicielles
Composant session : programmation du bean
• C’est une classe java pure : elle n’hérite pas d’une quelconque
classe du standard Java JEE.
Olivier Caron
March 3, 2017
29/79
GIS 4
Architectures Logicielles
Composant session : programmation du bean
• C’est une classe java pure : elle n’hérite pas d’une quelconque
classe du standard Java JEE.
• Doit disposer d’une fonction constructeur sans paramètre
Olivier Caron
March 3, 2017
29/79
GIS 4
Architectures Logicielles
Composant session : programmation du bean
• C’est une classe java pure : elle n’hérite pas d’une quelconque
classe du standard Java JEE.
• Doit disposer d’une fonction constructeur sans paramètre
• Convention de nommage : le nom de la classe termine par ”Bean”,
”Impl”, ”Implementation” ou ”EJB”.
Olivier Caron
March 3, 2017
29/79
GIS 4
Architectures Logicielles
Composant session : programmation du bean
• C’est une classe java pure : elle n’hérite pas d’une quelconque
classe du standard Java JEE.
• Doit disposer d’une fonction constructeur sans paramètre
• Convention de nommage : le nom de la classe termine par ”Bean”,
”Impl”, ”Implementation” ou ”EJB”.
• Cette classe est annotée soit par :
@Stateless ou @Stateful.
Olivier Caron
March 3, 2017
29/79
GIS 4
Architectures Logicielles
Composant session : programmation du bean
• C’est une classe java pure : elle n’hérite pas d’une quelconque
classe du standard Java JEE.
• Doit disposer d’une fonction constructeur sans paramètre
• Convention de nommage : le nom de la classe termine par ”Bean”,
”Impl”, ”Implementation” ou ”EJB”.
• Cette classe est annotée soit par :
@Stateless ou @Stateful.
• Le nom du composant est le nom de la classe
Olivier Caron
March 3, 2017
29/79
GIS 4
Architectures Logicielles
Composant session : programmation du bean
• C’est une classe java pure : elle n’hérite pas d’une quelconque
classe du standard Java JEE.
• Doit disposer d’une fonction constructeur sans paramètre
• Convention de nommage : le nom de la classe termine par ”Bean”,
”Impl”, ”Implementation” ou ”EJB”.
• Cette classe est annotée soit par :
@Stateless ou @Stateful.
• Le nom du composant est le nom de la classe
• Possibilité d’attribuer un nom différent par l’attribut name de
l’annotation @Stateless ou @Stateful.
Olivier Caron
March 3, 2017
29/79
GIS 4
Architectures Logicielles
Composant session : les interfaces métiers
• Si le bean n’implémente qu’une seule interface, alors elle est
considérée comme l’interface métier locale.
Olivier Caron
March 3, 2017
30/79
GIS 4
Architectures Logicielles
Composant session : les interfaces métiers
• Si le bean n’implémente qu’une seule interface, alors elle est
considérée comme l’interface métier locale.
• Si le bean n’implémente aucune interface, la classe joue le rôle
d’interface locale et expose toutes ses méthodes publiques.
Olivier Caron
March 3, 2017
30/79
GIS 4
Architectures Logicielles
Composant session : les interfaces métiers
• Si le bean n’implémente qu’une seule interface, alors elle est
considérée comme l’interface métier locale.
• Si le bean n’implémente aucune interface, la classe joue le rôle
d’interface locale et expose toutes ses méthodes publiques.
• Si le bean implémente plusieurs interfaces, alors chacune des
interfaces doit être explicitement marquée par les annotations
Remote ou Local.
Olivier Caron
March 3, 2017
30/79
GIS 4
Architectures Logicielles
Le déploiement des EJB sessions
1
Réception du fichier ear
Olivier Caron
March 3, 2017
31/79
GIS 4
Architectures Logicielles
Le déploiement des EJB sessions
1
Réception du fichier ear
2
Analyse du fichier application.xml
Olivier Caron
March 3, 2017
31/79
GIS 4
Architectures Logicielles
Le déploiement des EJB sessions
1
Réception du fichier ear
2
Analyse du fichier application.xml
3
Analyse du fichier archive jar des composants
Olivier Caron
March 3, 2017
31/79
GIS 4
Architectures Logicielles
Le déploiement des EJB sessions
1
Réception du fichier ear
2
Analyse du fichier application.xml
3
Analyse du fichier archive jar des composants
4
Inscription des interfaces métiers au serveur de noms (une fabrique
complètement générée coté serveur)
Olivier Caron
March 3, 2017
31/79
GIS 4
Architectures Logicielles
Le serveur de noms JEE
• Conforme à la norme JNDI (Java Naming Directory Interface) :
Olivier Caron
March 3, 2017
32/79
GIS 4
Architectures Logicielles
Le serveur de noms JEE
• Conforme à la norme JNDI (Java Naming Directory Interface) :
• Principe similaire à JDBC
Olivier Caron
March 3, 2017
32/79
GIS 4
Architectures Logicielles
Le serveur de noms JEE
• Conforme à la norme JNDI (Java Naming Directory Interface) :
• Principe similaire à JDBC
• Définit une interface (API) unifiée pour gérer un service de noms
Olivier Caron
March 3, 2017
32/79
GIS 4
Architectures Logicielles
Le serveur de noms JEE
• Conforme à la norme JNDI (Java Naming Directory Interface) :
• Principe similaire à JDBC
• Définit une interface (API) unifiée pour gérer un service de noms
• De multiples implémentations (LDAP, DNS, etc)
Olivier Caron
March 3, 2017
32/79
GIS 4
Architectures Logicielles
Le serveur de noms JEE
• Conforme à la norme JNDI (Java Naming Directory Interface) :
• Principe similaire à JDBC
• Définit une interface (API) unifiée pour gérer un service de noms
• De multiples implémentations (LDAP, DNS, etc)
• Autorise une structuration arborescente des services,
exemple :chemin/sous-chemin/sous-sous-chemin/nom
Olivier Caron
March 3, 2017
32/79
GIS 4
Architectures Logicielles
Spécifications JNDI pour composants EJB 3.1
• La spécification EJB 3.1 comporte un nommage standardisé pour
accéder aux composants sessions.
Olivier Caron
March 3, 2017
33/79
GIS 4
Architectures Logicielles
Spécifications JNDI pour composants EJB 3.1
• La spécification EJB 3.1 comporte un nommage standardisé pour
accéder aux composants sessions.
• Plusieurs noms sont possibles et dépendent de la ”distance” du
composant.
Olivier Caron
March 3, 2017
33/79
GIS 4
Architectures Logicielles
Spécifications JNDI pour composants EJB 3.1
• La spécification EJB 3.1 comporte un nommage standardisé pour
accéder aux composants sessions.
• Plusieurs noms sont possibles et dépendent de la ”distance” du
composant.
• Trois espaces de noms sont possibles : Global, Application
et Module
Olivier Caron
March 3, 2017
33/79
GIS 4
Architectures Logicielles
JNDI : espace de noms standard Global
• L’espace de noms global permet d’accèder à des composants
d’une autre application JEE.
• La syntaxe des noms JNDI :
j a v a : g l o b a l [/ < app−name>]/< module−name>/<bean−name>[!< i n t e r f a c e −FQN>]
app-name
module-name
bean-name
interface-FQN
le nom du fichier application (hors suffixe ”.ear”)
le nom du module du composant session (hors suffixe ”.jar”)
le nom du composant session (nom de la classe)
nom complet de l’interface du composant
• Exemple :
monAppli / mesSessions / C a l c u l S a l a i r e B e a n ! ocaron . exempleSession . CalculSalaireBeanRemote
• Si le composant ne dispose que d’une seule interface ou aucune, le
serveur doit également enregistrer le nom JNDI suivant :
j a v a : g l o b a l [/ < app−name>]/< module−name>/<bean−name>
Olivier Caron
March 3, 2017
34/79
GIS 4
Architectures Logicielles
JNDI : espace de noms standard App et Module
• L’espace de noms app permet d’accèder à des composants de la
même application JEE.
• La syntaxe des noms JNDI :
j a v a : app/< module−name>/<bean−name>[!< i n t e r f a c e −FQN>]
• L’espace de noms module permet d’accèder à des composants
issus du même module.
• La syntaxe des noms JNDI :
j a v a : module/<bean−name>[!< i n t e r f a c e −FQN>]
Olivier Caron
March 3, 2017
35/79
GIS 4
Architectures Logicielles
WildFly 9 et EJB 3.1
• Programmation: WildFly 9 est compatible avec la norme EJB 3.1.
• JNDI : WildFly a sa propre convention de nommage pour l’accès aux
composants distants à partir d’une application Java cliente.
• L’accès distant aux composants est sécurisé : nécessite de fournir un
utilisateur (login/password) référencé par le serveur WildFly.
• Conventions de nommage WildFly pour des composants Stateless :
e j b:<app−name><
/ module−name><
/ d i s t i n c t −name><
/ bean−name><
! i n t e r f a c e−FQN>
• Conventions de nommage WildFly pour des composants Stateful :
e j b:<app−name><
/ module−name><
/ d i s t i n c t −name><
/ bean−name><
! i n t e r f a c e−FQN>?s t a t e f u l
• distinct name est un nom spécifique qui peut être spécifié lors
du déploiement, chaı̂ne vide si n’existe pas.
• L’interface ne peut être que l’interface annotée par @Remote
Ex : e j b : monAppli / mesSessions / / C a l c u l S a l a i r e B e a n ! ocaron . exempleSession . CalculSalaireBeanRemote
Olivier Caron
March 3, 2017
36/79
GIS 4
Architectures Logicielles
Un programme client
import j a v a x . naming . I n i t i a l C o n t e x t ;
import j a v a x . naming . NamingException ;
import ocaron . exempleSession . Ca lc u l S a l a i r e R e m o t e ;
public class MainSession {
public s t a t i c void main ( S t r i n g [ ] args ) {
S t r i n g adresseJNDI= ” e j b : monAppli / mesSessions / / C a l c u l S a l a i r e B e a n ! ” +
” ocaron . exempleSession . CalculSalaireBeanRemote ” ;
try {
I n i t i a l C o n t e x t c t x = new I n i t i a l C o n t e x t ( ) ;
O b j e c t o b j = c t x . lookup ( adresseJNDI ) ;
Ca lc ul Sa lai re Re mo te s a l a i r e = ( C a l c u l S a l a i r e R e m o t e ) o b j ;
System . o u t . p r i n t l n ( ” s a l a i r e : ” +
s a l a i r e . g e t S a l a i r e ( I n t e g e r . p a r s e I n t ( args [ 0 ] ) ) )
;
} catch ( NamingException e1 ) {
System . e r r . p r i n t l n ( ” e r r e u r , acces au s e r v e u r de noms ” ) ;
}}}
Olivier Caron
March 3, 2017
37/79
GIS 4
Architectures Logicielles
Exécution avec plate-forme WildFly
• Code précédent portable (à l’exception de l’adresse externalisable)
• Le classpath doit contenir les classes réseaux WildFly pour accéder
au serveur de noms JNDI WildFly (JBoss)
• librairie JNDI, fichier jndi.properties :
java.naming.factory.url.pkgs=org.jboss.ejb.client.naming
• Localisation serveur, mode d’accès, sécurité définies dans fichier
jboss-ejb-client.properties :
endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 8080
remote.connection.default.connect.options.org.xnio.Options.SASL POLICY NOANONYMOUS=false
remote.connection.default.username=jeeadm
remote.connection.default.password=secret-Gis4
Olivier Caron
March 3, 2017
38/79
GIS 4
Architectures Logicielles
Traitement des erreurs
• L’exécution des méthodes des interfaces métiers peuvent provoquer
des erreurs.
Olivier Caron
March 3, 2017
39/79
GIS 4
Architectures Logicielles
Traitement des erreurs
• L’exécution des méthodes des interfaces métiers peuvent provoquer
des erreurs.
• Le conteneur EJB propage ces erreurs par l’exception standard
javax.ejb.EJBException
Olivier Caron
March 3, 2017
39/79
GIS 4
Architectures Logicielles
Cycle de vie des composants session sans état (1/2)
• Un composant Stateless n’est associé qu’à un client que pour le
temps de l’exécution d’une méthode
Olivier Caron
March 3, 2017
40/79
GIS 4
Architectures Logicielles
Cycle de vie des composants session sans état (1/2)
• Un composant Stateless n’est associé qu’à un client que pour le
temps de l’exécution d’une méthode
• Il peut donc être associé successivement à plusieurs clients
Olivier Caron
March 3, 2017
40/79
GIS 4
Architectures Logicielles
Cycle de vie des composants session sans état (1/2)
• Un composant Stateless n’est associé qu’à un client que pour le
temps de l’exécution d’une méthode
• Il peut donc être associé successivement à plusieurs clients
• Il peut être supprimé par le conteneur en cas de montée en charge
par exemple.
Olivier Caron
March 3, 2017
40/79
GIS 4
Architectures Logicielles
Cycle de vie des composants session sans état (1/2)
• Un composant Stateless n’est associé qu’à un client que pour le
temps de l’exécution d’une méthode
• Il peut donc être associé successivement à plusieurs clients
• Il peut être supprimé par le conteneur en cas de montée en charge
par exemple.
• Possibilité de gérer le cycle de vie par les méthodes ”callbacks”
Olivier Caron
March 3, 2017
40/79
GIS 4
Architectures Logicielles
Cycle de vie des composants session sans état (2/2)
Inexistant
Instanciation : @PostConstruct
@PreDestroy
Prêt
Appel d'une méthode métier
Olivier Caron
March 3, 2017
41/79
GIS 4
Architectures Logicielles
Les méthodes callbacks
• les méthodes doivent respecter la signature suivante :
void nomMethode() ;
Olivier Caron
March 3, 2017
42/79
GIS 4
Architectures Logicielles
Les méthodes callbacks
• les méthodes doivent respecter la signature suivante :
void nomMethode() ;
• Utilisation d’annotations Java.
Olivier Caron
March 3, 2017
42/79
GIS 4
Architectures Logicielles
Les méthodes callbacks
• les méthodes doivent respecter la signature suivante :
void nomMethode() ;
• Utilisation d’annotations Java.
• méthodes callbacks applicables aux Stateless :
Olivier Caron
March 3, 2017
42/79
GIS 4
Architectures Logicielles
Les méthodes callbacks
• les méthodes doivent respecter la signature suivante :
void nomMethode() ;
• Utilisation d’annotations Java.
• méthodes callbacks applicables aux Stateless :
• javax.annotation.PostConstruct : automatiquement
appelé après initialisation du composant.
Olivier Caron
March 3, 2017
42/79
GIS 4
Architectures Logicielles
Les méthodes callbacks
• les méthodes doivent respecter la signature suivante :
void nomMethode() ;
• Utilisation d’annotations Java.
• méthodes callbacks applicables aux Stateless :
• javax.annotation.PostConstruct : automatiquement
appelé après initialisation du composant.
• javax.annotation.PreDestroy : automatiquement appelé
avant suppression du composant.
Olivier Caron
March 3, 2017
42/79
GIS 4
Architectures Logicielles
Les composants session avec état
• annotés par javax.ejb.Stateful
Olivier Caron
March 3, 2017
43/79
GIS 4
Architectures Logicielles
Les composants session avec état
• annotés par javax.ejb.Stateful
• après la première invocation de méthode, le composant est associé
au client.
Olivier Caron
March 3, 2017
43/79
GIS 4
Architectures Logicielles
Les composants session avec état
• annotés par javax.ejb.Stateful
• après la première invocation de méthode, le composant est associé
au client.
• Possibilité d’utiliser des variables d’instances entre deux appels de
méthodes.
Olivier Caron
March 3, 2017
43/79
GIS 4
Architectures Logicielles
Les composants session avec état
• annotés par javax.ejb.Stateful
• après la première invocation de méthode, le composant est associé
au client.
• Possibilité d’utiliser des variables d’instances entre deux appels de
méthodes.
• Le conteneur peut décider de mettre le composant en mémoire
secondaire (montée en charge) : mécanisme de passivation et
activation.
Olivier Caron
March 3, 2017
43/79
GIS 4
Architectures Logicielles
Les composants session avec état
• annotés par javax.ejb.Stateful
• après la première invocation de méthode, le composant est associé
au client.
• Possibilité d’utiliser des variables d’instances entre deux appels de
méthodes.
• Le conteneur peut décider de mettre le composant en mémoire
secondaire (montée en charge) : mécanisme de passivation et
activation.
• Une méthode annotée par javax.ejb.Remove notifie le
conteneur que le client n’a plus besoin du bean.
Olivier Caron
March 3, 2017
43/79
GIS 4
Architectures Logicielles
Cycle de vie des composants session avec état
Inexistant
Instanciation :
@PostConstruct
@PreDestroy
En cache
@PrePassivate
Prêt
@PostActivate
Appel d'une méthode métier
Olivier Caron
March 3, 2017
44/79
GIS 4
Architectures Logicielles
Les méthodes callbacks applicables aux composants Stateful
• javax.annotation.PostConstruct et
javax.annotation.PreDestroy
Olivier Caron
March 3, 2017
45/79
GIS 4
Architectures Logicielles
Les méthodes callbacks applicables aux composants Stateful
• javax.annotation.PostConstruct et
javax.annotation.PreDestroy
• javax.ejb.PrePassivate : méthode automatiquement
appelée avant la passivation du bean (charge mémoire)
Olivier Caron
March 3, 2017
45/79
GIS 4
Architectures Logicielles
Les méthodes callbacks applicables aux composants Stateful
• javax.annotation.PostConstruct et
javax.annotation.PreDestroy
• javax.ejb.PrePassivate : méthode automatiquement
appelée avant la passivation du bean (charge mémoire)
• javax.ejb.PostActivate : méthode automatiquement
appelée après la restauration du bean
Olivier Caron
March 3, 2017
45/79
GIS 4
Architectures Logicielles
Exemple d’un composant Stateful (1/2)
package ocaron . e x e m p l e S t a t e f u l ;
import
import
import
import
import
import
javax . ejb . S t a t e f u l ;
javax . annotation . PostConstruct ;
j a v a x . a n n o t a t i o n . PreDestroy ;
j a v a x . e j b . P r e P as s iv a te ;
javax . ejb . PostActivate ;
j a v a x . e j b . Remove ;
@Stateful public class SalaireBean
implements S a l a i r e I n t e r f a c e R e m o t e , S a l a i r e I n t e r f a c e L o c a l {
p r i v a t e double t a u x H o r a i r e =8.03 ;
public SalaireBean ( ) {}
public void s e t T a u x H o r a i r e ( double t a u x ) {
this . tauxHoraire=taux ;
}
Olivier Caron
March 3, 2017
46/79
GIS 4
Architectures Logicielles
Exemple d’un composant Stateful (2/2)
public double g e t T a u xH or a ir e ( ) { r e t u r n t h i s . t a u x H o r a i r e ; }
public double g e t S a l a i r e ( i n t nbreHeures ) {
r e t u r n t h i s . g e t T a ux Ho r ai r e ( ) ∗ nbreHeures ;
}
@PostActivate public void p o s t A c t i v a t e ( ) {
System . o u t . p r i n t l n ( ” P o s t A c t i v a t e . . . ” ) ; }
@PrePassivate public void p r e P a s s i v a t e ( ) {
System . o u t . p r i n t l n ( ” Pr e P as s iv a te . . . ” ) ; }
@PostConstruct public void p o s t C o n s t r u c t ( ) {
System . o u t . p r i n t l n ( ” P o s t C o n s t r u c t . . . ” ) ; }
@PreDestroy public void p r e D e st r o y ( ) {
System . o u t . p r i n t l n ( ” PreDestroy . . . ” ) ; }
@Remove public void remove ( ) {
System . o u t . p r i n t l n ( ” Remove . . . ” ) ; }
}
Olivier Caron
March 3, 2017
47/79
GIS 4
Architectures Logicielles
Déploiement : la sécurité
• Notion de rôle (ou profil d’utilisation)
Olivier Caron
March 3, 2017
48/79
GIS 4
Architectures Logicielles
Déploiement : la sécurité
• Notion de rôle (ou profil d’utilisation)
• Pour chaque rôle, il faut préciser la ou les méthodes utilisables.
Olivier Caron
March 3, 2017
48/79
GIS 4
Architectures Logicielles
Déploiement : la sécurité
• Notion de rôle (ou profil d’utilisation)
• Pour chaque rôle, il faut préciser la ou les méthodes utilisables.
• Des utilisateurs (compte et mot de passe) peuvent être liés à
plusieurs rôles
Olivier Caron
March 3, 2017
48/79
GIS 4
Architectures Logicielles
Déploiement : la sécurité
• Notion de rôle (ou profil d’utilisation)
• Pour chaque rôle, il faut préciser la ou les méthodes utilisables.
• Des utilisateurs (compte et mot de passe) peuvent être liés à
plusieurs rôles
• Le descripteur de déploiement ou annotations java incluent les
informations liées à la sécurité
Olivier Caron
March 3, 2017
48/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (1/4)
• Egalement un service déclaratif (descripteur de déploiement), pas de
code Java à produire
Olivier Caron
March 3, 2017
49/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (1/4)
• Egalement un service déclaratif (descripteur de déploiement), pas de
code Java à produire
• Assimiler le fonctionnement des transactions pour les décrire.
Olivier Caron
March 3, 2017
49/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (1/4)
• Egalement un service déclaratif (descripteur de déploiement), pas de
code Java à produire
• Assimiler le fonctionnement des transactions pour les décrire.
• Les propriétés ACID des transactions :
Olivier Caron
March 3, 2017
49/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (1/4)
• Egalement un service déclaratif (descripteur de déploiement), pas de
code Java à produire
• Assimiler le fonctionnement des transactions pour les décrire.
• Les propriétés ACID des transactions :
• Atomique : les opérations du même ensemble doivent s’exécuter ou
échouer de maniére globale.
Olivier Caron
March 3, 2017
49/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (1/4)
• Egalement un service déclaratif (descripteur de déploiement), pas de
code Java à produire
• Assimiler le fonctionnement des transactions pour les décrire.
• Les propriétés ACID des transactions :
• Atomique : les opérations du même ensemble doivent s’exécuter ou
échouer de maniére globale.
• Cohérent : Avant et après une transaction (réussie ou pas), l’état de la
base doit être cohérente.
Olivier Caron
March 3, 2017
49/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (1/4)
• Egalement un service déclaratif (descripteur de déploiement), pas de
code Java à produire
• Assimiler le fonctionnement des transactions pour les décrire.
• Les propriétés ACID des transactions :
• Atomique : les opérations du même ensemble doivent s’exécuter ou
échouer de maniére globale.
• Cohérent : Avant et après une transaction (réussie ou pas), l’état de la
base doit être cohérente.
• Isolé : Le programmeur n’a pas à se soucier des autres activités du
système.
Olivier Caron
March 3, 2017
49/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (1/4)
• Egalement un service déclaratif (descripteur de déploiement), pas de
code Java à produire
• Assimiler le fonctionnement des transactions pour les décrire.
• Les propriétés ACID des transactions :
• Atomique : les opérations du même ensemble doivent s’exécuter ou
échouer de maniére globale.
• Cohérent : Avant et après une transaction (réussie ou pas), l’état de la
base doit être cohérente.
• Isolé : Le programmeur n’a pas à se soucier des autres activités du
système.
• Durable : lors d’une transaction réussie, les résultats sont reportés
dans la base de données.
Olivier Caron
March 3, 2017
49/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (2/4)
• Six options (applicable à chaque méthode) :
Olivier Caron
March 3, 2017
50/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (2/4)
• Six options (applicable à chaque méthode) :
• NotSupported : non pris en charge.
La spécification EJB laisse au conteneur le choix de l’accès aux
ressources en cas de transaction non définie.
Olivier Caron
March 3, 2017
50/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (2/4)
• Six options (applicable à chaque méthode) :
• NotSupported : non pris en charge.
La spécification EJB laisse au conteneur le choix de l’accès aux
ressources en cas de transaction non définie.
• Suppports : prend en charge.
Si il existe un contexte de transaction, cette option est équivalente à
Required, sinon Not Supported
Olivier Caron
March 3, 2017
50/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (2/4)
• Six options (applicable à chaque méthode) :
• NotSupported : non pris en charge.
La spécification EJB laisse au conteneur le choix de l’accès aux
ressources en cas de transaction non définie.
• Suppports : prend en charge.
Si il existe un contexte de transaction, cette option est équivalente à
Required, sinon Not Supported
• RequiresNew : nouvelle transaction requise.
Création d’une nouvelle transaction. Imbrication possible de
transactions.
Olivier Caron
March 3, 2017
50/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (3/4)
• Required : transaction requise.
Si pas de transaction courante, une transaction est créée.
Olivier Caron
March 3, 2017
51/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (3/4)
• Required : transaction requise.
Si pas de transaction courante, une transaction est créée.
• Mandatory : obligatoire.
Si pas de transaction courante, une exception intervient.
Olivier Caron
March 3, 2017
51/79
GIS 4
Architectures Logicielles
Déploiement : les transactions (3/4)
• Required : transaction requise.
Si pas de transaction courante, une transaction est créée.
• Mandatory : obligatoire.
Si pas de transaction courante, une exception intervient.
• Never : jamais.
Si il exixte une transaction courante, une exception intervient.
Olivier Caron
March 3, 2017
51/79
GIS 4
Architectures Logicielles
Déploiement : exemple extrait transactions
import j a v a x . e j b . S t a t e f u l ;
import j a v a x . e j b . TransactionManagement ;
import j a v a x . e j b . T r a n s a c t i o n A t t r i b u t e ;
import j a v a x . e j b . TransactionManagementType ;
import j a v a x . e j b . T r a n s a c t i o n A t t r i b u t e T y p e ;
@Stateful
@TransactionManagement ( v a l u e =TransactionManagementType . CONTAINER)
public class SalaireBean
implements S a l a i r e I n t e r f a c e R e m o t e , S a l a i r e I n t e r f a c e L o c a l {
...
@ T r a n s a c t i o n A t t r i b u t e ( v a l u e = T r a n s a c t i o n A t t r i b u t e T y p e . REQUIRED)
public void s e t T a u x H o r a i r e ( double t a u x ) { t h i s . t a u x H o r a i r e = t a u x ; }
@ T r a n s a c t i o n A t t r i b u t e ( v a l u e = T r a n s a c t i o n A t t r i b u t e T y p e . REQUIRES NEW)
public double g e t T a u xH or a ir e ( ) { r e t u r n t h i s . t a u x H o r a i r e ; }
}
Olivier Caron
March 3, 2017
52/79
GIS 4
Architectures Logicielles
Les composants EJB entité
• EJB entité et JPA ne font qu’un !
Olivier Caron
March 3, 2017
53/79
GIS 4
Architectures Logicielles
Les composants EJB entité
• EJB entité et JPA ne font qu’un !
• Programmer des composants entités :
Olivier Caron
March 3, 2017
53/79
GIS 4
Architectures Logicielles
Les composants EJB entité
• EJB entité et JPA ne font qu’un !
• Programmer des composants entités :
• voir cours GIS 4 - S7 - SIO
Olivier Caron
March 3, 2017
53/79
GIS 4
Architectures Logicielles
Les composants EJB entité
• EJB entité et JPA ne font qu’un !
• Programmer des composants entités :
• voir cours GIS 4 - S7 - SIO
• docs.oracle.com/javaee/7/tutorial/doc
Olivier Caron
March 3, 2017
53/79
GIS 4
Architectures Logicielles
Les composants EJB entité
• EJB entité et JPA ne font qu’un !
• Programmer des composants entités :
• voir cours GIS 4 - S7 - SIO
• docs.oracle.com/javaee/7/tutorial/doc
• Différence entre un programme JPA autonome et JEE : le conteneur
EJB :
Olivier Caron
March 3, 2017
53/79
GIS 4
Architectures Logicielles
Les composants EJB entité
• EJB entité et JPA ne font qu’un !
• Programmer des composants entités :
• voir cours GIS 4 - S7 - SIO
• docs.oracle.com/javaee/7/tutorial/doc
• Différence entre un programme JPA autonome et JEE : le conteneur
EJB :
• Se charge des transactions
Olivier Caron
March 3, 2017
53/79
GIS 4
Architectures Logicielles
Les composants EJB entité
• EJB entité et JPA ne font qu’un !
• Programmer des composants entités :
• voir cours GIS 4 - S7 - SIO
• docs.oracle.com/javaee/7/tutorial/doc
• Différence entre un programme JPA autonome et JEE : le conteneur
EJB :
• Se charge des transactions
• Se charge du gestionnaire d’entités (instanciation)
Olivier Caron
March 3, 2017
53/79
GIS 4
Architectures Logicielles
Les composants EJB entité
• EJB entité et JPA ne font qu’un !
• Programmer des composants entités :
• voir cours GIS 4 - S7 - SIO
• docs.oracle.com/javaee/7/tutorial/doc
• Différence entre un programme JPA autonome et JEE : le conteneur
EJB :
• Se charge des transactions
• Se charge du gestionnaire d’entités (instanciation)
• Attention au cycle de vie des composants selon que l’objet ”quitte” ou
pas la sphère du conteneur.
Olivier Caron
March 3, 2017
53/79
GIS 4
Architectures Logicielles
Cycle de vie des composants entités (1/3)
Instanciation
@PostRemove
Existe
détaché
Supprimé
@PrePersist,
Suppression
@PreRemove
@PostPersist
Managé
recherche objet existant
Mise à jour
@PreUpdate,@PostUpdate
Olivier Caron
March 3, 2017
@PostLoad
54/79
GIS 4
Architectures Logicielles
Cycle de vie des composants entités (2/3)
• Possibilité de spécifier des méthodes ”callbacks” liées au cycle de vie
des composants entités :
Olivier Caron
March 3, 2017
55/79
GIS 4
Architectures Logicielles
Cycle de vie des composants entités (2/3)
• Possibilité de spécifier des méthodes ”callbacks” liées au cycle de vie
des composants entités :
• javax.persistence.PrePersist : la méthode annotée
est invoquée juste avant la création de l’entité dans la base de
donnée.
Olivier Caron
March 3, 2017
55/79
GIS 4
Architectures Logicielles
Cycle de vie des composants entités (2/3)
• Possibilité de spécifier des méthodes ”callbacks” liées au cycle de vie
des composants entités :
• javax.persistence.PrePersist : la méthode annotée
est invoquée juste avant la création de l’entité dans la base de
donnée.
• javax.persistence.PostPersist : la méthode annotée
est invoquée juste après la création de l’entité dans la base de
donnée.
Olivier Caron
March 3, 2017
55/79
GIS 4
Architectures Logicielles
Cycle de vie des composants entités (2/3)
• Possibilité de spécifier des méthodes ”callbacks” liées au cycle de vie
des composants entités :
• javax.persistence.PrePersist : la méthode annotée
est invoquée juste avant la création de l’entité dans la base de
donnée.
• javax.persistence.PostPersist : la méthode annotée
est invoquée juste après la création de l’entité dans la base de
donnée.
• javax.persistence.PreRemove : la méthode annotée est
invoquée juste avant la destruction de l’entité dans la base de donnée.
Olivier Caron
March 3, 2017
55/79
GIS 4
Architectures Logicielles
Cycle de vie des composants entités (2/3)
• Possibilité de spécifier des méthodes ”callbacks” liées au cycle de vie
des composants entités :
• javax.persistence.PrePersist : la méthode annotée
est invoquée juste avant la création de l’entité dans la base de
donnée.
• javax.persistence.PostPersist : la méthode annotée
est invoquée juste après la création de l’entité dans la base de
donnée.
• javax.persistence.PreRemove : la méthode annotée est
invoquée juste avant la destruction de l’entité dans la base de donnée.
• javax.persistence.PostRemove : la méthode annotée
est invoquée juste après la destruction de l’entité dans la base de
donnée.
Olivier Caron
March 3, 2017
55/79
GIS 4
Architectures Logicielles
Cycle de vie des composants entités (3/3)
• javax.persistence.PreUpdate : la méthode annotée est
invoquée juste avant la modification de l’entité dans la base de
donnée.
Olivier Caron
March 3, 2017
56/79
GIS 4
Architectures Logicielles
Cycle de vie des composants entités (3/3)
• javax.persistence.PreUpdate : la méthode annotée est
invoquée juste avant la modification de l’entité dans la base de
donnée.
• javax.persistence.PostUpdate : la méthode annotée
est invoquée juste après la modification de l’entité dans la base de
donnée.
Olivier Caron
March 3, 2017
56/79
GIS 4
Architectures Logicielles
Cycle de vie des composants entités (3/3)
• javax.persistence.PreUpdate : la méthode annotée est
invoquée juste avant la modification de l’entité dans la base de
donnée.
• javax.persistence.PostUpdate : la méthode annotée
est invoquée juste après la modification de l’entité dans la base de
donnée.
• PostLoad : la méthode annotée est invoquée juste après le
chargement des données de la base dans l’entité associée.
Olivier Caron
March 3, 2017
56/79
GIS 4
Architectures Logicielles
Illustration : application banque (1/2)
Figure: La modélisation UML des données
• Sources Java dans ocaron.plil.fr
Olivier Caron
March 3, 2017
57/79
GIS 4
Architectures Logicielles
Illustration : application banque (1/2)
Figure: La modélisation UML des données
• Sources Java dans ocaron.plil.fr
• modélisation UML non directement exploitable pour EJB
Olivier Caron
March 3, 2017
57/79
GIS 4
Architectures Logicielles
Illustration : application banque (1/2)
Figure: La modélisation UML des données
• Sources Java dans ocaron.plil.fr
• modélisation UML non directement exploitable pour EJB
• Uniquement associations binaires
Olivier Caron
March 3, 2017
57/79
GIS 4
Architectures Logicielles
Illustration : application banque (1/2)
Figure: La modélisation UML des données
• Sources Java dans ocaron.plil.fr
• modélisation UML non directement exploitable pour EJB
• Uniquement associations binaires
• Pas de classes-associations (propriétés des associations)
Olivier Caron
March 3, 2017
57/79
GIS 4
Architectures Logicielles
Illustration : application banque (2/2)
Figure: La modélisation UML-EJB des données
• Ajout d’une entité
Olivier Caron
March 3, 2017
58/79
GIS 4
Architectures Logicielles
Illustration : application banque (2/2)
Figure: La modélisation UML-EJB des données
• Ajout d’une entité
• Choix d’un attribut id mais clé-composé possible
Olivier Caron
March 3, 2017
58/79
GIS 4
Architectures Logicielles
Archivage des composants entités
Fichier persistence.xml :
<p e r s i s t e n c e xmlns= ” h t t p : / / j a v a . sun . com / xml / ns / p e r s i s t e n c e ”
x m l n s : x s i = ” h t t p : / / www. w3 . org / 2 0 0 1 /XMLSchema−i n s t a n c e ”
mesEntites/
META-INF/
persistence.xml
ejb/
entites/
Compte.class
Action.class
LigneAction.class
jar cvf mesEntites.jar
mesEntites/*
x s i : s c h e m a L o c a t i o n = ” h t t p : / / j a v a . sun . com / xml / ns / p e r s i s t e n c e
h t t p : / / j a v a . sun . com / xml / ns / p e r s i s t e n c e / p e r s i s t e n c e 1 0 . xsd ”
version= ” 1 . 0 ”>
<p e r s i s t e n c e−u n i t name= ” appliBanque ”>
<j t a−data−source>
j a v a : j b o s s / datasources / PostgresDS
</ j t a−data−source>
<p r o p e r t i e s>
<p r o p e r t y name= ” h i b e r n a t e . hbm2ddl . auto ”
v a l u e = ” c r e a t e−drop ” />
</ p r o p e r t i e s>
</ p e r s i s t e n c e−u n i t>
</ p e r s i s t e n c e>
• Possibilité de définir plusieurs sources BD (spécifiées au niveau du
serveur)
• Définition d’une unité de persistance
Olivier Caron
March 3, 2017
59/79
GIS 4
Architectures Logicielles
Classe Compte
package e j b . e n t i t e s ;
import . . .
@Entity public class Compte implements S e r i a l i z a b l e {
...
@Id public i n t getNumero ( ) { r e t u r n numero ; }
public double getSolde ( ) { r e t u r n s o l d e ; }
public S t r i n g g e t T i t u l a i r e ( ) { r e t u r n t i t u l a i r e ; }
@OneToMany( mappedBy= ” p r o p r i e t a i r e ” )
public Set<L i g n e A c t i o n > g e t L i g n e s A c t i o n s ( ) { r e t u r n a c t i o n s ; }
/ / méthodes s e t
...
}
Olivier Caron
March 3, 2017
60/79
GIS 4
Architectures Logicielles
Classe Action
package e j b . e n t i t e s ;
import . . .
@Entity public class A c t i o n implements S e r i a l i z a b l e {
...
@Id public S t r i n g getNom ( ) { r e t u r n nom ; }
public double getTaux ( ) { r e t u r n t a u x ; }
/ / méthodes s e t
...
}
Olivier Caron
March 3, 2017
61/79
GIS 4
Architectures Logicielles
Classe LigneAction
package e j b . e n t i t e s ;
import . . .
@Entity public class L i g n e A c t i o n implements S e r i a l i z a b l e {
...
@Id
@GeneratedValue / / permet de géné r e r une v a l e u r de c l é
public i n t g e t I d ( ) { r e t u r n i d ; }
public i n t getNombre ( ) { r e t u r n nombre ; }
@ManyToOne public Compte g e t P r o p r i e t a i r e ( ) { . . . }
@ManyToOne public A c t i o n g e t A c t i o n ( ) { . . . }
/ / méthodes s e t
...
}
Olivier Caron
March 3, 2017
62/79
GIS 4
Architectures Logicielles
Définition du ou des services
• Services assuré par composants sessions
Olivier Caron
March 3, 2017
63/79
GIS 4
Architectures Logicielles
Définition du ou des services
• Services assuré par composants sessions
• Choix du type de session (Stateless, Stateful)
Olivier Caron
March 3, 2017
63/79
GIS 4
Architectures Logicielles
Définition du ou des services
• Services assuré par composants sessions
• Choix du type de session (Stateless, Stateful)
• Stateless : une méthode devient un programme (POO ?)
Olivier Caron
March 3, 2017
63/79
GIS 4
Architectures Logicielles
Définition du ou des services
• Services assuré par composants sessions
• Choix du type de session (Stateless, Stateful)
• Stateless : une méthode devient un programme (POO ?)
• Quelles sont les fonctions accessibles à distance ou localement ?
Olivier Caron
March 3, 2017
63/79
GIS 4
Architectures Logicielles
Définition du ou des services
• Services assuré par composants sessions
• Choix du type de session (Stateless, Stateful)
• Stateless : une méthode devient un programme (POO ?)
• Quelles sont les fonctions accessibles à distance ou localement ?
• Pour l’exemple : un seul service accessible à distance
Olivier Caron
March 3, 2017
63/79
GIS 4
Architectures Logicielles
L’interface distante (1/2)
package e j b . s e s s i o n s ;
import e j b . e n t i t e s . L i g n e A c t i o n ;
@javax . e j b . Remote
public i n t e r f a c e ServiceBanque {
public void addCompte ( i n t numeroCompte , S t r i n g n o m T i t u l a i r e ,
double s o ld e D ep a r t )
throws CompteDejaExistantException ;
public void addAction ( S t r i n g nomAction , double t a u x )
throws A c t i o n D e j a E x i s t a n t e E x c e p t i o n ;
public void c r e d i t e r C o m p t e ( i n t numeroCompte , double montant )
throws CompteInconnuException ;
public void debiterCompte ( i n t numeroCompte , double montant )
throws CompteInconnuException ;
Olivier Caron
March 3, 2017
64/79
GIS 4
Architectures Logicielles
L’interface distante (2/2)
public void v i r e m e n t V e r s ( i n t numCompteDebit , i n t numCompteCredit ,
double montant )
throws CompteInconnuException , ApprovisionnementException ;
public void a c h e t e A c t i o n s ( i n t numeroCompte , S t r i n g nomAction , i n t nb )
throws CompteInconnuException , A ct io n In c on n ue E x c e p t i o n ,
ApprovisionnementException ;
public void vendActions ( i n t numeroCompte , S t r i n g nomAction , i n t nb )
throws CompteInconnuException , A ct i on In c on n ue E x c e p t i o n ,
ApprovisionnementException ;
public j a v a . u t i l . Set<L i g n e A c t i o n > g e t A c t i o n s A c h e t e e s ( i n t numeroCompte )
throws CompteInconnuException ;
}
Olivier Caron
March 3, 2017
65/79
GIS 4
Architectures Logicielles
Exploitation des composants d’entités
• Les entités ne sont accessibles que dans un contexte transactionnel
(c’est le cas des composants sessions)
Olivier Caron
March 3, 2017
66/79
GIS 4
Architectures Logicielles
Exploitation des composants d’entités
• Les entités ne sont accessibles que dans un contexte transactionnel
(c’est le cas des composants sessions)
• Un gestionnaire d’entités permet de relier les objets Java aux objets
bases de données et de gérer leur cycle de vie.
Olivier Caron
March 3, 2017
66/79
GIS 4
Architectures Logicielles
Exploitation des composants d’entités
• Les entités ne sont accessibles que dans un contexte transactionnel
(c’est le cas des composants sessions)
• Un gestionnaire d’entités permet de relier les objets Java aux objets
bases de données et de gérer leur cycle de vie.
• Une instance de gestionnaire d’entités est associée avec un contexte
de persistance (persistence.xml) et donc une seule base.
Olivier Caron
March 3, 2017
66/79
GIS 4
Architectures Logicielles
Exploitation des composants d’entités
• Les entités ne sont accessibles que dans un contexte transactionnel
(c’est le cas des composants sessions)
• Un gestionnaire d’entités permet de relier les objets Java aux objets
bases de données et de gérer leur cycle de vie.
• Une instance de gestionnaire d’entités est associée avec un contexte
de persistance (persistence.xml) et donc une seule base.
• Une instance de gestionnaire d’entités peut gérer plusieurs EJB
entités.
@PersistenceContext(unitName="appliBanque")
protected EntityManager em;
Olivier Caron
March 3, 2017
66/79
GIS 4
Architectures Logicielles
Le composant session (1/3)
package e j b . s e s s i o n s ;
import . . .
@javax . e j b . S t a t e l e s s
public class ServiceBanqueBean implements ServiceBanque {
@PersistenceContext ( unitName= ” appliBanque ” )
protected EntityManager em ;
public ServiceBanqueBean ( ) { }
Olivier Caron
March 3, 2017
67/79
GIS 4
Architectures Logicielles
Le composant session (2/3)
public Set<L i g n e A c t i o n > g e t A c t i o n s A c h e t e e s ( i n t numeroCompte )
throws CompteInconnuException {
Compte c = t h i s . getCompte ( numeroCompte ) ;
return c . getLignesActions ( ) ;
}
p r i v a t e Compte getCompte ( i n t numeroCompte )
throws CompteInconnuException {
Compte c= ( Compte ) em. f i n d ( Compte . class , numeroCompte ) ;
i f ( c== n u l l ) throw new CompteInconnuException ( ) ;
return c ;
}
...
}
Olivier Caron
March 3, 2017
68/79
GIS 4
Architectures Logicielles
Le composant session (3/3)
public void addCompte ( i n t numeroCompte , S t r i n g n o m T i t u l a i r e ,
double s o ld e D ep a r t )
throws CompteDejaExistantException {
try {
t h i s . getCompte ( numeroCompte ) ;
throw new CompteDejaExistantException ( ) ;
} catch ( CompteInconnuException e ) {
Compte c=new Compte ( ) ;
c . setNumero ( numeroCompte ) ; c . s e t S o l d e ( s ol d e De p a r t ) ;
c . s e t T i t u l a i r e ( nomTitulaire ) ;
em. p e r s i s t ( c ) ;
}
}
/ / Par défaut: une méthode équivaut à une transaction
Olivier Caron
March 3, 2017
69/79
GIS 4
Architectures Logicielles
Utilisation du service
1
2
3
4
5
6
7
8
9
10
11
12
13
public s t a t i c void main ( S t r i n g [ ] args ) {
try {
I n i t i a l C o n t e x t c t x = new I n i t i a l C o n t e x t ( ) ;
System . o u t . p r i n t l n ( ” Acc ès au s e r v i c e d i s t a n t ” ) ;
O b j e c t o b j = c t x . lookup ( ” e j b : appliBanque / appliBanqueSessions / / ” +
” ServiceBanqueBean ! e j b . s e s s i o n s . ServiceBanque ” ) ;
ServiceBanque s e r v i c e = ( ServiceBanque ) o b j ;
System . o u t . p r i n t l n ( ” l e s a c t i o n s du compte no : 1 ” ) ;
for ( LigneAction l a : service . getActionsAchetees ( 1 ) )
System . o u t . p r i n t l n ( l a . getNombre ( ) + ” a c t i o n ( s ) ” +
l a . g e t A c t i o n ( ) . getNom ( ) +
” au t a u x de ” + l a . g e t A c t i o n ( ) . getTaux ( ) ) ;
...
Olivier Caron
March 3, 2017
70/79
GIS 4
Architectures Logicielles
Mode de chargement des instances associées
• Le précédent exemple ne fonctionne pas (ligne 9), pourquoi ?
Olivier Caron
March 3, 2017
71/79
GIS 4
Architectures Logicielles
Mode de chargement des instances associées
• Le précédent exemple ne fonctionne pas (ligne 9), pourquoi ?
• Les instances de LigneAction sont des objets détachés
Olivier Caron
March 3, 2017
71/79
GIS 4
Architectures Logicielles
Mode de chargement des instances associées
• Le précédent exemple ne fonctionne pas (ligne 9), pourquoi ?
• Les instances de LigneAction sont des objets détachés
• le mode par défaut d’obtention des instances d’entité en mémoire est
le mode paresseux (LAZY) : ne se charge en mémoire que si on le
demande
Plus efficace mais attention aux java.lang.NullException !
Olivier Caron
March 3, 2017
71/79
GIS 4
Architectures Logicielles
Mode de chargement des instances associées
• Le précédent exemple ne fonctionne pas (ligne 9), pourquoi ?
• Les instances de LigneAction sont des objets détachés
• le mode par défaut d’obtention des instances d’entité en mémoire est
le mode paresseux (LAZY) : ne se charge en mémoire que si on le
demande
Plus efficace mais attention aux java.lang.NullException !
• Deux solutions :
Olivier Caron
March 3, 2017
71/79
GIS 4
Architectures Logicielles
Mode de chargement des instances associées
• Le précédent exemple ne fonctionne pas (ligne 9), pourquoi ?
• Les instances de LigneAction sont des objets détachés
• le mode par défaut d’obtention des instances d’entité en mémoire est
le mode paresseux (LAZY) : ne se charge en mémoire que si on le
demande
Plus efficace mais attention aux java.lang.NullException !
• Deux solutions :
1
Forcer le chargement des objets avant l’envoi des données (méthode
getActionsAchetees)
Olivier Caron
March 3, 2017
71/79
GIS 4
Architectures Logicielles
Mode de chargement des instances associées
• Le précédent exemple ne fonctionne pas (ligne 9), pourquoi ?
• Les instances de LigneAction sont des objets détachés
• le mode par défaut d’obtention des instances d’entité en mémoire est
le mode paresseux (LAZY) : ne se charge en mémoire que si on le
demande
Plus efficace mais attention aux java.lang.NullException !
• Deux solutions :
1
Forcer le chargement des objets avant l’envoi des données (méthode
getActionsAchetees)
2
Fixer le mode d’acquisition des données en mode non paresseux
(EAGER)
Olivier Caron
March 3, 2017
71/79
GIS 4
Architectures Logicielles
Version opérationnelle
/ / f i c h i e r Compte . j a v a
...
@OneToMany( mappedBy= ” p r o p r i e t a i r e ” , f e t c h =FetchType .EAGER)
public Set<L i g n e A c t i o n > g e t L i g n e s A c t i o n s ( ) { . . . }
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
/ / f i c h i e r LigneAction . java
...
@ManyToOne( f e t c h =FetchType .EAGER)
public A c t i o n g e t A c t i o n ( ) { . . . }
Olivier Caron
March 3, 2017
72/79
GIS 4
Architectures Logicielles
Session Stateful et JSP (1/2)
• Problème :
Olivier Caron
March 3, 2017
73/79
GIS 4
Architectures Logicielles
Session Stateful et JSP (1/2)
• Problème :
• Les composants Stateful permettent d’établir une session avec
leur client.
Olivier Caron
March 3, 2017
73/79
GIS 4
Architectures Logicielles
Session Stateful et JSP (1/2)
• Problème :
• Les composants Stateful permettent d’établir une session avec
leur client.
• Les JSP reposent sur une technologie (http) non orientée session.
Olivier Caron
March 3, 2017
73/79
GIS 4
Architectures Logicielles
Session Stateful et JSP (1/2)
• Problème :
• Les composants Stateful permettent d’établir une session avec
leur client.
• Les JSP reposent sur une technologie (http) non orientée session.
• Solution :
Programmer la session dans le JSP
Olivier Caron
March 3, 2017
73/79
GIS 4
Architectures Logicielles
Session Stateful et JSP (2/2)
<%
M o n S t a t e f u l composant ;
composant = ( M o n S t a t e f u l ) s e s s i o n . g e t A t t r i b u t e ( ”unNom” ) ;
i f ( composant== n u l l ) {
try {
I n i t i a l C o n t e x t c t x =new I n i t i a l C o n t e x t ( ) ;
S t r i n g nomJNDI = ” j a v a : app / mesSessions / Comp ! I L o c a l ” ;
composant =( M o n S t a t e f u l ) c t x . lookup ( nomJNDI ) ;
s e s s i o n . s e t A t t r i b u t e ( ”unNom” , composant ) ;
} catch . . .
Olivier Caron
March 3, 2017
74/79
GIS 4
Architectures Logicielles
Message Driven Bean (1/3)
• Envoi de messages asynchrones
Olivier Caron
March 3, 2017
75/79
GIS 4
Architectures Logicielles
Message Driven Bean (1/3)
• Envoi de messages asynchrones
• Les composants ont un couplage faible, pas reliés par leur interface
Olivier Caron
March 3, 2017
75/79
GIS 4
Architectures Logicielles
Message Driven Bean (2/3)
• Liaison Point à point :
Olivier Caron
March 3, 2017
76/79
GIS 4
Architectures Logicielles
Message Driven Bean (3/3)
• Diffusion multiple :
Olivier Caron
March 3, 2017
77/79
GIS 4
Architectures Logicielles
Conclusion
• Quelques aspects non abordés :
Olivier Caron
March 3, 2017
78/79
GIS 4
Architectures Logicielles
Conclusion
• Quelques aspects non abordés :
• Possibilité de programmer des intercepteurs,
Introduction à la programmmation par aspects.
Olivier Caron
March 3, 2017
78/79
GIS 4
Architectures Logicielles
Conclusion
• Quelques aspects non abordés :
• Possibilité de programmer des intercepteurs,
Introduction à la programmmation par aspects.
• Référencement d’EJB
Olivier Caron
March 3, 2017
78/79
GIS 4
Architectures Logicielles
Conclusion
• Quelques aspects non abordés :
• Possibilité de programmer des intercepteurs,
Introduction à la programmmation par aspects.
• Référencement d’EJB
• Interaction avec le conteneur
Olivier Caron
March 3, 2017
78/79
GIS 4
Architectures Logicielles
Conclusion
• Quelques aspects non abordés :
• Possibilité de programmer des intercepteurs,
Introduction à la programmmation par aspects.
• Référencement d’EJB
• Interaction avec le conteneur
• Avantages :
Olivier Caron
March 3, 2017
78/79
GIS 4
Architectures Logicielles
Conclusion
• Quelques aspects non abordés :
• Possibilité de programmer des intercepteurs,
Introduction à la programmmation par aspects.
• Référencement d’EJB
• Interaction avec le conteneur
• Avantages :
• Simplicité de programmation
Olivier Caron
March 3, 2017
78/79
GIS 4
Architectures Logicielles
Conclusion
• Quelques aspects non abordés :
• Possibilité de programmer des intercepteurs,
Introduction à la programmmation par aspects.
• Référencement d’EJB
• Interaction avec le conteneur
• Avantages :
• Simplicité de programmation
• Exploite les caractéristiques Java 1.5
Olivier Caron
March 3, 2017
78/79
GIS 4
Architectures Logicielles
Conclusion
• Quelques aspects non abordés :
• Possibilité de programmer des intercepteurs,
Introduction à la programmmation par aspects.
• Référencement d’EJB
• Interaction avec le conteneur
• Avantages :
• Simplicité de programmation
• Exploite les caractéristiques Java 1.5
• Support idéal pour des applications Java réseaux, 3-tiers, sécurisées,
persistantes et transactionnelles.
Olivier Caron
March 3, 2017
78/79
GIS 4
Architectures Logicielles
Le mot de la fin
c Auteur inconnu
Il y a 10 sortes de personnes, ceux qui comprennent le binaire et ceux qui
ne le comprennent pas.
Olivier Caron
March 3, 2017
79/79
Téléchargement