160 likes | 333 Views
RMI JAVA. Implementación. Características. Bajar dinámicamente componentes de java de un URL a JVM, ejecutándose en un proceso diferente. RMI baja y ejecuta el bytecode de clases que no están instaladas en el disco.
E N D
RMI JAVA Implementación
Características • Bajar dinámicamente componentes de java de un URL a JVM, ejecutándose en un proceso diferente. • RMI baja y ejecuta el bytecode de clases que no están instaladas en el disco. • RMI baja los clases especializadas stub, que habilita las llamadas a métodos remotos. • La noción de codebase origina el uso de ClassLoaders en java.
ClassLoader • Los ClassLoaders necesitan saber la ubicación en donde va a serle permitido carga la clase. Es usado en conjunción con un servidor HTTP que contiene las clases compiladas.
Codebase • Es la fuente o lugar desde donde se descargan clases a un JVM. • CLASSPATH es un codebase local.
RMI • Usando RMI aplicaciones pueden objetos remotos que aceptan llamada a métodos desde otros clientes en otros JVM. • El cliente para que pueda invocar un método remoto necesita una manera de comunicarse. • RMI usa una clase especial llamada stub, que es bajada del codebase.
Server public class CalcServer{ public static void main(String args[]){ try { CalcImpl cal = new CalcImpl(); Naming.rebind("calculo", cal); } catch(Exception e){ e.printStackTrace(); } } }
Implementacion public class CalcImpl extends UnicastRemoteObject implements Calc { public CalcImpl() throws RemoteException { operador1 = 0; operador2 = 0; } public double suma(double x, double y) throws RemoteException { operador1 = x; operador2 = y; return operador1 + operador2; }
Registrar metodo remoto • start rmiregistry • cd \myjava\rmi\server • start java -Djava.rmi.server.codebase=http://localhost:8080/download/ CalcServer
Interfase import java.rmi.*; public interface Calc extends Remote { double suma(double x, double y) throws RemoteException; double resta(double x, double y) throws RemoteException; double multiplica(double x, double y) throws RemoteException; double divide(double x, double y) throws RemoteException; }
Cliente public class CalcClient { public static void main(String[] args) { System.setProperty("java.security.policy", "client.policy"); System.setSecurityManager(new RMISecurityManager()); try { Calc c1 = (Calc)Naming.lookup ("rmi://127.0.0.1:1099/calculo"); System.out.println(c1.suma(8,5)); } catch(Exception e) { e.printStackTrace(); } }
Policy grant { permission java.net.SocketPermission "127.0.0.1:1-65535", "connect"; permission java.net.SocketPermission "127.0.0.1:8080", "connect"; };
Estructura • Server • CalcServer (-Djava.rmi.server.codebase= http://localhost:8080/download/) • Calc • CalcImpl • Download • Calc • CalcImpl_Stub (rmic –keep) • Client • Calc • CalcClient • Client.policy (seguridad)
Conclusión • Deshabilitar las NIC que no se utilizan. • Ejecutar start rmiregistry en el DOS shell. • Verificar permisos en policy file • Instalar un WEB server (apache). • Deshabilitar/reconfigurar firewall
Preguntas y respuestas • Que es lo que sigue?