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.
Abaixo estão praticamente todas as referências que
utilizamos nesse ano e meio de desenvolvimento.