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

Responder a