Em Java, como recarregar dinamicamente pacotes de recursos em uma aplicação web?
-
03-07-2019 - |
Pergunta
Estamos usando fmt: setBundle para carregar um pacote de recursos a partir de um banco de dados (que estendeu a classe ResourceBundle para fazer isso). Quando modificar um valor no banco de dados, nós temos que recarregar o servidor web para exibir o novo valor no aplicativo web.
Existe alguma maneira simples de usar o novo valor sem reiniciar o servidor web?
(Fazemos não quer sempre olhar para cima o valor do banco de dados, mas gostaríamos de invalidar o cache, por exemplo, chamando um especial 'admin' URL)
EDIT: Estamos usando JDK 1.4, então eu preferiria uma solução sobre essa versão. :)
Solução
Como outros têm apontado nos comentários, você pode querer olhar em Primavera - particularmente a ReloadableResourceBundleMessageSource .
Outras dicas
Se você estiver usando JDK 1.6 você pode usar os métodos de retorno de getTimeToLive()
e needsReload()
em ResourceBundle.Control para controle se as necessidades de cache do pacote a ser carregado com novos valores do banco de dados.
Primeiro, você pode criar uma classe que se estende desde ReloadableResourceBundleMessageSource
para expor seu interior protegido classe método chamado getProperties
. Este método retornar um mapa simultânea de objeto PropertiesHolder
. Em segundo lugar você deve configurar um feijão dessa classe estendida em você classe de configuração web. Agora você pode usar MessageSource em sua camada de serviço ou negócio. Aqui está o link de referência Configurar recarregável mensagem de origem pacote de