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;
}
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


0