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 !!!