Академический Документы
Профессиональный Документы
Культура Документы
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
BEA WebLogic (haut de gamme) IBM Websphere (no 1) Sun Java System App Server Borland Enterprise Server Oracle Application Server
Macromedia jRun SAP Web application server Iona Orbix E2A
Offre open-source
JBoss (no 1 en nombre de dploiements) OW2 JOnAS Sun Glassfish (Platform edition de loffre Sun Java System App Server) 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 dapplications
Conteneur EJB + logique mtier Services non fonctionnels
Un serveur Java EE
Java Client
Servlets HTTP
Management
Transaction
Database
Naming
Web
EJB
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 dextension (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 dadministration 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
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)
jour
Envoi message
MDB Order
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
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
<assembly-descriptor> Dfinition de rle ... <security-role> <description>Personnel administratif de gestion</description> <role-name>administratif</role-name> </security-role> Permissions accordes <method-permission> un rle <role-name>administratif</role-name> <method> <ejb-name>Fournisseur</ejb-name> <method-name>*</method-name> </method> </method-permission> </ assembly-descriptor>
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 dapplication 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 dapplication
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
DB1
EB1
DD
no cust
DB2
EJB
JMX
DBM
REG
R1
server2
Conteneur EJB
EB2
JTM
Web
EJB
DBM
JMX
Appli client
server1
JMX
R2
server3
web
ejb
web
ejb
web ejb
Apache mod_jk
Compact
Rparti
web ejb
web
ejb
web
ejb
(2)
ejb
web ejb
web
ejb
(3)
web
(4)
ejb
Apache mod_jk
Apache mod_jk
web
web
ejb
Apache Mod_jk
Tomcat
Tomcat
JNDI
JNDI
DB
Liens utiles
easybeans.ow2.org java.sun.com/j2ee/verified/packaging.html www-labo.sun.com/resources-fr-essentiels.htm solarmetric.com/resources/ejb-api-quickref.pdf