agodinhost:
louds:
Primeiro que com classloading você não resolveria o seu problema, pois teria que recarregar TODAS classes do teu sistema.
Segundo, todas maneira que existem são gambiarras porque quer ir contra algo que você mesmo estabeleceu, quer que tuas constantes deixem de ser constantes.
É como querer uma classe tua não possua os métodos wait() de Object, vai contra o sistema de tipos da linguagem.
Em resumo, seja esperto e crie um wrapper para essas Strings e seja feliz. Caso contrario não existe nem garantia que reloading vai funcionar, pois a JVM é livre para propagar os valores de constantes estáticas diretamente para onde bem entender.
Primeiro, segundo, terceiro? lista de compras?
Desculpe mas vc chegou a ler os dois artigos nos links que postei? Please. Eles falam justamente sobre como resolver esse problema: reescrevendo um classload mais simples.
As constantes continuariam sendo cosntantes (são REFerências tá? não são strings imutáveis) sendo que a “inicialização” destas é que é responsável pela leitura de seus valores do bundle.
Descarregá-las iria facilitar minha vida (se não fosse arriscado), elas não deixariam de ser “constantes”. Na verdade essa solução (descarregar classes) já é necessidade de containers de aplicação (jboss, tomcat)
Não sou esperto louds, gosto de pesquisar e um wrapper (ou vários) não iriam resolver sem ter de alterar muita coisa no meu código legado - sorry.
Woody
Eu olhei, por curiosidade, o segundo é muito superficial e não mostra todos problema envolvidos com classloading. O primeiro cai em uma página de erro da acm.
Eu conheço como funciona classloading em Java e te digo, não da para fazer oque você quer dessa forma.
Uma classe só pode ser descarregada se e somente e ela for coletavel, isto é, ela não estar inclusa no fechamento transitivo de todos objetos tangíveis a partir do root set da aplicação. Todo classloader mantem referência para as classes que ele carrega, logo ela só pode ser coletada quando o classloader dela também for.
Dito isso, quando um método que usa tua classe de constantes for executado, o classloader da classe dele vai tentar carregá-la. Então para você poder fazer tua idéia funcionar o classloader do teu AS vai precisar ser alterado, uma ótima idéia.
Depois disso, você vai ter que contornar o fato que depois que o classloader das classes da tua aplicação encontrar essa classe de constantes ele anota isso internamente. Ou seja, para tua classe ser recarregada, você vai precisar fazer o classloader da tua aplicação ser coletado também.
Moral da história, isso não funciona se você precisa recarregar classes que são usadas por outras que não serão recarregadas. Não dá, simples assim.