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.
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?