From: Subject: Java 2 Entreprise Edition Date: Mon, 26 Aug 2002 00:38:44 +0200 MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_NextPart_000_0016_01C24C98.EEDBAFF0"; type="text/html" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 This is a multi-part message in MIME format. ------=_NextPart_000_0016_01C24C98.EEDBAFF0 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://perso.wanadoo.fr/jm.doudoux/java/tutorial/chap025.htm Java 2 Entreprise Edition
3D"Partie 3D"26. 3Dsommaire D=E9veloppons = en Java=20   

25. J2EE


3DChapitre=20 3D2=20 3D5=20

J2EE est l'acronyme de Java 2 Entreprise Edition. = Cette =E9dition=20 est d=E9di=E9e =E0 la r=E9alisation d'applications pour entreprises. = J2EE est bas=E9 sur=20 J2SE (Java 2 Standard Edition) qui contient les API de bases de java. =

J2EE est une plate-forme fortement orient=E9 serveur = pour le=20 d=E9veloppement et l'=E9x=E9cution d'applications distribu=E9es. Il est = compos=E9 de deux=20 parties essentielles :

Sun propose une impl=E9mentation minimale des = sp=E9cifications de=20 J2EE. Cette impl=E9mentation permet de d=E9velopper des applications = respectant les=20 sp=E9cifications mais n'est pas pr=E9vue pour =EAtre utilis=E9e dans un = environnement de=20 production. Ces sp=E9cifications doivent =EAtre respect=E9es par les = outils d=E9velopp=E9s=20 par des =E9diteurs tiers.

 

3D"en
Ce chapitre est en cours=20 d'=E9criture

 

25.1. Les API de J2EE

J2EE regroupe un ensemble d'API pour le = d=E9veloppement=20 d'applications d'entreprise.

API R=F4le
version de l'API dans J2EE 1.2
version de l'API dans J2EE 1.3
Entreprise java bean (EJB) Composants serveurs contenant la logique m=E9tier
1.1
2.0
Remote M=E9thod Invocation (RMI) et RMI-IIOP RMI permet d'utilisation d'objet java distribu=E9. RMI-IIOP est = une=20 extension de RMI pour utiliser avec CORBA.
1.0
 
Java Naming and Directory Interface (JNDI) Acc=E8s aux services de nommage et aux annuaires = d'entreprises
1.2
1.2
Java Database Connectivity (JDBC) Acc=E8s aux bases de donn=E9es. J2EE int=E8gre une extension de = cette API
2.0
2.0
Java Transaction API (JTA)
Java Transaction Service = (JTS)
Support des transactions
1.0
1.0
Java Messaging service (JMS) Support de messages via des MOM (Messages Oriented = Middleware)
1.0
1.0
Servlets Composants bas=E9 sur le concept C/S pour ajouter des = fonctionnalit=E9s =E0=20 un serveur. Pour le moment, principalement utilis=E9 pour = =E9tendre un serveur=20 web
2.2
2.3
JSP  
1.1
1.2
Java IDL Utilisation de CORBA
 
 
JavaMail Envoie et r=E9ception d'email
1.1
1.2
J2EE Connector Architecture (JCA) Connecteurs pour acc=E9der =E0 des ressources de l'entreprises = tel que=20 CICS, TUXEDO, SAP ...
 
1.0
Java API for XML Parsing (JAXP) Analyse et exploitation de donn=E9es au format XML
 
1.1
Java Authentication and Authorization Service (JAAS) Echange s=E9curis=E9 de donn=E9es
 
1.0
JavaBeans Activation Framework Utilis=E9 par JavaMail : permet de d=E9terminer le type = mime
 
1.2

Ces API peuvent =EAtre regroup=E9es en trois grandes = cat=E9gories :=20

 

 

 

 

 

 

25.2. L'environnement d'=E9x=E9cution = des=20 applications J2EE

J2EE propose des sp=E9cifications pour une = infrastructure dans=20 laquelle s'=E9x=E9cute les composants. Ces sp=E9cifications d=E9crivent = les r=F4les de=20 chaque =E9l=E9ments et pr=E9cisent un ensemble d'interfaces pour = permettre =E0 chacun de=20 ces =E9l=E9ments de communiquer.

