Programmation WEB
d'une applet avec RMI

Horizontale.gif (2348 octets)

</COMMENT> alt="Your browser understands the &lt;APPLET&gt; tag but isn't running the applet, for some reason." Your browser is completely ignoring the &lt;APPLET&gt; tag! </COMMENT> alt="Your browser understands the &lt;APPLET&gt; tag but isn't running the applet, for some reason." Your browser is completely ignoring the &lt;APPLET&gt; tag!

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.

Horizontale.gif (2348 octets)

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

Horizontale.gif (2348 octets)

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

Horizontale.gif (2348 octets)

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

Horizontale.gif (2348 octets)

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

}

Horizontale.gif (2348 octets)

WB01624_.gif (281 octets) RETOUR