Uma aplicação foi dividida em diversas aplicações menores, rodando em desktop/Swing. Essas aplicações foram instaladas nas máquinas dos usuários, eles podem acessar cada diferente aplicação clicando em um ícone no Desktop (Cada aplicação roda em uma VM diferente). Na solução original a arquitetura era mais complexa utilizando-se Java Web Start e outras coisas, aqui foi simplificado para apresentar o propósito do uso do JGroups.
Na versão atual da aplicação, o usuário loga e tem acesso a um determinado Perfil (Administrador, Gerente). Ocorreu uma mudança nos requisitos e agora um usuário pode ter mais de um perfil. O perfil corrente pode ser selecionado em um combobox na aplicação, até aqui nenhum problema. Agora, imagine que o usuário tenha duas aplicações abertas, logadas com o mesmo usuário e muda o Perfil em uma das aplicações. Na especificação de requisitos diz que o perfil deve ser alterado "automagicamente" em todos as aplicações abertas com o mesmo usuário. Como implementar essa mudança sem modificar drasticamente a arquitetura?

A solução adotada for JGroups e está em produção, funcionando muito bem a algum tempo.
JGroups é um toolkit para comunicações multicast. Simplificando pode-se dizer que ele permite que um Objeto (qualquer objeto Serializable Java) seja compartilhando entre aplicações rodando em máquinas diferentes em uma rede, o que permite a criação de Clusters de aplicações de maneira simples. Algo interessante é que diferente de arquiteturas cliente/servidor, um cluster, não precisa de um servidor para "repassar" a informação para os outros clientes "conectados". Dentro do cluster uma das máquinas assume a responsabilidade de gerenciar as possiveis mudanças nos dados (no caso no Objeto Serializable) e avisar os outros clientes sobre elas. Caso esse cliente seja fechado outro cliente assume mantendo tudo funcionando.
O que fizemos na nossa aplicação foi integrar as aplicações em um cluster que compartilha o objeto o qual representa o perfil atual do usuário. Configuramos o JGroups para trabalhar apenas localmente de maneira que ele não procure nós (outras aplicações) do cluster em rede, apenas no ip local e VOIALÁ ... Uma solução para o nosso problema de maneira que não foi necessário mexer na arquitetura original da aplicação.
Espero que Seja útil.
1 comments:
Muito bom!
Post a Comment