Ceci permet de s=E9parer les applications et = l'environnement dans=20 lequel il s'=E9x=E9cute. Les sp=E9cifications pr=E9cisent =E0 l'aide des = API un certain=20 nombre de fonctionnalit=E9s que doivent impl=E9menter l'environnement = d'ex=E9cution.=20 Ces fonctionnalit=E9s sont de bas niveau et permettent aux = d=E9veloppeurs de se=20 concentrer sur la logique m=E9tier.

Pour =E9xecuter ces composants de natures = diff=E9rentes, J2EE=20 d=E9finis des conteneurs pour chacun de ces composants. Il d=E9finit = pour chaque=20 composants des interfaces qui leur permettront de dialoguer avec les = composants=20 lors de leur execution. Les conteneurs permettent aux applications = d'acc=E9der aux=20 ressources et aux services en utilisant les API.

Les appels aux applications se font par des clients = via les=20 conteneurs. Les clients n'acc=E8dent pas directement aux applications = mais=20 sollicite le conteneur.

 

25.2.1. Les conteneurs

Les conteneurs assurent la gestion du cycle de vie = des=20 composants qui s'=E9x=E9cutent en eux.

Les conteneurs fournissent des services qui peuvent = =EAtre=20 utilis=E9s par les applications lors de leur =E9x=E9cution : .

Pour d=E9ployer une application dans un conteneur, il = faut lui=20 fournir deux =E9l=E9ments :

Il existe trois types d'archive :

Archive / module Contenu
Extension
Descripteur de d=E9ploiement
java Regroupe des classes
jar
application-client.jar
web Regroupe les servlets et les JSP ainsi que les ressources = necessaires=20 =E0 leur execution (classes, biblioth=E8que de balises, images, = ...)
war
web.xml
EJB Regroupe les EJB et leur composants (classes)
jar
ejb-jar.xml

Une application est un regroupement d'une ou plusieurs modules dans = un=20 fichier EAR (Entreprise ARchive). L'application est d=E9crite dans un = fichier=20 application.xml lui m=EAme contenu dans le fichier EAR

Il existe autant de conteneurs que de type d'applications :

 

25.2.2. Le conteneur web

 

L'impl=E9mentation de r=E9f=E9rence pour ce type de = conteneur est le=20 projet open source Tomcat du groupe Apache.

 

25.2.3. Le conteneur d'EJB

 

 

25.3. L'assemblage et le d=E9ploiement = d'applications J2EE

J2EE propose une sp=E9cification pour d=E9crire le = mode=20 d'assemblage et de d=E9ploiement d'une application J2EE.

Une application J2EE peut regrouper diff=E9rents = modules :=20 modules web, modules EJB ... Chacun de ces modules poss=E8de son propre = mode de=20 packaging. J2EE propose de regrouper ces diff=E9rents modules dans un = module=20 unique sous la forme d'un fichier EAR (Entreprise ARchive).

Le format de cet archive est tr=E8s semblable =E0 = celui des autres=20 archives :

Les serveurs d'application extraient chaque modules = du fichier=20 EAR et les d=E9ploient s=E9par=E9ment un par un.

 

 

25.3.1. Le contenu et l'organisation = d'un=20 fichier EAR

Le fichier EAR est compos=E9 au minimum :

Les modules ne doivent pas obligatoirement =EAtre = ins=E9r=E9s =E0 la=20 racine du fichier EAR : ils peuvent =EAtre mis dans des sous = r=E9pertoires pour=20 organiser le contenu de l'application. Il est par exemple pratique de = cr=E9er un=20 r=E9pertoire lib qui contient les fichier .jar des biblioth=E8ques = communes aux=20 diff=E9rents modules.

 

 

25.3.2. La cr=E9ation d'un fichier = EAR

