Professional Documents
Culture Documents
Gnralits
La plate-forme Java EE (Java Enterprise Edition) est un standard de dveloppement et d'implmentation des applications l'chelle de l'entreprise :
Elle prend en charge les applications plusieurs niveaux (multi-tiers). Elle est conue pour amliorer le processus de dveloppement, de dploiement et d'implmentation des applications l'chelle de l'entreprise.
2
Applications multi-tiers
Application Java EE 1 Application Java EE 2 Niveau client Client applicatif Pages HTML dynamiques Ordinateur client
Pages
JSP
Enterprise Beans
Niveau EIS
Architecture Java EE
Serveur Java EE Conteneur Web Navigateur Servlet Java/JSF
EJB
JMS JAF
Base de donnes
Gnralits
Permet dviter au dveloppeur davoir a se proccuper de tout ce qui a trait au systme :
Transactions Scurit Evolutivit Concurrence Communications Gestion des ressources Persistance Gestion des erreurs Etc.
5
3 types dEJB
Session
Stateless Stateful
11
Temporisation
Passif
12
Remote
utilise RMI (Remote Method Invocation) (=> plus lent quun appel local) et JNDI (Java Naming and Directory Interface) Utilis dans la majorit des cas
13
14
import javax.ejb.Stateless; @Stateless public class CalculatriceBean implements CalcRemote, CalcLocal { public double add(double v1,double v2) {return v1+v2;} public double sub(double v1,double v2) {return v1-v2;} public double mul(double v1,double v2) {return v1*v2;} public double div(double v1,double v2) {return v1/v2;} }
15
16
La couche de persistance
La couche de persistance permet de mettre en correspondance les objets et les tables de base de donnes. Cette couche est associe aux caractristiques suivantes : Elle prend en charge les fonctionnalits de lecture, d'criture et de mise en mmoire cache. Elle vite aux dveloppeurs d'avoir grer les problmes lis la base de donnes. Elle facilite les modifications et la gestion des donnes. Il est recommand de l'utiliser dans toutes les applications disposant d'un modle objet.
17
La couche de persistance
La mise en correspondance d'objets de base de donnes relationnelle avec des objets Java facilite le dveloppement d'applications Java EE. Ce mapping est fourni par des structures telles que l'API de persistance Java EJB 3.0.
Modle Java
Schma 18
La couche de persistance
Une couche de persistance isole les informations de persistance de la couche applicative.
Les rsultats de l'interrogation et de la cration au niveau objets sont des objets. Les rsultats sont renvoys en tant que donnes brutes. Objets Objets Crations et mises jour d'objets via une API de niveau objet. L'API utilise SQL ou des appels de base de donnes spcifiques.
19
20
21
EJB 3.0 propose un modle standard de persistance laide des Entity beans Les outils qui assureront la persistance (Toplink, Hibernate, etc.), intgrs au serveur dapplication, devront tre compatibles avec la norme EJB 3.0
22
Entity Bean ?
Ce sont des objets qui savent se mapper dans une base de donne. Ils utilisent un mcanisme de persistance Ils servent reprsenter sous forme d'objets des donnes situes dans une base de donne
Le plus souvent un objet = une ou plusieurs ligne(s) dans une ou plusieurs table(s)
23
24
ServiceRequestFacadeBean.java
Users.java
25
26
EntityManager
Associ un contexte de persistance gre un ensemble dentits persistantes Implmente linterface
javax.persistence.EntityManager
27
EntityManager
Obtenu par : Injection de dpendances Pour obtenir les objets
Pour saffranchir des noms JNDI viter les problmes de nommage
28
Configurer le fichier DS
Un fichier ds permettra de prciser le nom de la BD Le pilote JDBC Login Mot de passe Le nom de la source de donnes quon va utiliser dans le fichier persistence.xml Le fichier de configuration doit finir avec -ds et dplacer vers le rpertoire deploy
29
Exemple
<datasources> <local-tx-datasource> <jndi-name>espritDS</jndi-name>
Projet-ds.xml
<persistence-unit
name="demo"> <jta-data-source>java:/espritDS</jta-data-source>
Persistence.xml
30
31
Session Bean
@Stateless public class VoitureDao implements VoitureDaoRemote, VoitureDaoLocal { @PersistenceContext EntityManager em; public VoitureDao() { } public void ajouter(Voiture v) { em.persist(v); } }
32
@Stateless(name="EJBSession") public class EJBSessionBean implements EJBSession, EJBSessionLocal { @PersistenceContext(unitName="Model") private EntityManager em; public List<Customers> queryCustomersFindAll() { return em.createNamedQuery("Customers.findAll").getResultList(); } public List<Customers> queryCustomersFindByName(String var2) { return em.createNamedQuery("Customers.findByName") .setParameter("var2", var2).getResultList(); }
34
Design Pattern
Session Faade Service locator Business Delegate
35
Session Faade
36
Session Faade
Use case / mthode, groups dans un Session Stateless Bean Tte de transaction
minimise la gestion de transaction
37
Session Faade
38
Service Locator
Centraliser toutes les utilisations de JNDI et de l'objet InitialContext Amliorer les performances d'accs aux EJB (par utilisation dun cache) Fournir un seul point de contrle Ce pattern apporte de la flexibilit et de lextensibilit au niveau framework.
39
Service Locator
40
Service Locator
public class ServiceLocator { private Context initalContext; private Map<String, Object> cache; private static ServiceLocator instance= new ServiceLocator(); public static ServiceLocator getInstance() {return instance;} private ServiceLocator() throws ServiceLocatorException { try { initalContext = new InitialContext(); cache = new HashMap<String, Object>(); } catch (Exception e) { throw new ServiceLocatorException(e);}}
41
Service Locator
public Object getRemoteInterface(String jndiName) throws ServiceLocatorException { Object remoteInterface = cache.get(jndiName); if (remoteInterface == null) { try { remoteInterface = initalContext.lookup(jndiName); cache.put(jndiName, remoteInterface); } catch (Exception e) { throw new ServiceLocatorException(e);}} return remoteInterface;}}
42
Business Delegate
Rduire le couplage entre la couche mtier et la couche prsentation Cacher la complexit de manipulation des objets mtiers distribus, par encapsulation Mettre en cache les rfrences distantes (et, ultrieurement les rsultats) Rpartir plus facilement le travail entre les dveloppeurs de la couche prsentation et les dveloppeurs de la couche mtier
43
Business Delegate
44
Business Delegate
public final class CustomerDelegate { (...) public static Customer findCustomer(Long customerId) { return getCustomerRemote().findCustomer(customerId); } public static void deleteCustomer(Customer customer) { getCustomerRemote().deleteCustomer(customer); }
45
Business Delegate
private static CustomerRemote getCustomerRemote() { CustomerRemote customerRemote; customerRemote = (CustomerRemote) ServiceLocator.getInstance().getRemoteInterface( "Customer/remote"); return customerRemote; } }
46
Transactions
JTA (Java Transaction API) fournit un API permettant de grer les transactions :
BMT (Bean-Managed Transactions) => @TransactionManagement(TransactionManagementT ype.BEAN) CMT (Container-Managed Transactions) = @TransactionManagement(TransactionManagementT ype.CONTAINER)
Par dfaut, le conteneur gre les transactions JPA (Java Persistance API) ne dpend pas du mode de gestion des transactions
47
CMT
Le conteneur dmarre, valide ou annule la transaction. La transaction commence au dbut de lexcution de la mthode metier appele et se termine a la fin de cette dernire On peut forcer le fait que la transaction soit annule (context.setRollBackOnly()) @Resource private SessionContext context; Avec CMT, nous navons pas le contrle sur le moment ou la transaction est dmarre, valide ou annule
48
BMT
On utilise la UserTransaction @Resource private UserTransaction userTransaction; userTransaction = context.getUserTransaction(); userTransaction.begin(); userTransaction.commit(); OU userTransaction.rollback();
49
Cas pratique
50
Cas pratique
Implmenter les Entity Bean Ajouter la couche DAO Implmenter le session facade
Crer Client Crer Compte Affecter compte un client Crditer un compte Dbiter un compte Virement de largent dun compte un autre.