Java - Problemas con java RMI

 
Vista:

Problemas con java RMI

Publicado por JBG (1 intervención) el 14/06/2008 12:39:38
Saludos, estoy intentando hacer un pequeño programa con java RMI. El cliente manda al
servidor un número y el servidor lo imprime por pantalla, pero tengo el siguiente error
en ejecución:

INICIANDO CLIENTE
-----------------
REALIZANDO LOOKUP
Exception in thread "main" java.lang.ClassCastException: server.Fachada_Stub can
not be cast to client.InterfazFachada
at client.Main.main(Main.java:41)

No se cual puede ser el error... el programa compila adecuadamente, no dando problemas con javac ni rmic. Por cierto, lo estoy ejecutando bajo windows XP, aunque mi intención es que luego funcione bajo linux. La idea es hacer sobre esto un programa algo más complejo.

Agradezco la ayuda de antemano.

JBG

Adjunto el código fuente:

*************************************************************************************************

PAQUETE SERVIDOR:
*************************

/*
* Main.java
*/

package server;


import java.rmi.RemoteException;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.io.*;
import java.rmi.Naming;

public class Main {


/** Creates a new instance of Main */
public Main() {
}

/**
* @param args the command line arguments
*/
public static void main(String[] args){
//lee el numero de puerto y arranca el registro RMI
try{
int RMIPortNum = 1099;
startRegistry(RMIPortNum);
} catch(Exception re){
System.out.println("Excepcion: " + re);
}

System.out.println("INICIANDO SERVIDOR");
System.out.println("------------------");

System.out.println("REBIND DE FACHADA");
try{
Fachada f=new Fachada();
Naming.rebind("rmi://localhost:1099/Fachada",f);
} catch (Exception e){
System.out.println("ERROR:"+e.getMessage());
e.printStackTrace();
}




}

//Arranca un registro RMI local si no existiera, en cierto puerto
private static void startRegistry(int RMIPortNum) throws RemoteException{
try{
Registry registry = LocateRegistry.getRegistry(RMIPortNum);
registry.list(); //lanza excepción si no existe el registro
} catch (RemoteException e){
//No hay un registro válido en el puerto
Registry registry = LocateRegistry.createRegistry(RMIPortNum);
}
} //end startRegistry


}

************************************************************************************************
/**
* FACHADA (es la clase que implementa el servicio)
*/

package server;

import java.util.LinkedList;

public class Fachada extends java.rmi.server.UnicastRemoteObject implements InterfazFachada {

//crea una nueva instancia de Fachada
public Fachada() throws java.rmi.RemoteException {

}


public void metodo(int prueba) throws java.rmi.RemoteException {
System.out.println("EL NUMERO ES:");
System.out.println(prueba);
}

}

**************************************************************************************************
/*
* InterfazFachada.java
*/

package server;

import java.util.LinkedList;

public interface InterfazFachada extends java.rmi.Remote {
public void metodo(int prueba) throws java.rmi.RemoteException;

}

**************************************************************************************************
**************************************************************************************************

PAQUETE CLIENTE
**********************

/********/
/* main */
/********/

package client;

import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.Naming;

public class Main {

/** Creates a new instance of Main */
public Main() {

}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("INICIANDO CLIENTE");
System.out.println("-----------------");

InterfazFachada f;

System.out.println("REALIZANDO LOOKUP");
try{ //intenta hacer el lookup
f = (InterfazFachada) Naming.lookup("rmi://localhost:1099/Fachada");

//sino me dice que f ha podido no ser inicializado
System.out.println("INVOCANDO EL METODO REMOTO");
try{
f.metodo(5);
}
catch(RemoteException re){
System.out.println();
System.out.println("RemoteException");
System.out.println(re);
}
}
catch(MalformedURLException murle){
System.out.println();
System.out.println("MalformedURLException");
System.out.println(murle);
}
catch(RemoteException re){
System.out.println();
System.out.println("RemoteException");
System.out.println(re);
}
catch(NotBoundException nbe){
System.out.println();
System.out.println("NotBoundException");
System.out.println(nbe);
}



}

}

**************************************************************************************************
/*
* InterfazFachada.java
*/

package client;

import java.util.LinkedList;

public interface InterfazFachada extends java.rmi.Remote {
public void metodo(int prueba) throws java.rmi.RemoteException;

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con java RMI

Publicado por tony-kun (42 intervenciones) el 18/06/2008 02:12:17
pon un solo InterfazFachada.java y todas las interfaces RMI en un paquete en común, accesible desde servidor y cliente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar