"Bruno F. Souza" wrote:
> Eduardo Issao Ito wrote:
> >
> > Com o metodo java.lang.Class.forName(String) voce pode carregar classes
> > dinamicamente. Mas que eu saiba nao e' possivel apaga-las.
> >
> > Pensando bem, isso e' possivel (o WebSphere faz isso) mas voce teria que
> > criar o seu class loader.
> >
> > Rafael Chaves wrote:
> > >
> > > E' possivel recarregar uma classe em tempo de execucao para que modificacoes
>nos seu codigo passem a ter efeito sem que seja necessario reinicializar a maquina
>virtual? Como?
> > >
> > > Fico no aguardo, obrigado.
> > >
> > > Rafael
> > >
>
> Existem duas coisas aqui. A partir do JDK 1.1, as classes passaram
> a ser eliminadas pelo GC sempre que nao existem mais referencias
> a elas. Ou seja, se nao existe nenhum objeto de uma classe no
> sistema, essa classe eventualmente sera GCed. Mas isso depende
> do GC, e voce nao tem controle de exatamente quando a classe
> sera descarregada para que voce possa carregar a nova.
>
> Se voce quer controlar esse comportamento, de tal forma a poder
> quando voce quiser retirar e recarregar uma classe do sistema,
> voce precisara criar o seu proprio ClassLoader.
>
> Uma forma mais simples de fazer algo semelhante sem ter que
> criar seu proprio ClassLoader eh, quando voce modificar o codigo,
> voce carrega a nova classe em um novo ClassLoader. Com isso,
> novos objetos utilizarao a nova classe, enquanto que a classe
> antiga sera mantida ate que nao existam nenhum objeto que a
> utilize, e eventualmente sera descarregada. O problema disso
> eh que seu programa pode ficar bem complicado quando voce tem
> varios objetos de mesma classe com comportamentos diferentes
> (na verdade, eles sao de classes diferentes, pois duas classes
> carregadas por ClassLoaders diferentes _sao_ diferentes, mas
> voce as referenciara da mesma forma, o que pode ficar confuso)
> Mas em compensacao, voce nao precisara criar seu proprio
> ClassLoader, o que eh por si so bastante complexo.
>
> Espero nao ter confundido mais as coisas :o)
>
> Bruno.
> ______________________________________________________________________
> Bruno Peres Ferreira de Souza Sun Microsystems
> System Engineer - Java Technologist [EMAIL PROTECTED]
> if I fail, if I succeed, at least I live as I believe
> * Para nao receber mais e-mails da lista, acesse
><http://www.sun.com.br:8080/guest/RemoteAvailableLists>, coloque seu e-mail, escolha
>a lista <[EMAIL PROTECTED]> e de um <submit>.
Oi Rafael ,
Uma outra op��o � voce usar CORBA. Voce podera criar um processo
Cliente-Servidor e usar
as caracteristicas de DSI e POA do CORBA para implementar um esquema deste tipo.
Outro m�todo semelhante ao que o Bruno citou � utilizado por dois pesquisadores
do AT&T para
implementar classes dinamicas em C++.De maneira simplicada o esquema � baseado em uma
interface
abstrata, uma classe Proxy, que � instanciada com a interface da classe din�mica. Em
run-time esta
classe proxy � responsavel por ativar e desativar implementa��es e por redirecionar as
chamadas
de metodos para as implementa��es. Os objetos que utilizam as vers�es antigas da
classe s� s�o descartados quando n�o est�o mais em uso. Mais detalhes est�o na CUJ
-( C/C++ Users
Journal ) deste mes.
Acho que este m�todo pode ser perfeitamente implementado em Java sem a necessidade de
outro
ClassLoader. O �nico problema � que na implementa��o em C++ s�o utilizados templates
para as classes
Proxy, garantindo ent�o a utiliza��o gen�rica deste m�todo para quaisquers tipos de
classe. Por Java n�o
possuir templates isto tem de ser modelado para a linguagem.
Abra�os,
Fred.
--
Frederico Charles S. Faria
Especialista em Sistemas
INATEL - PRODEP
Fone/Phone: +55 35 471-9280
* Para nao receber mais e-mails da lista, acesse
<http://www.sun.com.br:8080/guest/RemoteAvailableLists>, coloque seu e-mail, escolha a
lista <[EMAIL PROTECTED]> e de um <submit>.