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:
[quote]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[/quote]
Aqui segue o código, a função chamada primeiro é a joinAsCoordinator, se cair em uma das exceptions, então conecta como cliente (connect2Coordinator()):
[code]
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));
}[/code]
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