Examen de Juin 2007 page 1 NFP 215 - Systèmes répartis
page 1
IPST-CNAM
Systèmes répartis
Cycle C / NFP 215
Jeudi 21 Juin 2007
Sans document
Durée : 1 heures 30 minutes
Enseignants : LAFORGUE Jacques
Session de JUIN NFP 215
(TRAVAUX PRATIQUES)
1. Exercice 1 (6 pts)
A travers la réalisation des 3 projets (projet 1, projet 2 et projet 3), nous avons vu la mise en place d'une
architecture logicielle permettant, notamment, d'illustrer les points suivants :
1. la séparation rigoureuse de l'IHM avec son applicatif
2. l'encapsulation de l'applicatif dans un objet distribué RMI (serveur)
3. la création des clients RMI dont la communication est monodirectionnel dans le sens client vers serveur
4. la portabilité de l’architecture en différentes couches de communication (RMI, CORBA, ...)
Expliquez comment chacun de ces points ont été réalisés en Java (avec RMI) et mettre en évidence les liens
d’interface, d’héritage, d’agrégation entre les composants logiciels.
A titre de rappel, les noms des classes et interface utilisés dans les corrections des TP sont :
AppSudokuServeur
IhmClient
AppSudoku
AppSudokuInt
AppSudokuOD
AppSudokuODInt
IhmSudoku
IhmSudokuRmiImp
Thread
UnicastRemoteObject
Remote
2. Exercice 2 (10 pts)
Dans le cadre du projet 2 étape 1, nous avons réalisé un client IHM et son serveur RMI.
On se propose, sur la même base d’architecture de classe, de coder que la fonctionnalité d’envoi de message
entre les deux IHM connectés au même serveur.
Je rappelle que la 1ère IHM n’envoie pas vraiment le message « Bonjour » à la 2ème IHM, mais elle demande au
serveur de mémoriser le message. Alors que dans un thread, chaque IHM demande au serveur le contenu
respectif de leurs messages.
Ecrire le code Java permettant de réaliser ce programme.
Le serveur est un objet distribué qui mémorise les messages.
Les méthodes getMessage et setMessage sont les deux seules méthodes distantes à implémenter.
Examen de Juin 2007 page 2 NFP 215 - Systèmes répartis
page 2
Afin de simplifier le programme, le numéro (0 ou 1) de chaque IHM est passé en paramètre du main du client
IHM.
Vous n’avez pas à écrire le code qui crée et affiche le frame de l’IHM. Vous pouvez partir du principe que le
Frame est passé en paramètre du constructeur de la classe d’IHM.
3. Exercice 3 (4 pts)
Ecrire le code Java qui permet de vérifier que le coup dans une grille de Sudoku est valide.
La grille et les caractéristiques de la grille sont des attributs de la classe AppSudoku.
Je rappelle qu’une grille de sudoku est soit une grille 4x4 dont chaque région est 2x2, soit une grille 9x9 dont
chaque région est 3x3.
Un coup est une coordonnée (i,j) et une valeur v (soit de 1 à 4, soit de 1 à 9, en fonction de la taille de la grille).
Un coup valide est un coup dont la valeur n’existe pas déjà dans la colonne, dans la ligne et dans la région du
coup joué.
Eléments de langage JAVA :
package <p>
import java.io.*;
import java.lang.*;
import java.net.*;
import java.util.*;
import java.awt.* ;
import java.rmi.*; import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.server.ServerNotActiveException;
import java.rmi.RMISecurityManager;
public class ObjetOD extends UnicastRemoteObject implements
ObjetODInt
public interface ObjetODInt extends Remote { <methode
distante> throws RemoteException, …}
try {LocateRegistry.createRegistry(port);}catch(Exception e){};
Vector: v=new Vector() v.addElement(Object)
Object v.elementAt(int) v.size()
ArrayList<String> lstr; lstr = new ArrayList();
for(String s : lstr){ ....... //s est l’élément courant }
lstr.add(s);
Integer i = Integer.parseInt(newString("..."));
new
public static void main(String args[])
public interface <i>
Naming.rebind(String URL, <objet distribuée>)
ServeurImp services;
services = (ServeurImp)Naming.lookup(String URL)
DataInputStream datain=new DataInputStream(System.in);
System.out.print(String);
String datain.readLine();
File f=new File(String [, String]) String f.getAbsolutePath()
FileInputStream fi = new FileInputStream(String);
DataInputStream di = new DataInputStream(fi)
String di.readLine() fi.length() fi.read( byte [ ] ) fi.close()
fis.read(donnees);
StringTokenizer s = new StringTokenizer(String)
boolean S.hasMoreTokens() String S.nextToken();
Stok.countTokens()
FileInputStream fich = new
FileInputStream(path+File.separator+nomFic);
BufferedReader flot = new BufferedReader(new
InputStreamReader(fich));
<class InputStreamReader>.readLine
Double.parseDouble;
throw new <Class exception>;
String str = input.readLine();
ServerSocket sos = new ServerSocket(9100);
Socket soc = sos.accept(); soc.close()
PrintStream output = new PrintStream(_soc.getOutputStream());
BufferedReader input = new BufferedReader(new
InputStreamReader(_soc.getInputStream()));
byte[] donnees = new byte[ <n>];
class XXX extensThread; méthode run();
XXX x = new XXX(…);
x.start();
class YYY implements Runnable; méthode run();
y = new YYY(…);
Thread t = new Thread(y);
t.start();
Class classXXX = Class.forName("cnamp."+nomPackage + "."
+ nomXXX);
XXXInt o = (XXXInt)(classXXX.newInstance());
private JTextField message;
message = new JTextField("");
class MessageAction implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
// On envoie le message
app.setMessage(numeroJoueur) ;
}
}
// pour accéder et changer un texte d’IHM
String s = message.getText() ;
message.setText(s) ;
JPanel panelIHM = new JPanel(new BorderLayout());
panelIHM.add( XXX,
BorderLayout.NORTH); // SOUTH, EAST, WEST
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !