RMI - java.lang.ClassCastException

0 respostas
P

Pessoal, esse é o meu segundo ou terceiro ( não lembro bem) programa em java usando RMI.

O código abaixo é de um programa meu que retorna um erro

Exception in thread “main” java.lang.ClassCastException : ImplementaHotel_Stub at ClienteHotel.main (ClienteHotel.java:42)

quando eu executo a classe ClienteHotel

Apenas lembrando, antes disso eu já compilei os .java, executei o rmic sobre a classe ImplementaHotel, iniciei o rmiregistry e executei o comando java ServidorHotel

/*
 * Hotel.java
 * @author private
 * Created on 22 de Outubro de 2006, 15:48
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Hotel extends Remote{
    
    public class ImplementaQuarto{
    
        private int numero;
        private double preco;
        private boolean reservado;
        
        public ImplementaQuarto (int numero){
            this.numero = numero;
            this.preco = 0.0;
            this.reservado = false;
        }
        
        public void setPreco (double preco){
            this.preco = preco;
        }
        
        public double getPreco (){
            return this.preco;
        }
        
        public int getNumero (){
            return this.numero;
        }
        
        public void setReservado (boolean reservado){
            this.reservado = reservado;
        }
                    
        public boolean getReservado (){
            return this.reservado;
        }
        
    }

    /**Reserva o quarto indicado pelo parametro*/
    public String reservar (int numQuarto) throws RemoteException;
    
    /**Desfaz reserva do quarto indicado pelo parametro*/
    public String desfazerReserva (int numQuarto) throws RemoteException;
    
    /**Retorna a quantidade de quartos disponíveis*/
    public int quartosDisponiveis () throws RemoteException;
    
    /**Retorna as informações de um determinado quarto*/
    public String informaQuarto (int numQuarto) throws RemoteException;
    
    /**Retorna a quantidade de quartos no hotel*/
    public int numeroQuartos () throws RemoteException;
    
}
/*
 * ImplementaHotel.java
 * @author private
 * Created on 22 de Outubro de 2006, 15:54
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class ImplementaHotel extends UnicastRemoteObject implements Hotel{
    
    private ImplementaQuarto[] quartos;
    
    /** Creates a new instance of ImplementaHotel */
    public ImplementaHotel(int numQuartos) throws RemoteException{
        
        super();
        
        this.quartos = new ImplementaQuarto[numQuartos];
        for(int i = 0; i < numQuartos; i++)
            quartos[i] = new ImplementaQuarto(i);
        
        for(int i = 0; i < numQuartos/2; i++)
            quartos[i].setPreco(10.99);
        
        for(int i = (numQuartos/2); i < numQuartos; i++)
            quartos[i].setPreco(20.99);

        System.out.println("Iniciado o servico do hotel !");
        
    }
    
    public String informaQuarto (int numQuarto) throws RemoteException{
        
        String retorno = new String();
        
        if((this.quartos.length <= numQuarto) || (numQuarto < 0)){
            retorno = "Quarto nao encontrado";
        }else{
            retorno = "Numero: " + quartos[numQuarto].getNumero()+
                    "\nPreco: " + quartos[numQuarto].getPreco()+
                    "\nReservado: " + quartos[numQuarto].getReservado(); 
        }
        
        return retorno;
        
    }
    
    public String reservar (int numQuarto) throws RemoteException{
        
        String retorno = new String();
        
        if((this.quartos.length <= numQuarto) || (numQuarto < 0)){
            retorno = "Quarto nao encontrado";
        }else{
            this.quartos[numQuarto].setReservado(true);
            retorno = "Quarto " + numQuarto + " reservado."+
                    "Valor: R$ " + quartos[numQuarto].getPreco();
        }
        
        return retorno;
        
    }
    
    public String desfazerReserva (int numQuarto) throws RemoteException{
    
        String retorno = new String();
        
        if((this.quartos.length <= numQuarto) || (numQuarto < 0)){
            retorno = "Quarto nao encontrado";
        }else if(this.quartos[numQuarto].getReservado()){
            this.quartos[numQuarto].setReservado(false);
            retorno = "Reserva desfeita para o quarto " + numQuarto;
        }else 
            retorno = "O quarto nao estava reservado";
        
        return retorno;
        
    }
    
    public int quartosDisponiveis () throws RemoteException{
    
        int quartosDisponiveis = 0;
        
        for(int i = 0; i < quartos.length; i++)
            if(!quartos[i].getReservado())
                quartosDisponiveis ++;
        
        return quartosDisponiveis;
    
    }
    
    public int numeroQuartos () throws RemoteException{
        return this.quartos.length;
    }
    
}
/*
 * ServidorHotel.java
 * @author private
 * Created on 22 de Outubro de 2006, 12:20
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

import java.rmi.Naming;

public class ServidorHotel {
    
    /** Creates a new instance of ServidorHotel */
    public ServidorHotel(int numQuartosHotel) {
        try{
            Hotel hotel = new ImplementaHotel(numQuartosHotel);
            Naming.rebind("rmi://localhost:1099/HotelService", hotel);
        }catch(Exception e){
            System.out.println("Problema no servidor: " + e);
        }
    }

    public static void main(String[] args) {
        
        int numQuartosHotel=0;
        
        if(args.length != 1)
            System.err.println("ERRO: passe o num. de quartos do hotel como parametro");
        else{
            try{
                numQuartosHotel = Integer.parseInt(args[0]);
            }catch(NumberFormatException nfe){
                System.out.println("Parametro invalido.\nO numero de quartos deve ser inteiro\n"+
                        nfe);
            }
            new ServidorHotel(numQuartosHotel);
        }
        
    }
  
}
/*
 * ClienteHotel.java
 * @author private
 * Created on 22 de Outubro de 2006, 15:17
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

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

public class ClienteHotel {
    
    public static String lerDoTeclado () {

        InputStreamReader reader = new InputStreamReader (System.in);
        BufferedReader buf_in = new BufferedReader (reader);

        String str = "";
    
        try {
            do {
                str = buf_in.readLine ();
            } while (!str.toLowerCase ().equals ("q")  );
        }catch(IOException e){System.out.println ("IO exception = " + e );}

        return str;
        
    }

    /** Creates a new instance of ClienteHotel */
    public ClienteHotel() {
        System.out.println("Iniciando Sistema.");
    }
    
    public static void main (String args[]){
        try {
            
            Hotel hotel = (ImplementaHotel) Naming.lookup("rmi://localhost/HotelService");
            String lido;
            
            do{
                
                System.out.println("Escolha sua opcao:"+
                        "\n1 - Reservar quarto" +
                        "\n2 - Desfazer reserva" +
                        "\n3 - Numero de quartos disponiveis" +
                        "\n4 - Consultar quarto" +
                        "\n5 - Numero de quartos do hotel"+
                        "\n0 - Finalizar");
                
                lido = lerDoTeclado();
                
                if(lido.equals("1")){
                    System.out.println("Reservando Quarto");
                }else if(lido.equals("2")){
                    System.out.println("Desfazendo Reserva");
                }else if(lido.equals("3")){
                    System.out.println("Quartos Disponiveis");
                }else if(lido.equals("4")){
                    System.out.println("Consultar Quarto");
                }else if(lido.equals("5")){
                    System.out.println("Numero de Quartos do Hotel");
                } 
                
            }while (!lido.equals("0"));
            
            System.out.println("Finalizando Sistema.");
            
        }catch( MalformedURLException e ) {
            System.out.println();
            System.out.println( "MalformedURLException: " + e.toString() );
        }
        catch( RemoteException e ) {
            System.out.println();
            System.out.println( "RemoteException: " + e.toString() );
        }
        catch( NotBoundException e ) {
            System.out.println();
            System.out.println( "NotBoundException: " + e.toString() );
        }
        //catch( Exception e ) {
            //System.out.println();
            //System.out.println( "Exception: " + e.toString() );
        //}
        
    }
    
}
Criado 22 de outubro de 2006
Respostas 0
Participantes 1