Pour cr=E9er un fichier EAR, il est possible = d'utiliser un outils=20 graphique fourni par le vendeur du serveur d'application ou cr=E9er le = fichier=20 manuellement en suivant les =E9tapes suivantes :

  1. cr=E9er l'arboresence des r=E9pertoires qui vont contenir les = modules=20
  2. ins=E9rer dans cette arboresence les diff=E9rents modules =E0 = inclure dans le=20 fichier EAR=20
  3. cr=E9er le r=E9pertoire META-INF (en respectant la casse)=20
  4. cr=E9er le fichier application.xml dans ce r=E9pertoire=20
  5. utiliser l'outils jar pour cr=E9er le fichier le fichier EAR en = pr=E9cisant=20 les options cvf, le nom du fichier ear avec son extension et les = diff=E9rents=20 =E9l=E9ments qui compose le fichier (modules, r=E9pertoire dont le = r=E9pertoire=20 META-INF).

 

 

25.3.3. Les limitations des fichiers = EAR

Actullement les fichiers EAR ne servent =E0 regrouper = diff=E9rents=20 modules pour former une seule entit=E9. Rien n'est actuellement pr=E9vu = pour prendre=20 en compte la configuration des objets permettant l'acc=E8s aux = ressources par=20 l'application tel qu'une base de donn=E9es (JDBC pour DataSource, pool = de=20 connexion ...), un syst=E8me de message (JMS), etc ...

Pour lever une partie de ces limites, les serveurs=20 d'applications commerciaux proposent souvent des m=E9canismes = propri=E9taires=20 suppl=E9mentaires pour palier =E0 ces manques en attendant une = =E9volution des=20 sp=E9cifications.

 

3D"en
Ce chapitre est en cours=20 d'=E9criture

 


