20.01.2015 Views

Feuille de TD 4

Feuille de TD 4

Feuille de TD 4

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Université <strong>de</strong> Provence<br />

MASTER INFORMATIQUE<br />

Programmation Parallèle<br />

et Distribuée<br />

2011-2012<br />

Java RMI<br />

1 RMI<br />

1. Donner toutes les manières possibles d’obtenir un objet distant. Pour chacune d’entre elles,<br />

proposer un exemple illustratif.<br />

2. Un objet distant peut-il être considéré comme une variable partagée entre différents clients<br />

RMI Si oui, comment doit-on gérer les accès concurrent <br />

3. Qu’est-ce qu’un ramasse-miette En quoi un ramasse-miette distribué <strong>de</strong>vrait être différent<br />

d’un ramasse-miette local.<br />

2 Calcul Parallèle<br />

Etant donnée la formule <strong>de</strong> Leibniz :<br />

π = 4 arctan(1) = 4<br />

∞∑<br />

n=0<br />

(−1) n<br />

2n + 1<br />

Il s’agit ici <strong>de</strong> distribuer le calcul en sous-sommes <strong>de</strong> i à j ( ∑ j (−1) n<br />

n=i 2n+1<br />

). Le client <strong>de</strong>vra distribue<br />

le calcul parmi un certain nombre <strong>de</strong> serveurs.<br />

1. Quel est le problème avec le co<strong>de</strong> ci-après Comment peut-on résoudre le problème <br />

Calcul.java<br />

import java . rmi . ∗ ;<br />

import java . math . ∗ ;<br />

public i n t e r f a c e Calcul extends Remote {<br />

/ / metho<strong>de</strong> c a l c u l a n t l a somme <strong>de</strong> i a j<br />

public BigDecimal c a l c u l e r ( i n t <strong>de</strong>but , i n t f i n )<br />

throws RemoteException ;<br />

}<br />

CalculImpl.java<br />

import java . rmi . ∗ ;<br />

import java . rmi . server . ∗ ;<br />

import java . math . ∗ ;<br />

public c l a s s CalculImpl extends UnicastRemoteObject implements Calcul {<br />

public CalculImpl ( ) throws RemoteException {<br />

super ( ) ;<br />

}<br />

}<br />

public BigDecimal c a l c u l e r ( i n t <strong>de</strong>but , i n t f i n ) {<br />

BigDecimal somme = BigDecimal .ZERO;<br />

for ( i n t j =<strong>de</strong>but ; j < f i n ; j ++){<br />

i n t c o e f f = ( j %2==0)1: −1;<br />

BigDecimal terme = new BigDecimal ( c o e f f / ( 2 . 0 ∗ j + 1 . 0 ) ) ;<br />

somme = somme . add ( terme ) ;<br />

}<br />

somme=somme . multiply (new BigDecimal ( 4 ) ) ;<br />

return somme ;<br />

}<br />

1


CalculServer.java<br />

import java . math . ∗ ;<br />

import java . rmi . ∗ ;<br />

public c l a s s CalculServer {<br />

public s t a t i c void main ( S t r i n g args [ ] ) {<br />

i f ( args . length ! = 1 ) {<br />

System . out . p r i n t l n ( " Syntaxe : java CalculServer port " ) ;<br />

}<br />

t r y { / / C r e a t i o n <strong>de</strong> l ’OD<br />

CalculImpl od = new CalculImpl ( ) ;<br />

/ / E n r e g i s t r e m e n t <strong>de</strong> l ’OD dans RMI<br />

Naming . rebind ( "// l o c a l h o s t : "+args [ 0 ] + "/ c a l c u l " , od ) ;<br />

System . out . p r i n t l n ( " Enregistrement termine . . . " ) ;<br />

}<br />

catch ( Exception e ) {<br />

System . out . p r i n t l n ( "L ’ enregistrement a echoue . . . \ n"+e ) ;<br />

}<br />

}<br />

}<br />

CalculClient.java<br />

import java . rmi . ∗ ;<br />

import java . rmi . r e g i s t r y . ∗ ;<br />

import java . net . ∗ ; / / pour l e s u r l<br />

import java . math . ∗ ;<br />

public c l a s s C a l c u l C l i e n t {<br />

public s t a t i c void main ( S t r i n g args [ ] ) {<br />

i n t nbServeur= args . length /2;<br />

i n t n ;<br />

BigDecimal t o t a l = BigDecimal .ZERO;<br />

Calcul [ ] od=new Calcul [ nbServeur ] ;<br />

i f ( args . length %2!=1) {<br />

System . out . p r i n t l n ( " Syntaxe : java C a l c u l C l i e n t n serveur1 port1 serveur2 port2 . . . " ) ;<br />

}<br />

e lse {<br />

n= I n t e g e r . p a r s e I n t ( args [ 0 ] ) ;<br />

for ( i n t j =0; j

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!