Galera, existe alguma forma de eu manter a instância da minha classe viva sem o garbage collector limpar???
Estou usando RMI, e tenho uma classe que é instanciada e fica em memória, assim outras classes de outros computadores acessam ela. Mas o que acontece é q o garbage collector, sempre mata a coitada.
existe uma melhor forma de fazer a classe servidora do RMI se manter ativa???, não queria dá uma gambiarra de loop infinito na classe, pois gasta recursos.
Amigo, não sei se entendi direito o seu problema…
Seu servidor depois de acessado uma vez é excluído pelo GC?
Eu fiz um servidor e consigo acessar os métodos dele sem problema nenhum, por diversas vezes… Abaixo eu posto o código base dele…
Outra, se você está usando um determinado objeto em comum com os clientes que acessam, dê uma pesquisada sobre Serialização, eu não posso te explicar pq estou começando a estudar ela…
Agora outra coisa que vc pode fazer, é consultas utilizando sockets, só que é mais trabalhoso…
[code]public class ServidorRMI extends UnicastRemoteObject implements InterfaceConsultaArquivo{
private static final long serialVersionUID = 1L;
//Construtor da classe.
public ServidorRMI() throws RemoteException {
super();
}
public static void main(String[] args) {
try {
//Cria um objeto da interface e faz associação com o servidor.
InterfaceConsultaArquivo minhaInterface = new ServidorRMI();
//Abre o servidor inserindo um nome em comum para acesso do cliente
// E passa o pârametro da interface. O Cliente acessa a interface e não o servidor
Naming.rebind("Servidor", minhaInterface);
System.out.println("Conexao sucedida....\nAguardando chamada remota...");
} catch (Exception e) {
System.err.println("Erro Server: " +
e.getMessage());
}
}
public String Consulta(String palavra) throws RemoteException {....}
}
[/code] Espero que te ajude.
Abraço!
olah,
o GC só limpa (só deve limpar) as variaveis sem referencia…
não entendi o seu problema…
GC não tem nada a ver com isso.
O problema, provavelmente, é que a thread main termina, e por isso sua aplicação sai, se quer deixa-la esperando a thread do servidor, coloque um join() nela:
[code]Registry registry = LocateRegistry.createRegistry(1234);
registry.rebind("meuServidor", objeto);
Thread.currentThread().join();[/code]