Pesquisa

    Nos primeiros meses, tentamos encontrar algo parecido com o que queríamos fazer. Este ainda é um campo realtivamente novo, e há pouco desenvolvimento de middlewares em Java. Praticamente todos os sistemas distribuídos em Java utilizam RMI, CORBA ou uma combinação dos dois. Já havíamos utilizado essas duas tecnologias, e achamos que tanto uma quanto a outra atrasam o desenvolvimento porque demandam extensa configuração. Isso nos motivou ainda mais para desenvolver um middleware de baixíssimo acoplamento e que exigisse poucas configurações.
    Encontramos material sobre JavaSpaces, uma tecnologia da Sun que faz, em linhas gerais, a mesma coisa que o SharedObjects faz. Embora seja um pouco mais robusta e eficiente, JavaSpaces é uma tecnologia proprietária da Sun e é baseada em outra tecnologia, JNDI, que não queríamos utilizar de forma alguma porque é desnecessariamente complicada para nossos objetivos.

    Um dos assuntos pesquisados em diversos momentos, inclusive após já termos uma implementação para ele, foi um protocolo de commit. O Commit de Duas Fases proposto por Gray (GRAY, J. Notes on Database Systems, 1978) não nos servia muito, porque assumia que os diversos nós tinham conhecimento da transação e participavam, direta ou indiretamente, do processo de commit. No nosso caso, o servidor de locks tinha uma parte da informação, e o escritor tinha outra parte. Apenas 3 máquinas participavam do commit, e não era necessário acordo algum. Na internet não encontramos nada parecido, por isso utilizamos algumas idéias mas acabamos inventamos nosso próprio protocolo. A maior fonte de informação foi mesmo a disciplina Sistemas Operacionais Distribuídos e links contidos na página da disciplina.

    Muita coisa foi perquisada sobre seriação de objetos em Java para montar as mensagens. As assinaturas digitais presentes nas mensagens e nos timestamps são criadas com uma API provida pelo SDK. Tivemos bastante trabalho para encontrar alguma informação sobre class loaders que permitisse a verdadeira transparência que queríamos para a carga dinâmica de classes.

Referências

    Abaixo estão praticamente todas as referências que utilizamos nesse ano e meio de desenvolvimento.