Programmation WEB
d'une applet avec RMI
![]()
Un clic de souris sur le OK de l'applet de gauche provoque le déplacement du rectangle au sein de cette applet.
L'affichage de l'applet de droite est mis à jour toute les trois secondes par alignement sur la position de l'applet de gauche.
L'applet de gauche est l'applet Master qui enregistre les ordres de l'utilisateur, pour mettre à jour le serveur RMI qui stocke la position courante.
L'applet de droite est l'applet Slave qui contacte le serveur RMI pour y lire la position courante toute les trois secondes et ajuster son affichage en conséquence.
![]()
L'interface ExempleAppletRmiInterface.java spécifie les méthodes distantes.
import java.rmi.* ;
public interface ExempleAppletRmiInterface extends Remote {
public int position() throws RemoteException ;
public void position(int p) throws RemoteException ;
}
![]()
L'application serveur est composée de
l'interface ExempleAppletRmiInterface.java
et de la classe
ExempleAppletRmiServer.java.
import java.rmi.server.* ;
import java.rmi.* ;
import java.net.* ;
/* ************************************ */
/* Extension de UnicastRemoteObject */
/* Implantation de l'interface distante */
/* ************************************ */
public class ExempleAppletRmiServer
extends UnicastRemoteObject
implements ExempleAppletRmiInterface {
private int p ;
/* ************************************ */
/* Constructeur */
/* ************************************ */
public ExempleAppletRmiServer() throws RemoteException {
super() ;
p = 0 ;
}
/* ************************************ */
/* Fonction de l'interface distante */
/* ************************************ */
public int position() throws RemoteException {
return(p) ;
}
/* ************************************ */
/* Fonction de l'interface distante */
/* ************************************ */
public void position(int pos) throws RemoteException {
p = pos ;
}
/* ************************************ */
/* Application serveur assurant */
/* la creation d'un objet distant, */
/* sa referenciation avec namming */
/* sur la rmiregistry de l'hote local */
/* ************************************ */
public static void main(String [] args) {
try {
ExempleAppletRmiServer ib =
new ExempleAppletRmiServer();
Naming.rebind("objet",ib) ;
System.out.println("Prêt"); }
catch (RemoteException re) {
System.out.println(re) ; }
catch(MalformedURLException e) {
System.out.println(e) ; }
}
}
![]()
L'applet de gauche est composée de
l'interface ExempleAppletRmiInterface.java
et de la classe
ExempleAppletRmiMaster.java.
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.rmi.*;
import java.net.*;
public class ExempleAppletRmiMaster extends Applet implements ActionListener {
private int p = 0 ;
private String objet;
private ExempleAppletRmiInterface b;
public ExempleAppletRmiMaster() {
setLayout(new BorderLayout());
Button b = new Button("Go");
add("South",b);
b.addActionListener(this);
setBackground(Color.white);
b.setBackground(Color.white);
}
public void init() {
URL url = this.getDocumentBase();
objet = "rmi://"+url.getHost()+"/objet" ;
try {
b =(ExempleAppletRmiInterface) Naming.lookup(objet); }
catch( RemoteException e) { }
catch( NotBoundException e) { }
catch( MalformedURLException e) { } ;
}
public void paint(Graphics g) {
g.drawRect(25*p+2,3,20,120) ;
}
public void actionPerformed(ActionEvent e) {
p = (p+1) % 10 ;
try {
b.position(p); }
catch( RemoteException re) { } ;
repaint();
}
}
![]()
L'applet de droite est composée de
l'interface ExempleAppletRmiInterface.java
et des classes
ExempleAppletRmiSlave.java
import java.applet.Applet;
import java.awt.*;
import java.net.*;
import java.rmi.*;
public class ExempleAppletRmiSlave extends Applet {
public int p = 0 ;
private String objet;
private boolean bc = true ;
private ExempleAppletRmiInterface b;
public ExempleAppletRmiSlave() {
setBackground(Color.white);
}
public void init() {
URL url = this.getDocumentBase();
objet = "rmi://"+url.getHost()+"/objet" ;
try {
b =(ExempleAppletRmiInterface) Naming.lookup(objet); }
catch( RemoteException e) { }
catch( NotBoundException e) { }
catch( MalformedURLException e) { } ;
ExempleAppletRmiThread art;
art = new ExempleAppletRmiThread(this,b) ;
art.start() ;
}
public void paint(Graphics g) {
g.drawRect(25*p+2,3,20,120) ;
}
}
et ExempleAppletRmiThread.java
import java.rmi.*;
public class ExempleAppletRmiThread extends Thread {
private boolean bRun = false;
private ExempleAppletRmiSlave ars;
private ExempleAppletRmiInterface ari;
public ExempleAppletRmiThread() {
super();
}
public ExempleAppletRmiThread(ExempleAppletRmiSlave s,
ExempleAppletRmiInterface i) {
ari = i;
ars = s;
}
public void run() {
bRun = true ;
while ( bRun ) {
try {
ars.p = ari.position(); }
catch( RemoteException re) { } ;
ars.repaint();
try {
sleep(3000) ; }
catch (InterruptedException e) {} ; }
}
}
![]()