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) {} ; }
}
}