Friday, October 17, 2008

JGroups - Compartilhando Objetos entre aplicações Java

A um tempo atrás a equipe de desenvolvimento a qual faço parte deparou-se com um problema interessante para resolver. Imagine o seguinte cenário:

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.

Friday, October 03, 2008

Picanha Quatro Queijos

É galera, já a um tempo sem postar nada, vou recomeçar em grande estilo. Vai ai uma receita de picanha que é garantia de sucesso. Os ingredientes são simples:

Uma picanha show de bola
Quatro tipo de queijos. Eu particularmente gosto de queijo com gosto forte, então sugiro: Parmesão, Gorgonzola, Mussarela e Provolone;
Orégano;
Sal grosso. Pode ser desses temperados, mas se for o normal também fica muito bom;
Um pedaço grande de papel laminado (o suficiente para enrolar duas vezes a picanha);
Linha e agulha de costura;

Faça um buraco na parte grossa da picanha com a ponta da faca, e vá abrindo até formar tipo um saco dentro da picanha (se você não tiver as manhas pode pedir para o açougueiro para abrir a picanha e explica que você vai fazer recheada que ele sabe como preparar)
Corte o queijo em pedaços como na foto.
Coloque todos os queijos + orégano dentro da picanha e lembre de ir "socando" para caber mais
No fim, use a linha/agulha para costurar o buraco usado para colocar o queijo.
Coloque a picanha no papel laminado (conforme a foto), um pouco de vinho tinto seco para dar "liga" e depois jogue sal a vontade
Feche o papel laminado, coloque em uma grelha e deixei na churrasqueira por uns 40 min. Lembrando de virar de vez em quando para "cozinhar" por igual.
Tire o papel laminado, e deixe no fogo até pegar uma cor boa.
Obs: tem gente que gosta da picanha mais mal passada, tem gente que gosta passada, e tem gente que gosta torrada, então deixe no fogo conforme o gosto.
Depois é só cortar em "bifões" e servir