3D"Partie 3D"26. 3Dsommaire D=E9veloppons = en Java=20 =   
------=_NextPart_000_0016_01C24C98.EEDBAFF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://perso.wanadoo.fr/jm.doudoux/java/tutorial/FlecheG.gif R0lGODlhHwAfAPcAAAAAAEBAQGVlZYqKiq+vr9TU1AAAgMDAwICAAP8A/4AAgAD//wCAgAEBAQIC AgMDAwUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExUVFRYWFhcX FxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyUlJSYmJicnJygoKCkpKSoqKisr KywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/ P0BAQEFBQUJCQkNDQ0VFRUZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNT U1VVVVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2VlZWZmZmdnZ2ho aGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNzc3V1dXZ2dnd3d3h4eHl5eXp6ent7e3x8 fH19fX5+fn9/f4CAgIGBgYKCgoODg4WFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQ kJGRkZKSkpOTk5WVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6Wl paampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7W1tba2tre3t7i4uLm5 ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zM zM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f 3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy 8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///yH5BAEAAAcALAAAAAAfAB8A AAjJAA8IHEiwoMGDCBMGCJCwocKFDiMSXCiAocSIFCtedEhxgMaNCDt6tAiyYEcCI0uaDCBgAAGU FRfKnDkzJEuXLz0K2MmzJ0+IK1u+LIBygNGjSJF+HHiSQAGiL6NKnZqS6c2hT7Nq3foUJsmmXMNu 9SoQrNizRKtedYr2LNkDZttyfQt3rdy5VcvavZuVrl6hbKcKlprXKuC0SRMfXTpxLUyfkHcCNdh0 JM3Lkw+eLKzyr1HGnT2DDl1XMmnKLEmetqp6tV7XpwMCADs= ------=_NextPart_000_0016_01C24C98.EEDBAFF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://perso.wanadoo.fr/jm.doudoux/java/tutorial/FlecheD.gif R0lGODlhHwAfAPcAAAAAAEBAQGVlZYqKiq+vr9TU1AAAgMDAwICAAP8A/4AAgAD//wCAgAEBAQIC AgMDAwUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExUVFRYWFhcX FxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyUlJSYmJicnJygoKCkpKSoqKisr KywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/ P0BAQEFBQUJCQkNDQ0VFRUZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNT U1VVVVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2VlZWZmZmdnZ2ho aGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNzc3V1dXZ2dnd3d3h4eHl5eXp6ent7e3x8 fH19fX5+fn9/f4CAgIGBgYKCgoODg4WFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQ kJGRkZKSkpOTk5WVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6Wl paampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7W1tba2tre3t7i4uLm5 ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zM zM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f 3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy 8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///yH5BAEAAAcALAAAAAAfAB8A AAjEAA8IHEiwoMGDCBMeCBBAoUOEDBs+nCgwgACGFCdavCgxY0KLAzh6/ChgQEiMIw2CJHCy48GI MGMyLEmApciXGwXo3MlT54CaNlEWBGmyqNGjBArUbKmSJtCnUGsWUBrU5UKaU7Nq3Zp16c2KWLmK 1epV6MqxaKeWlXg2LdqyYH+6Hbs2btK5W+vaxUu2KsGVUQPf1TuQ6NHDJpMSLpyzp+Ofi//KnOyU acrCNC1fjqt589XOnjcK9Qx2NOmFpk+nPu0xIAA7 ------=_NextPart_000_0016_01C24C98.EEDBAFF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://perso.wanadoo.fr/jm.doudoux/java/tutorial/introcontents.gif R0lGODlhNgAcAPcAAP///2VlZf///wAAAMzMzGZmmTMzmb6+vr4edwEAABiHNwKuBQD/x14rWzFb 9oaTAV8YrgW+HgAAdwEChy4WZxeuBb4eN4FYh/FwMgEaugMAiIcDAAAAAADmARsAAAAAAAAMAAwB AAAAow9nF7IFAAAQ+G8AiCb3v24g9r8AcG8AbwEAAEj3bwACAAAAKQywCAQBrgUAABq6HwaoACkA AABouh8G1FFPBwAA8AAAAAAAAhD8vwAAAAAW+G8A0PdvADg+978oAAAAH0H3v3AU/L/Fs/e/cBT8 v1of9r//928AAQAAAKz3bwAAAAAAAfhvAFof9r/iE/e/bwEAAMUS979OcW8AFgAAAIJA978c+W8A AAAAAAEAAAAE+W8AMGL3v//3bwAWAAAAHPlvAFof9r8AAAAAAQAAAAAAAACoc0gAGIiLQzpcbW9u IHNpdGUgdHV0XGdlbmVyZVxpbnRyb2NvbnRlbnRzLmdpZgBsDAAARwAAAAAAAAC0+G8Ap3xyiHcB AABU+G8AJhj3vwAAAACTeUUANCL5v3wZ97+SiAAAKP5vADEY97+nfHKIAAAAAHKIZ25lBwAAAABG AgAA7IgAAND4bwCXFkQBNydfAQAAZ243J18B8oj6O7cWBAAAAJkQsggAAJcW8ogqPLT4bwAAAAAA AAAAAAIQ/L8AAAAAv3NIAGD6bwA4Pve/KAAAAB9B979wFPy/xbP3v3AU/L9aH/a/AAAAAAEAAADi E/e/bwEAAMUS97+hcQAAAAAAAEdj978AAAAAAQAAAKTHET/cTUMA+ANvAFof9r8AAAAAIAAAAODp J/qGesABAFgnusZ5wAFw+W8AxPEMACQNUAAcAQAA0Yn3vwAATQBADlAAxPEMAAAAAAAMAE0AAABN ACQNUABAAAAAAAAAANAFAAABBQAAmPlvAIGL978AAE0AmIv3vwAATQBBAAAAAAAAAAAAAAAAAAAA AAAAAMTARABNDVAAMKJOAFENUADRc0gA/////ygNUAAuwUQATQ1QACH5BAEAAAIALAAAAAA2ABwA QAjmAAUIHEiwoMGDCBMqXDhgAIGHECMSKGBggIGHAiVCbLjw4IACDjWKLEDRosiTBD4O6MiypcuX DDkabLgSJkOQKCGSrHiRQEaUKlk2JEm0qFGjNI8qPSrTptOnLmlqLNnT58amUAWozPmQKkYBQEHC 3Mp1olerXIN2JBsxKVKLcD++DdlWbEKaePPq3cu3L82sgAMLHky48N2GV1dKffjXMN6TZ38mrgkV MdfIYE9ifWn5Ms+vOTcLpZtzp0mfmYFSHl22a+TWohF21rjX617Va/suJel2qV+FfoMLF154r+Hj yJMnDAgAOw== ------=_NextPart_000_0016_01C24C98.EEDBAFF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://perso.wanadoo.fr/jm.doudoux/java/tutorial/images/chapitre.gif R0lGODlhDgFzAIcAAAYGHXp6hENDTSMjNWBgZ7Cwt5iYnyQkdEREiw0NW3x8umRkpDMzczAwPVNT jFdXXxQUJo6OlIyMuxMTfHNzpGVlhNPT3ZubvCMjUzIylENDa1NTq8fHyn19pCMjlEJCrRQURA0N OhwcXGNjvDMzW1JSdHx81IqK3XNzg66uuouLrgoKHioqN7KyyiwsdExMjBQUWj09c1tbixwceyws Uzs7lUxMa4GBjkhIVXR0e6urrhoaL5OTvHNzw2xsgaGhvlxcq2lpd4SEumtrpDw8TFhYX5GRlcnJ zYGBoxsbQmxsvDw8W11ddKOjsysrlEtLrIOD1QYGLHt7kkJCXCMjRGNjdbm5xZ2dqyUlgkNDmw4O azQ0gzMzTVRUnBISM4uLyxUVjXJytOPj5SMjZDQ0o0NDeg0NTBwcbpKS53R0lqyszpOTrgwMMyoq S7u7zCsriEtLnxMTcTs7iFtboRsbkSwsZzs7qEtLf2trmaKi0Ftbv7Ozw3p6zWRktFVVa4+Po9jY 5WNjnZyczVRUu8bG2nx8tBMTU2ZmyDMzbFJSg4SEm0pKZRsbPZSUznR00oODzGxstFxca5SUoszM 2YWFthsbU2xszDw8a1tbhC4uoU9PuIeH4AYGI3t7i0NDVCMjPGFhbbKyupmZoyQke0RElA0NZHp6 xGRkrDMzezMzRFVVk1VVYxMTK4uLm4qKxhQUhHV1q2VliZqawiMjXDMznEREdFNTtMPD1Xp6rSUl mkZGsRQUSw0NQx0dZWNjxDQ0ZFJSfH192YuL43V1i62txImJtAsLIysrO7e30ysrfExMlBQUYzo6 fFpalBwchC0tWzs7m0pKdISEk0pKW62ttBoaNJSUw3Jyy2lpiqWlxVtbs2pqfYKCwWtrrTs7VFpa ZZOTncvL04ODrBwcTGtrxDw8Y15eeSsrnEtLtIOD3AYGNHx8mEREYyUlS2RkepyctCQki0NDpA8P dTQ0jTMzU1VVoxQUPImJ0xcXkHJyvOXl6SQkbDc3qEREhA0NUv///yH5BAEAAP8ALAAAAAAOAXMA AAj+AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX MGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOK 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 ------=_NextPart_000_0016_01C24C98.EEDBAFF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://perso.wanadoo.fr/jm.doudoux/java/tutorial/images/2.gif R0lGODlhMgBzAIcAABYaLmWBw0VSbEtWs7a4yJGRlS06Vl5pg36Z2GaByVZrsUVWjDU9e3mN5aur rl1r2yEqRENFU3GQ31tcZWluf22E605imz9JYzA8YXF6vpWaxV94vDxLe5+tyiYsWtPW43ea5mV5 3FdgdnZ4flJWdVRktltfjcnKznOD3mB1zUdTohseQ36AjISp/0dRep2gr1tsylhegjNCYoKm/cfH yWyKzjQ2V3GM7Kuw0Xyg73uMvjdBen+X6GJz3CcxSz9KkqWz1XV6pTk+XVRrpFtytEZZja+xt0BG b1ljpjE3dWp79FdkzE9espeZpGyF315gbWtyg3aE605gp5Wk35mr3yoyXnuc9XB4jR4kRYOIlT5H YjtDjR4lPU1RZr7E0zFAXomTznaS9EZOeml95k1dpU5ahbGzulJdxCAkSxkeOTM4TYmYu2mFzlht uGFv5iosPjk9Y2R8znmb6l1nt0tWgaGluFpif8HF3jpEg2V07S4zR1p0rUlckURNc5mcp2FkcOPk 5ouQr3WFsJqiz4+a20dKXXuW1MLI4FRbdnGO3l90yzxEXi41bWdrfISay1NiiIKFl0ROoHZ3fLq9 0GN9w3h5gUlUrYWNxnh8qlhvrVlm0VFevFFkqZin4aKr3Xx+i2RmekZRnnaU62ptiW6B/DpJcjU/ dZCa1z9KjigvXWd56lVjwjdFc26K3HSM/H+h+XmV/ae04V50w3GF/IeJpThEdkhUckBNjLS2wyEl UjI8W1lqwikzUktcnEhMW36X4GFrjRYaNEZRc5OUnC46W2eB0kRRljY9g62usl9s4yQuSnST41xe aWpthW6D8zI7bz5LhZis13eY62Z543d4gFRkvcvM0WJ11EdRq0FShJ6isV1s1DVDbcHH122L1HON 9H6h9DdAg3mW9mNz4ycyUFVsqV53ua+wuEFGdWx8/U5Zu5CYrWyF5Vhhdm1zinCG9U9gqJem4Zip 4i03Ynyb/B8jTIWKmjxCaj9Hl09UbL7C2IqU0HeR/Wl87U1bq////yH5BAEAAP8ALAAAAAAyAHMA AAj+AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX MGPKnPnSgU1AK2lECLaiHpp6NoadBDQh2CdkA2n4gWPDGklAb/7gPOinHtKQUK8CQtZs1Cg/Tv8B gnPVY1axkBglOXZsC1sTTseW3XgWGbokWyINOMNX3YAttMSS5XjWDKO8Z5Ykc5PHjRtNSywFETzX YmG8A5YwTpeHM+fH6jBRxlj48ABNeTqnW82a8wN1uP6ZgTO14oQ/YvtsOa26te88D+YIJPHJoiRf AtEds4Tat/PVeTTV+WfNQ+2IyN7gHMUg0pJxz5/+K0mWQeA9PxTfCLXG6MeZcUrSkWKdelxq1vPz LMEJicREB2kI1AwDlmwTH2tKeIITIJdoAt9qpCjxwCSypTIRM6AIxMgtq3RGSoRRfFAQAZs8EN98 42ggVhVhQcRMIxpGYiAps6QTxYKQjAIJToFs0oMS8/VziUCpVNbQHzD+84wKM5LSzx3/4MIIIqMc AYlYkWjSz4f97EOkGRINA4dAiDAJ5JNRihHWKO4IhEcJ4M3SpUAegCmRLuhZw2EP/RAilhhlsSkQ A/6MQ+Oc/6RiZ0SACGGEbEhUg8Ofi/6Tz5WAPONPD4d6mWilEDVaKSBigIoFmGbUwsQ0hw6yYov+ EokqkDV9gOoAGgKNgkc1/cwipxeyVXFRoyQ0U6RBn+QjUB8qwNCPK7OMQaEZwg7LQjPXCQRIME75 wQAZ1zgD7TQCNiNSJV0se0s1Y8ziShQokHklSDSkwV8t4IrrijN+/lMFqHS98agZS7bRTxSuuFKB PsGGFEFxmd5SwjQIJzyGQFCY+9Ftf0LDyTUVJPyuJ69ujBup0IAbssgV8IeIybmlrEgF37gCiyvf kAwIix5xDEgf0Pgzc82w3NyAQHbMy5HPfdzCiSLsEJ1wBSJq00fPJwP9dNQ2F33DIVH2kS1Gxy3r MdRd3/zNFGK5APBFDuiBkzsckCFL1EUXvbb+WHS8bRkA3bLSy93f5A3L3oD07ZF61D2zQBtOFJ43 4mX4bdEwaiDtcRyS6x2PWJWbBfg/fggexw2Gf0MF6JZbNEK6//SRDeRh0EMPLGGsDkjoH+mRp+k3 2I677rx7RAMX/HGgQCuwCM+DQMDYE1Ilyv5jywKUBH+7KFXbIpIvmHJjQTG10yNOLGJxA6tHXAzM QTlOWGG7KDjZY4dINEDAXzZEaG/F6v+QAZi2ggxkOMBIFXGAMjCGPVG8gh6igJIZMMANDnCDGLwg RwaV8YmxhWkRSONDHBxIj2UIxAhGMIMZ1mcGRCxifRL5AwUEIj42yI8ev3CIGXiBwIf8QWP+3OCE N6zwiv9pC4Vm8IM7lrhEOwFiEY+iyB+gIBAODKEVVpiBFeSggyJwoBQcyEY2ilAEPphxAY8Y4CJ6 yJApVnEIiaDHDHDIhg2UYw9EIAIl9piABASAEkSwwHQAwQsYHomK/7BiIsAxgzmCYBmQjKQo5EBJ K0AyAeXo1gUm4sZEwvEVjZzBK14BDlCG8pSklIM3BLGsJsQQkaX45ClnSctGvkIUlMAYIiEyjE3+ 4wBD8AY4WkDMYhJzBi1AJjKLOQNweEOXEkEGLwRyBQvUgJHGzKY2iQkOQ5BJehIhB6r4EAA5LPOY tQxlMq0ABLEQw5AMYcHL/vGIPRhCDuCNyCc4KElJEPiTn3LIQQ5AUD/cUKQRVAREINZQA28gIBpA OIEXJkrRiXbAETUwBLDMIAAPPgShFjGDLTwKEYRmCxAqTKlKa2OGfJA0Io0wgC6gAIU/EEMXMsip TncqgJqKjSPWMAJN7WEEeFLHD1Cwx0tpwtSmOvWpUI2qVKdK1apa9apYzapWt8pViAQEADs= ------=_NextPart_000_0016_01C24C98.EEDBAFF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://perso.wanadoo.fr/jm.doudoux/java/tutorial/images/5.gif R0lGODlhMgBzAIcAABIVLWWBw0FLZEpUsra5xpGSll9pg4mYuicxTlFXbWeCzFZouiswaD9LjnuF 11xp26Spu3CQ1ePj5Wlvfzk+Xm2E7EdajMfHyXB5s3eZ42F7vTVDa0tYfVBlnGZ83Kuv1B0jPH6C jDtKdFNjtDFAXV9hbGNyuoSq/icwU0pXpIia4oSOvZeex7CxtnF4jCotPXKC31tszENMom+J7M/R 1zpEhFNpo32X3yQrUkhPgE9dsbu/z52hrWyJ1WN13KWqwWl59IuSpUdSdFxkgjQ8XTg/h0NTjGp3 nktapX6i9EBHayEpRYSJlkVRbJeZo1pfiVpysTE7bK+wtjhAV8LJ22x830RNdFZizWBjbi46XGN3 pI2V2lFcwlVbdGmB3XaV7GxyhHCF9k5jnHuc9DxEaqa11yAmSIKFl4Sh5HKL8nmV+r3B0hUYNElN YYKe3jI3SUFOkWBu56ytskpcj2R60l1muSs1WoWStHt9iF9x0NLV4F1wmlFeuWV07TY9gUJDUXuP 6pOf42VxkKm43aeu7ZOk1YGl/Iyj33uIy+fo7HCN40dTpMHF3mF20CwxPqKmvcrLzxseQoiUxmmE wmZre2mDzVptvnmb6ouOsIeW5KityJmcp1lm0Vhdf62x15aXonSS5WpuiW6C+jdBelBiq2d56h4i SniCmz5MhFZkw1pie7S2wT5HkW+K5UJShUZTnE1QbV1yxD1EYml960BPhmRmeXeR/DlEfo6l4XWL /r7C2Iid2kJLnK+vuElamyszYVlxr7K53EJLa01XuZSVnFFUdi82cl5s4XOT3Obm6mlshDo/Ym6D 9GJ9wmZ54h0iRX+Bkz1Ne1RjvTNCYlhid0lUrrCyuXZ/liwtQ1xs0m+I8M/R2jpCi1ZrrXqQ5yYr Wk9Zvbu90m6L3GNz5Wx8/V5mizA7YkVVkml0pE5drX+h+0FGciMrTISJml10vTQ9c6+wuDtDXWl+ 5EVMfGFjcy46YmN1qFNfyFZcemyE5W1yinGG+3yb+zhHcaSy2P///yH5BAEAAP8ALAAAAAAyAHMA AAj+AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX MGPKnGlSjpwLDi/Y5CjnBZtIpoJGGkq06NBnQGFJyCgHGzGBElbZlCqHqlU5S//hIZK1YtOuE+Vw 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 TrCCF8zgBjv4wRCOMIQDAgA7 ------=_NextPart_000_0016_01C24C98.EEDBAFF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://perso.wanadoo.fr/jm.doudoux/java/tutorial/images/construct4.gif R0lGODlhkAAyAPcOAAAAAB6Q/+bm+rIiIr6+vi9PT/8AAAAAgP//////AP/XAHCAkP+lAL+/v/// gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAA4ALAAAAACQADIA QAj/AB0IHEiwoMGDCBMqXMiwocOHECNKJLigwAIEAQoUmMgx4YKKAQIcGDBgY8eTKD0WSAAAgAOM B1I+/GhyYYEBCxq8FBmTYcufMoNe1GiRAAGYGitWrBn0YM4FDpR+jLrAwAKjBK5eNUpTqsUECRgo YGCg7ACXTQm2JPmxbdKjCBC01QoXAdesXYl+/Mm3r9+/gFsatYu3YtzDH7FypQkALAOxZM2eBdA1 pVulLdMOfJpXs0QAJMdCfjyW5E8DA1CTnNzyckXPsGPLnk27tu3bEj+eLYDg7GOwa8GyVKqxAU2m FJMuYMtg7QAGk4WbdvxRJO7aNy/KRQrVoXa5lSO2/y1YwABYk4YRWJxLc2BjA6Sho739UfryuocL s1+/lDP7tgRQ1hYARvG11wICGjeXAxYh0EADih2G2GJzFdBYWGKVpdp8Mq2UwG7dbfbfXHhhVWF/ FiF3XUEjJmURA2CNJZoCqPmFolRTraijbM5paNpPOe4o5JBEQjRUT0UmueICLEk3wHlB1lYRWGc9 +eEACiiZlkYsUWadiMtNZuWHo7HVV1s/rgZAmT9R+RNOy4G1AJJadsTkRoZ9WedXCegk0EUhpXhQ Y6w9xyGRhkkFk1IMfRRXVsYJIGhDj+o3VZgFZFWXADgS150CjsH3I6K85XcVeCkSl6KKHj2l4HgQ af80mIRHaboUfwg6NpaPmcnWH06U4TorXVtRuJ6LgSWrrI0SjphYsRJyyiSGM24YYkoWGjheRfiB 9yxi/616awGv7rXsX229atBx4GqVF2YxQgZfja0dy6pDq1GJk0LpkpjVvQMdRpVGWq45Y7wZFvqj gcfC2qhFvdZpG1/wyfiYvKktHOxrEnd8El8ehyzyyCSXjJBxJqfMEW96JrlAAMYlpbJEK10op0VC avSTAFdGObNNuhkKmnAtpdqUpxB7+KHNqw3wc0OY8XZAawiCZuVajzmXMVtVm7YhamNZrcB0+rak mkYwPa2Qhy6lvS6uzgKdqotupRrkchY1gMABdKr/LZCH3bkt8Uo4+YlRy4NqKNahRVZFVFyIN8Qf zk2lCJafFQkQ14lqJaDacwowPuRymwN6wKQ2lfqggpRTWjqjUbG16mFww+7AhRnWqCTaypludKNU RQUwQg5+9GCFFuG0HlcNX2a5rp+Lfh3am2clVwDOO6yjbrMSBqC4ECNMo2kr6pW8hN43PLfMFK3O 3vHOzoVyQg2iT6trc+EummTSa3aTaUrpnqnaIoDF6AUz2jrXmQSEoKodR3OP8pdi8CItuXgIMrsy S/+wNa0uAaAotdqKCBUjQk8tRYEoBEy72FMrTR3FUXvRlbw2FKzW2WktDiQR+lgIlwO6RlwpVGDV nxRULupVSjuFSdGFZpSwyazKhuLhUgNDlJgd+muFqurPtf70n1cZB34LapSCvGUioogLRhjKHb3q lb2INC0BtgOTVBRkqdU9CFcDodueqobGi+0qTayhmvp8dhAPyQ5Bsdoi8XICPyjqqCWjsRjGTtM0 G8ENaqmKmN8iYrbUWKxaZvncwji3ySS9SUMW0yCQHFnKjvElkK2MpSxnKZOAAAA7 ------=_NextPart_000_0016_01C24C98.EEDBAFF0--