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:
ObjetoRemoto:public interface InterfaceRemota extends Remote { public List<ResumenCuentaSocioLinea> suma (int codigoDesde, int codigoHasta, long fechaDesde, long fechaHasta, boolean verContado) throws RemoteException; }
Código:
Servidor: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; } }
Código:
Cliente: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(); } }
Código:
Cuando ejecuto el Servidor realiza los pasos correctamente: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(); }
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:
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.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
Quedo a la espera de su ayuda. Desde ya, muchas gracias de antemano !!!