home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Server Interface

package rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface IMeldeamtServer extends Remote{
  boolean pruefeReisePass(Reisepass passthrows RemoteException;
  String verlaengereReisepass(Reisepass pass, int anzahlJahrethrows RemoteException;
  int add(int a, int bthrows RemoteException;
}

Server

package rmi;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.RemoteServer;
import java.rmi.server.UnicastRemoteObject;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MeldeamtServer extends UnicastRemoteObject implements IMeldeamtServer {
  private static String URL = "//127.0.0.1/MeldeamtServer";
  private static SimpleDateFormat sdf = Reisepass.sdf;

  public MeldeamtServer() throws RemoteException {
    super();
  }
  
  public boolean pruefeReisePass(Reisepass pass) {
    try {
      Date date = sdf.parse(pass.getGueltigkeitbis());
      if (date.after(new Date())) {
        return true;
      
    catch (ParseException e) {
      e.printStackTrace();
    }
    return false;
  }

  public String verlaengereReisepass(Reisepass pass, int anzahlJahre) {
    pass.verlaengern(anzahlJahre);
    return pass.getGueltigkeitbis();
  }

  public int add(int a, int b) {
    return a + b;
  }
}

RegistryStarter

package rmi;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.RemoteServer;

public class RegistryStarter {
  private static String URL = "//127.0.0.1/MeldeamtServer";

  public static void main(String[] args) {
    try {
      IMeldeamtServer server = new MeldeamtServer();
      //IMeldeamtServer stub = (IMeldeamtServer) UnicastRemoteObject.exportObject( server, 0 );

      System.out.println("Port: " + Registry.REGISTRY_PORT);
      LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
      Registry registry = LocateRegistry.getRegistry();
      registry.rebind(URL, server);
      RemoteServer.setLogSystem.out );

    catch (RemoteException e) {
      e.printStackTrace();
    }
  }

}

Client

package rmi;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class MeldeamtClient {
  private static String URL = "//127.0.0.1/MeldeamtServer";
  public static void main(String[] args) {
    try {
      Registry registry = LocateRegistry.getRegistry();
      IMeldeamtServer server = (IMeldeamtServer)registry.lookup(URL);
      System.out.println("Addition : " + server.add(34));
      Reisepass pass = new Reisepass("Angela""Merkel"20051112);
      System.out.println("Der Reisepass ist gueltig: " + server.pruefeReisePass(pass));
    catch (RemoteException e) {
      e.printStackTrace();
    catch (NotBoundException e) {
      e.printStackTrace();
    }
  }

}

Klasse Reisepass

Diese Klasse soll illustrieren, wie man zwischen Client und Server auch komplexe Datentypen (Klassen) austauschen kann.

package rmi;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Reisepass implements Serializable{
  private String vorname;
  private String nachname;
  private Date gueltigBis;
  public final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  public Reisepass(String nachname, String vorname, int jahr, int monat, int tag) {
    this.gueltigBis = new GregorianCalendar(jahr, monat-1, tag).getTime();
    this.nachname = nachname;
    this.vorname = vorname;
  }
  public String getNachname() {
    return nachname;
  }
  public void setNachname(String nachname) {
    this.nachname = nachname;
  }
  public String getVorname() {
    return vorname;
  }
  public void setVorname(String vorname) {
    this.vorname = vorname;
  }
  public void verlaengern(int jahre) {
    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(gueltigBis);
    gc.add(Calendar.YEAR, jahre);
    gueltigBis = gc.getTime();
  }
  
  public String getGueltigkeitbis() {
    return sdf.format(gueltigBis.getTime());
  }
}