Última Atualização: 30 de Setembro de 2002, 00:50 BRST
O projeto tenciona permitir o uso de um sitema distribuído de alocação de objetos em Java. Através do pacote, será possível desenvolver aplicações que usam memória distribuída como se elas usassem memória compartilhada local. Também seria interessante reaproveitar código desenvolvido no segundo modelo para construir aplicações rodando modelo distribuído sem grande esforço.
Em 2002 o projeto expandiu o seu foco de atuação, que era primeiramente apenas no auxiliar no desenvolvimento de sitemas que necessitam do uso de memória compartilhada distribuída, através do gerenciamento de estado dos objetos, passando agora a gerenciar o objeto por inteiro, dando suporte a mudanças não só no estado do objeto, mas também em seu código. Com isso permitimos que as aplicações evoluam e adaptem-se dinamicamente de forma transparente para os usuários, tornando simples o processo de manutenção do software.
O produto é um middleware para desenvolvimento de aplicações distribuídas, de forma simples e indolor. Para isso ele se vale das noções de transações já consagradas por muitos programadores. A distribuição é feita de forma transparente, permitindo que a aplicação seja desenvolvida da forma convencional, a mesma que seria utilizada no desenvolvimento de aplicações para uma única máquina.
Com isso permitimos que programadores sem conhecimento de distribuição possam desenvolver aplicações distribuídas. O produto permite ainda que classes sejam carregadas dinamicamente sem a necessidade de se atualizar a versão da aplicação em cada uma das máquinas.
Nosso primeiro protótipo funcional já pode ser baixado na página de downloads.
O controle de concorrência ficou bastante simples, mas causa uma pequena sobrecarga na rede, uma vez que os locks de escrita ficam no servidor, e é necessário trocar mensagens com ele mesmo que o lock tenha sido pego por uma thread do mesmo host.
A parte de segurança de dados e autenticação de dados e hosts também ficou muito simples: A confiança ficou inteiramente depositada no servidor: os clientes só aceitam timestamps gerados pelo servidor, e identificam outros clientes verificando suas assinaturas com as chaves públicas que ele fornece. O Servidor foi construído de tal forma que ele aceita qualquer login. Fica a cargo da aplicação extender o br.shob.server.Server para restringir o acesso ao espaço global.
Como todos os timestamps são gerados pelo servidor e a consistência dos dados não é muito rígida, não é necessário sincronizar relógios entre os hosts da aplicação. Isso torna o pacote muito mais maleável e permite que usuários sem direito de modificar o relógio do seu host criem aplicações com ele.
As mensagens são assinadas. O servidor também autentica um cliente para outro. Mas as mensagens em si, e os objetos que viajam pela rede não são criptografados.
Por esse motivo, o pacote não não dá suporte a aplicações que transmitam dados sensíveis, como senhas, dados bancários, etc.
O que falta para ficar perfeito ?