RMI - Falha ao reconectar um cliente

0 respostas
N

Olá.

Estou implementando o algorimo de eleição em anel, usando RMI para um trabalho acadêmico.
A mesma aplicação hora se comporta como cliente, hora se comporta como servidor.

Ao inicializar o sistema o primeiro processo se conecta como servidor, e os outros como clientes.
Posso conectar N clientes, que tudo funcionando direito.

Porém, ao fechar um processo cliente para simular um crash nele, não consigo conectar mais nenhum cliente ao servidor.

Recebo a seguinte exceção:

RemoteException occurred in server thread; nested exception is: java.rmi.ConnectException: Connection refused to host: 10.0.0.101; nested exception is: java.net.ConnectException: Connection refused: connect

Aqui segue o código, a função chamada primeiro é a joinAsCoordinator, se cair em uma das exceptions, então conecta como cliente (connect2Coordinator()):

public void joinAsCoordinator() {
        try {
            LocateRegistry.createRegistry(PORT);
        } catch (RemoteException ex) {
            try {
                LocateRegistry.getRegistry(PORT);
            } catch (RemoteException ex1) {
                System.out.println("Não foi possivel obter um registry.");
            }
        }

        try {
            myModule = new RMIModuleCoordinator("0");
            Naming.bind("rmi://localhost:1099/Services", (RMIModuleCoordinator) myModule);
        } catch (AlreadyBoundException ex) {
            connect2Coordinator();
            return;
        } catch (MalformedURLException ex) {
            connect2Coordinator();
            return;
        } catch (RemoteException ex) {
            connect2Coordinator();
            return;
        }
    }

    public void connect2Coordinator() {
        try {
            myModule = new RMIModuleClient(nameTextField.getText());
            services = (CoordinatorServices) Naming.lookup("rmi://localhost:1099/Services");
        } catch (NotBoundException ex1) {
            System.out.println("A: " + ex1.getMessage());
            return;
        } catch (MalformedURLException ex1) {
            System.out.println("B: " + ex1.getMessage());
            return;
        } catch (RemoteException ex1) {
            System.out.println("C: " + ex1.getMessage());
            return;
        }
        nameLabel.setText("Nome: " + String.valueOf(nome));
    }

Após eu finalizar um cliente, quando tento conectar outro cai na RemoteException da função connect2Coordinator.

Alguém pode me ajudar por favor ?

Obrigado

Criado 27 de junho de 2011
Respostas 0
Participantes 1