Como seto um timeout para conexões RMI?

Pessoal, estou usando RMI para um sistema de monitoramento. O cliente se comunica em vários servidores checando se todos estão respondendo.

Mas acontece que se uma sevidor estiver desligado ou se não estiver rodando a aplicação o RMI demora muito tempo para dar timeout, cerca de 10 minutos.

Como faço para reduzir o tempo de timeout em minhas conexões???

Obrigado.

Vê se te ajuda:
http://forum.java.sun.com/thread.jspa?threadID=128870&messageID=2059084

rhenrique, obrigado pela resposta.

Mas utilizei o código descrito na página q vc passou e n obtive o resultado q queria. Pelo q entendi, posso estar enganado, esse código é utilizado para conexões RMI já estabelecidas e dá um timeout na conexão qndo passa um determinado tempo sem comunicação entre o cliente e servidor.

O q eu estou querendo é algo diferente, é um timeout na tentativa de conexão do cliente com o servidor, durante o comando “Naming.lookup”.

Obrigado.

Eu achei que esse código resolveria. Foi esse que você digitou?

In the client:

RMISocketFactory.setSocketFactory(new TimeoutSocketFactory(rmi_timeout));

And the TimeoutSocketFactory:

import java.net.Socket;
import java.net.ServerSocket;
import java.net.InetSocketAddress;
import java.io.IOException;
import java.io.Serializable;
import java.rmi.server.RMISocketFactory;

class TimeoutSocketFactory extends RMISocketFactory {

private int timeout;

TimeoutSocketFactory(int timeout) {
this.timeout = timeout;
}

public Socket createSocket(String host, int port) throws IOException {
Socket s = new Socket();
s.connect(new InetSocketAddress(host,port), timeout);
s.setSoTimeout(timeout);
return s;
}

public ServerSocket createServerSocket(int port) throws IOException {
return getDefaultSocketFactory().createServerSocket(port);
}
}

Foi esse sim.

Achei uma solução, mas ela ficou um pouco “diferente”, se alguém tiver uma idéia melhor poste por favor.

Minha solução foi: eu crio uma thread para fazer a conexão RMI e no thread main eu dou um sleep. Na minha thread do RMI, eu tenho um atributo boleano no qual se inicia em false e ao se conectar com o servidor RMI ele é setado para true. Ao final do sleep dentro do main eu verifico esse atributo e se estiver true é porque conectou se estiver false eu dou um interrupt na thread.

Bem, assim funcionou blz, mas ficou meio estranho n foi?