TP-intergiciel/TP2/tp-rmi.html

162 lines
6.2 KiB
HTML
Raw Normal View History

2023-04-22 15:36:05 +00:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="CONTENT-TYPE"
content="text/html; charset=windows-1252">
<title></title>
<meta name="GENERATOR" content="OpenOffice.org 1.1.4 (Win32)">
<meta name="CREATED" content="20051027;135681">
<meta name="CHANGEDBY" content="Daniel Hagimont">
<meta name="CHANGED" content="20051106;19023960">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta name="Originator" content="Microsoft Word 10">
<meta name="Template"
content="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:Zoom>95</w:Zoom>
<w:GrammarState>Clean</w:GrammarState>
<w:HyphenationZone>21</w:HyphenationZone>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tableau Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman"}
</style>
<![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1"/>
</o:shapelayout></xml><![endif]--><!--[if gte mso 9]>
<xml><o:shapedefaults v:ext="edit" spidmax="1027"/>
</xml><![endif]--><!--[if gte vml 1]><v:shapetype id="_x0000_t75"
coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"
filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_s1025" type="#_x0000_t75" style='width:172.5pt;
height:114pt'>
<v:imagedata src="TP1_fichiers/image001.gif" o:title="logo_inpg"/>
</v:shape><![endif]-->
<style>
<!--
P { color: #000000 }
A:link { color: #0000ff }
A:visited { color: #800080 }
-->
</style>
</head>
<body dir="ltr" lang="fr-FR" link="#0000ff" text="#000000"
vlink="#800080">
<br>
<p align="center"><font style="font-size: 20pt;" size="5"><b>TP RMI</b></font></p>
<p style="margin-bottom: 0cm;" align="center"><font size="3">Daniel
Hagimont</font></p>
<p style="margin-bottom: 0cm;" align="center"><font size="3">Daniel.Hagimont@enseeiht.fr</font></p>
<p align="center"><br>
<br>
</p>
<p style="margin-left: 1.27cm;">L'objectif de ce TP est d'utiliser Java
RMI pour implanter une petite application dans laquelle une applet
permet de saisir les coordonn<6E>es d'une personne (nom, adresse email) et
de les enregistrer dans un serveur. L'interface permet de s<>lectionner
le serveur dans lequel la personne doit <20>tre enregistr<74>e. On g<>rera 2
serveurs.<br>
L'application permet <20>galement de rechercher l'email d'une personne qui
a <20>t<EFBFBD> enregistr<74>e en indiquant le serveur dans lequel faire cette
recherche.<br>
</p>
<p style="margin-left: 1.27cm; text-align: center;"><img
style="width: 329px; height: 162px;" alt="fig" src="fig.jpg"><br>
</p>
<p style="margin-left: 1.27cm;"><br>
Si on ne trouve pas la personne dans le serveur indiqu<71>, la recherche
est alors propag<61>e au second serveur.<br>
</p>
<p style="margin-left: 1.27cm;"><br>
L'interface d'un serveur est la suivante :<br>
</p>
<p style="margin-left: 1.27cm;">public interface Carnet extends Remote {<br>
&nbsp;&nbsp;&nbsp; public void Ajouter(SFiche sf) throws
RemoteException;<br>
&nbsp;&nbsp;&nbsp; public RFiche Consulter(String n, boolean forward)
throws RemoteException;<br>
}<br>
</p>
<p style="margin-left: 1.27cm;">public interface SFiche extends
Serializable {<br>
&nbsp;&nbsp;&nbsp; public String getNom ();<br>
&nbsp;&nbsp;&nbsp; public String getEmail ();<br>
}<br>
public interface RFiche extends Remote {<br>
&nbsp;&nbsp;&nbsp; public String getNom () throws RemoteException;<br>
&nbsp;&nbsp;&nbsp; public String getEmail () throws RemoteException;<br>
}</p>
<p style="margin-left: 1.27cm;"><br>
L'enregistrement d'une personne utilise la s<>rialisation pour envoyer
au serveur une copie d'un objet d'interface SFiche.<br>
La consultation retourne une r<>f<EFBFBD>rence <20> un objet RMI d'interface
RFiche ; l'applet qui consulte peut alors r<>cup<75>rer l'adresse email par
un appel <20> distance sur cette r<>f<EFBFBD>rence.<br>
La m<>thode de consultation inclut un param<61>tre bool<6F>en <span
style="font-style: italic;">forward </span>indiquant si la requ<71>te
doit <20>tre propog<6F>e <20> l'autre serveur (pour <20>viter de boucler).<br>
</p>
<p style="margin-left: 1.27cm;">On vous donne :<br>
- Carnet.java : l'interface d'un serveur<br>
- SFiche.java : l'interface de l'objet
s<EFBFBD>rialis<EFBFBD> pour l'enregistrement aupr<70>s d'un serveur<br>
- RFiche.java : l'interface de l'objet
RMI retourn<72> lors de la consultation aupr<70>s d'un serveur<br>
- Saisie.java et page.html : l'applet implantant l'interface graphique
de l'application<br>
&nbsp;&nbsp;&nbsp; Pour lancer l'applet :<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; - en standalone : java Saisie<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; - avec l'appletviewer :
appletviewer -J-Djava.security.policy=java.policy<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; - depuis un navigateur, plus
compliqu<EFBFBD>, il faut signer l'applet ...<br>
</p>
<p style="margin-left: 1.27cm;">Vous devez :<br>
- implanter CarnetImpl.java : la classe d'un serveur<br>
- implanter SFicheImpl.java : la classe de l'objet s<>rialis<69><br>
- implanter RFicheImpl.java : la classe de l'objet RMI retourn<72> par le
serveur<br>
- compl<70>ter Saisie.java : pour faire les appels aux serveurs<br>
</p>
</body>
</html>