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() );
//}
}
}