Programación Distribuida y su Aplicación Bajo Internet
Curso: 2007-2008
Autor: Juansa Sendra
import java.rmi.*;
public interface Sumador extends Remote {
long suma(String s) throws NumeroIncorrecto, RemoteException;
}
public class NumeroIncorrecto extends Exception {
private String mensaje;
NumeroIncorrecto (String s) {mensaje=s;}
public String getMessage() {return mensaje;}
}
import java.rmi.server.*;
import java.io.*;
import java.util.StringTokenizer;
public class ImplemSumador
extends UnicastRemoteObject
implements Sumador {
public ImplemSumador() throws RemoteException {}
public long suma(String s)
throws NumeroIncorrecto, RemoteException {
long n=0;
StringTokenizer st= new StringTokenizer(s);
while (st.hasMoreTokens()) {
String token=st.nextToken();
try {n+=Long.parseLong(token);}
catch (NumberFormatException e) {
throw new NumeroIncorrecto(
'No puedo interpretar '+token+
' como un entero');
}
}
return n;
}
}
import java.rmi.*;
public class ServidorSumador {
public static void main (String[] args) {
System.setSecurityManager(new RMISecurityManager());
try {
ImplemSumador sum= new ImplemSumador();
Naming.rebind('SUMADOR',sum);
System.out.println('Preparado');
} catch (Exception e) {e.printStackTrace();}
}
}import java.rmi.*;import java.rmi.registry.*;import java.net.*;import java.io.*;
public class ClienteSumador {
public static void main (String[] args) {
System.setSecurityManager(new RMISecurityManager());
try {
Sumador sum= (Sumador) Naming.lookup('SUMADOR');
LineNumberReader entrada= new LineNumberReader(
new BufferedReader(new InputStreamReader(System.in)));
for (;;) {
String linea= entrada.readLine();
if (linea==null || linea.length()==0) break;
String salida;
try {salida=Long.toString(sum.suma(linea));}
catch (NumeroIncorrecto e) {salida=e.getMessage();}
System.out.println(salida);
}
} catch (Exception e) {e.printStackTrace();}
}
}
javac ImplemSumador.java
rmic ImplemSumador
start rmiregistry
java -Djava.security.policy=politica ClienteSumador
grant {
permission java.security.Allpermision; // todo permitido
};
import java.rmi.*;
interface HoraExactaI extends Remote {
long obtenerHora() throws RemoteException;
} import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;
public class HoraExacta
extends UnicastRemoteObject
implements HoraExactaI {
// Implementación de la interface:
public long obtenerHora() throws RemoteException {
return System.currentTimeMillis();
}
// Implementación del constructor para lanzar RemoteException:
public HoraExacta() throws RemoteException {
super();
}
// Registro del servicio:
public static void main(String[] args) {
System.setSecurityManager(new RMISecurityManager());
try {
HoraExacta he = new HoraExacta();
Naming.bind("//canyella:2005/HoraExacta", he);
System.out.println("Preparado...");
} catch(Exception e) {
e.printStackTrace();
}
}
}rmic master.rmi.HoraPerfecta
import java.rmi.*;
import java.rmi.registry.*;
public class MuestraHoraExacta {
public static void main(String[] args) {
System.setSecurityManager(new RMISecurityManager());
try {
HoraExactaI t =
(HoraExactaI)Naming.lookup("//canyella:2005/HoraExacta");
for(int i = 0; i < 10; i++)
System.out.println("Hora Exacta = " +t.obtenerHora());
} catch(Exception e) {
e.printStackTrace();
}
}
}