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..
publicclassServidorRMIextendsUnicastRemoteObjectimplementsInterfaceConsultaArquivo{privatestaticfinallongserialVersionUID=1L;//Construtor da classe.publicServidorRMI()throwsRemoteException{super();}publicstaticvoidmain(String[]args){try{//Cria um objeto da interface e faz associação com o servidor.InterfaceConsultaArquivominhaInterface=newServidorRMI();//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 servidorNaming.rebind("Servidor",minhaInterface);System.out.println("Conexaosucedida....\nAguardandochamadaremota...");}catch(Exceptione){System.err.println("ErroServer:"+e.getMessage());}}publicStringConsulta(Stringpalavra)throwsRemoteException{....}}
Espero que te ajude.
Abraço!
R
rodrigomaiaPJ
olah,
o GC só limpa (só deve limpar) as variaveis sem referencia…
não entendi o seu problema…
J
jaireltonPJ
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: