Académique Documents
Professionnel Documents
Culture Documents
Java EE - Objectifs
Faciliter le dveloppement de nouvelles applications base de composants Intgration avec les systmes dinformation existants Support pour les applications critiques de lentreprise
Disponibilit, tolrance aux pannes, monte en charge, securit ...
Offre commerciale
Oracle WebLogic (haut de gamme) IBM Websphere (no 1) Oracle (Sun) Glassfish
NEC WebOTX SAP NetWeaver TmaxSoft Jeus, Kingdee Apusic, TongTech TongWeb AS
Offre open-source
JBoss (no 1 en nombre de dploiements) OW2 JOnAS Oracle (Sun) Glassfish ( Platform edition ) Apache Geronimo ( Community edition de IBM Websphere)
openEjb
Java EE - Architecture
Browser WEB Container
html
http
Servlets JSPs
Applets
rmi rmi
EJBs
JCA JAAS
JavaMail
DB
rmi
public static void main() {
Java Application
Architecture multi-tiers
Client
Lger (Web, browser) Lourd (Application java, Applet) Architecture oriente service (Application rpartie sans prsentation)
Serveur d applications
Conteneur EJB + logique mtier Services non fonctionnels
Un serveur Java EE
Source : Bull/OW2 (JOnAS)
Java Client
RMI Calls Web Container
Home interface Remote interface
Servlets HTTP
Management
Transaction
Database
Naming
EJB
Web
Ear
HTML Client
JDBC Calls
database
...
Services
Conteneur Web
Servlets Code java excut sur le serveur Equivalent du CGI Gnration de contenu Web dynamique JSP: Java Server Pages Mlange de HTML/XML et de code java Librairies d extension ( taglibs ) Prcompilation en servlet
RMI
Remote Method Invocation
RPC objet (appels sur objets distants) Service de nommage (RMI registry) Scurit paramtrable (SecurityManager) Garbage Collection distribue Tlchargement de code Fonctions avances
JNDI
Service de nommage / annuaire
Java Naming and Directory Interface
JMS
Java Messaging Service JMS Provider : inclus dans JavaEE
Transport synchrone ou asynchrone, Garantie de livraison Messaging domains point point ou publish/subscribe
TransactionManager : begin( ), commit( ), rollback( ) Transaction : commit( ), rollback( ), enlistResource(XAResource), registerSynchronisation(Synchronization) ... Synchronization : beforeCompletion( ), afterCompletion(commit | rollback)
JTA : Participants
XAResource
Conformes la spcification XA Enregistrement avec transaction.enlistResource( ) Pour les ressources non transactionnelles (EAI) Participant averti des frontires de transaction enregistrement : transaction.registerSynchronization( ) beforeCompletion( ) quivaut prepare( ) afterCompletion(tat = commit | rollback) quivaut commit | rollback
Synchronization
API XA de JavaEE
Package javax.transaction.xa
XAResource (prepare( ), commit( ), rollback( )...) Xid (identifiant de transaction XA) Extension de JDBC (bases de donnes) XADataSource (getXAConnection( )) XAConnection (PooledConnection, avec getConnection( ) et getXAResource( ))
Package javax.sql
JMX
Java Management eXtensions
API unique pour applications de management
Serveur JMX
Enregistrement des Mbeans Les applis d administration dialoguent avec le serveur JMX
Instrumenter un composant
Fournir un ou des Mbeans Les enregistrer auprs du serveur JMX
Admin console
EJBs
Admin Servlets
Transaction
Registry
Security
EAR
EJB
Web
..
MC4J
MBeans
Services
Java EE Server
Scurit : JAAS
Authentification et autorisation
Authentification : s'assurer que le client est bien celui qu'il prtend tre. Autorisation (ou habilitation ) : s'assurer qu'il dtient les droits de faire ce qu'il demande.
EJB : Architecture
JavaBeans pour l Enterprise Pas des JavaBeans (pas de reprsentation graphique) Logique mtier Sappuie sur Java SE et les APIs de Java EE
JNDI, JTA/JTS, JDBC, JMS , JAAS
Gestion dclarative : personnalisation par annotations (ou sans toucher au code source : descripteur de dploiement) Portable sur les diffrents conteneurs EJB
EJB 2.0
Lifecycle interface - create - remove - find Remote(rmi) ou Local Implement par le conteneur Implementation du composant: -logique mtier (code) -callbacks pour le conteneur (ejbCreate, ejbPassivate, ejbLoad, )
Descripteur de dploiement -comportement transactionnel (Tx attributes) -Scurit (ACLs) -Persistance (entity beans) -Ressources (DataSources )
DD
Home Client
Logique mtier + Callbacks + ic=new InitialContext(); ds = (DataSource) ic.lookup( java:comp/env/jdbc/MyDS);
Composant
Conteneur EJB
EJB 3
Client
Interface Mtier: Remote(rmi/iiop) ou local
Conteneur EJB
Business Interface
Simplification : 1 classe, 1 ou 2 interfaces - Linterface Home (cycle de vie) disparat Le descripteur de dploiement devient facultatif - Remplac par des annotations java dans le bean - Si prsent tout de mme, priorit au DD sur les annotations
EJB : Entit
Reprsente des donnes dans la base de donnes Persistance gre par le conteneur
Pas daccs BD dans le code. Pour les EJB3, utilisation de JPA (Java Persistence API)
publier
Topic
Queue
QCF
Serveur EJB
JMS
crer
crer bind
JNDI
Administration
MDB : Annotations
@MessageDriven(activationConfig = { @ActivationConfigProperty( propertyName= destination , propertyValue= SampleQueue ), @ActivationConfigProperty( propertyName= destinationType , propertyValue= javax.jms.Queue ) }
=> Utilis par lassembleur dapplication et par le conteneur EJB au moment du dploiement
Ressources et JNDI
Ressources dclares par annotations ou dans le descripteur de dploiement (accs via JNDI) Convention de nommage
Noms prfixs par le type de ressource rfrence (ejb, jms, jdbc, mail, url)
Exemple
Fournisseur f = (FournisseurRemote)initialContext.lookup( "java:comp/env/ejb/Fournisseur"); bd = (DataSource)initialContext.lookup( "java:comp/env/jdbc/Compta");
Injection de dpendances
Variable dinstance initialise par le conteneur
Alternative au lookup JNDI Interne au conteneur (pas client distant !)
Intercepteurs : @AroundInvoke
Interception de tous les appels de mthode
Identification de lappel (mthode, classe) : paramtre InvocationContext @AroundInvoke public Object intercept(InvocationContext ctx) throws Exception { String method = ctx.getMethod().getName(); //Avant invocation try { return ctx.proceed(); } catch(Exception e) { throw e; } finally { // Apres invocation } }
Persistance EJB3
API de persistance : JPA
Mapping objet / relationnel Pluggable sur diffrents frameworks de persistance (JDO, Hibernate, TopLink, etc) via un persistence provider .
EJB-QL
Bas sur SQL92 ( select from where ) Mthodes associes des requtes avec paramtres
Exemple
@Entity public class Facture implements java.io.Serializable { private int numfact; private double montant; private Client client; public Facture() { } // Constructeur par dfaut (obligatoire pour Entity bean) public Facture(String numfact) { this.numfact = numfact; } @Id public int getNumfact() { return numfact; } public void setNumfact(int nf) { numfact = nf; } public void setMontant(double montant) { this.montant = montant; } public double getMontant( ) { return montant; } @ManyToOne @JoinColumn (name = refclient) public Client getClient( ) { return client; } public void setClient(Client client) { this.client = client; } }
Exemple (2)
@Stateless @Remote(FacturationRemote.class) public class FacturationBean implements FacturationRemote { @PersistenceContext private EntityManager entityManager = null; public void creerFacture(String numfact, double montant) { Facture fact = new Facture(numfact); fact.setMontant(montant); entityManager.persist(fact); } public Facture getFacture(String numfact) { return entityManager.find(Facture.class, numfact); } }
Relations
Part de la classe courante
Exemple : classe Client, lien OneToMany avec la classe Facture
Le propritaire de la relation correspond la table qui dfinit la cl trangre (ne sapplique pas ManyToMany)
Lien Client/Factures : la Facture est propritaire de la relation Attribut mappedBy ct Client, et joinColumn ct Facture
OneToOne
Exemple : Fournisseur et Adresse
OneToMany
Exemple : Client et Facture
ManyToOne
Exemple : Facture et Client
ManyToMany
Exemple : Produit et Fournisseur
Relations et matrialisation
Requte BD : curseur sans matrialisation du dataset = lazy loading
Buffer avec pr-fetch.
Eager loading : matrialisation complte des donnes Annotation sur la relation (Dfaut : LAZY)
@OneToMany(fetch=FetchType.EAGER)
EntityManager
persist(entit) : sauvegarde merge(entit) : sauvegarde aprs rattachement au contexte (retourne lentit attache) remove(entit) : suppression find(entit.class, cl_primaire) : recherche par cl refresh(entit) : annulation modifications flush( ) : sauvegarde immdiate modifications createQuery(ejbQL) createNativeQuery(SQL)
EntityManager.persist ( entit )
Persiste une instance dentit
Nouvelle entit passe en tat gr, ignore les entits supprimes
EntityManager.remove ( entit )
Suppression dune entit
Ignore les entits nouvelles ou supprimes
EntityManager.flush( )
Ecriture modifications (entits attaches seulement). Si instance gre : enregistrement modifs
Cascade sur relations annotes cascade=PERSIST ou ALL
EJB-QL
Dialecte proche de SQL
select from where sur des objets update et delete join , group by having Possibilit de requtes paramtres Utilisation directe, ou requtes nommes (@NamedQuery)
Exemple public List<Facture> listFactures( ) { Query qry = entityManager.createQuery( select f from Facture f ); return qry.getResultList(); }
Mapping ONLY_ONE_TABLE
@Entity @Inheritance(discriminatorValue= P ) @DiscriminatorColumn(name= typepersonne ) public class Personne implements Serializable { // } @Entity @Inheritance(discriminatorValue= E ) public class Employe extends Personne { // }
Transactions
Applicable aux 3 profils de composants
Session, Entit, Message driven
Limitation pour le MessageDriven (attributs Required ou NotSupported seulement).
Gestion explicite
Utilisation de javax.transaction.UserTransaction (JTA) Contrle de la transaction (timeout, rollbackOnly ) Exemple
UserTransaction utx = (UserTransaction)ctx.lookup( java:comp/UserTransaction ); utx.begin(); utx.commit();
JCA
Java Connector Architecture Intgration avec les SI dentreprise (EIS)
Applications (ERP, Supply Chain) Middleware (gestionnaire de transactions)
Connecteur compos de :
Contrats systme API cliente Resource Adapter
Contrats Systme
Interaction entre le SI et le serveur dapplications
Gestion des connexions et pooling Gestion des transactions (par le serveur d application et/ou le SI) Scurit (accs scuris au SI)
API clientes
Standard : CCI (Common Client Interface)
Avantage : API standard Inconvnient : trop gnral et peu comprhensible (pas de sens mtier), implmentation facultative.
Resource Adapter
Implmentation de linterfaage avec le SI
Classes dinterface Librairies natives du SI
Descripteur de dploiement
Configuration du connecteur au sein du serveur d application
Classes dimplmentation des interfaces standard Fonctionnalits supportes ou non (transactions, scurit)
Dploiement
Packaging en fichier .rar (RA archive)
Dploy par le serveur dapplication Format jar avec organisation standard Contient tous les lments du connecteur Descripteur de dploiement (ra.xml) dans META-INF : configuration du connecteur
Assembleur dapplication
Cre lapplication par assemblage dEJB
Administrateur
Dploiement, scurit, exploitation, monte en charge Analogue au rle de DBA pour les BD
Packaging
Application JavaEE (agrgation de diffrents tiers)
Fichier .ear + descripteur application.xml
Tiers client
Web : fichier .war + descripteur web.xml Application : fichier .jar + descripteur application-client.xml (lancement du main() de la classe spcifie dans le manifest , attribut MainClass )
Tiers EJB
Fichier .jar + descripteur ejb-jar.xml
EB1
DD
no cust
DB2
EJB
DBM
JMX
REG
R1
server2
Conteneur EJB
EB2
JTM
Web
JMX
EJB
DBM
JMX
R2
Appli client
server1
server3
web
ejb
web
ejb
web ejb
Apache mod_j
k
Compact
Rparti
web ejb
web
ejb
web
ejb
(2)
web ejb
Apache mod_j
k
web ejb
web
ejb
(3)
web
(4)
ejb
Apache mod_j
k
Apache mod_j
k
web
web
ejb
Apache Mod_jk
Tomcat
Tomcat
JNDI
JNDI
JNDI
DB