Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/10/2011, 16:23
tronco020
 
Fecha de Ingreso: noviembre-2010
Ubicación: Tandil
Mensajes: 79
Antigüedad: 13 años, 5 meses
Puntos: 3
Pregunta No puedo ejecutar un método de un objeto remoto en RMI

Hola amigos javeros.

Estoy empezando a trabajar con RMI. Cuando pruebo todo desde dentro de la misma LAN, funciona sin problemas, pero cuando lo ejecuto en 2 conexiones diferentes, ahí se me produce el error. Los pasos realizados son los siguientes:
1.- Inicio el rmiregistry en el servidor.
2.- Ejecuto el jar del servidor en el servidor, quien registra el objeto en el rmiregistry
3.- Cuando ejecuto el cliente desde la otra red, me da una excepción en el cliente.
Les paso toda la info que creo pertinente. Si necesitan más info, la pongo.
InterfaceRemota:
Código:
public interface InterfaceRemota extends Remote {
    public List<ResumenCuentaSocioLinea> suma (int codigoDesde, int codigoHasta, long fechaDesde, long fechaHasta, boolean verContado) throws RemoteException;
}
ObjetoRemoto:
Código:
public class ObjetoRemoto extends UnicastRemoteObject implements InterfaceRemota{
    public ObjetoRemoto () throws RemoteException{
        super();
    }
    public List<ResumenCuentaSocioLinea> suma (int codigoDesde, int codigoHasta, long fechaDesde, long fechaHasta, boolean verContado) throws RemoteException{
        System.out.println("Procesando datos...");
        List<ResumenCuentaSocioLinea> resumen = new ArrayList<ResumenCuentaSocioLinea>();
        // ACA CON LOS RANGOS RECIBIDOS OBTENGO LOS DATOS A DEVOLVER DESDE LA BASE DE DATOS
        System.out.println("Enviando datos...");
        return resumen;
    }
}
Servidor:
Código:
public class Servidor {
    public Servidor() {
        try {
            System.setProperty("java.rmi.server.codebase", "file:/C:/RMI/RMIServidor/src/");
            String host = java.net.InetAddress.getLocalHost().getHostAddress();
            System.out.println("Iniciando Servidor... " + host);
            InterfaceRemota objetoRemoto = new ObjetoRemoto();
            Naming.rebind ("//" + host + ":1099/ObjetoRemoto", objetoRemoto);
            System.out.println("Servidor iniciado");
        }
        catch (Exception e){
            e.printStackTrace();
            System.out.println("Error al iniciar el Servidor");
        }
    }

    public static void main(String[] args) {
        new Servidor();
    }
}
Cliente:
Código:
public class Cliente {
    public Cliente() {
        try{
            System.out.println("Estableciendo conexión...");
            InterfaceRemota objetoRemoto = (InterfaceRemota)Naming.lookup ("//186.130.XX.XXX:1099/ObjetoRemoto");
            System.out.println("Obteniendo resumen de cuenta...");
            List<ResumenCuentaSocioLinea> resumen = objetoRemoto.suma(1, 500, 20010101, 20113112, true);
            System.out.print (resumen.size());
        }
        catch (Exception e){
        }
    }

    public static void main(String[] args) {
        new Cliente();
    }
Cuando ejecuto el Servidor realiza los pasos correctamente:
1.- Conexión a la BD.
2.- Imprime por pantalla Iniciando Servidor... 192.168.X.X
3.- Imprime por pantalla Servidor iniciado
La salida que obtengo en el cliente es la siguiente:
1.- Imprime por pantalla Estableciendo conexión... // ESTA LINEA DEMORA APROX. 20 SEGUNDOS
2.- Imprime por pantalla Obteniendo resumen de cuenta...
3.- Y luego de aprox. otros 20 segundos me da la siguiente excepción:
Código:
java.rmi.ConnectException: Connection refused to host: 192.168.X.X; nested excep
tion is:
        java.net.ConnectException: Connection timed out: connect
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
        at sun.rmi.server.UnicastRef.invoke(Unknown Source)
        at chuidiang.ejemplos.rmi.suma.ObjetoRemoto_Stub.suma(ObjetoRemoto_Stub.java:35)
        at chuidiang.ejemplos.rmi.suma.Cliente.<init>(Cliente.java:32)
        at chuidiang.ejemplos.rmi.suma.Cliente.main(Cliente.java:44)
Caused by: java.net.ConnectException: Connection timed out: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
        ... 7 more
Por lo poco que puedo entender, logra encontrar el objeto pero no logra encontrar el método. Si no es así, por favor háganmelo saber.
Quedo a la espera de su ayuda. Desde ya, muchas gracias de antemano !!!