Andei pensando nisso ontem…
C já brincou com RMI?? Quando vc tem um objeto remoto, vc tem na verdade um proxy. O proxy sabe:
- Transformar uma chamada de método em um comando seriado que ele envia por um socket
- Abrir conexão com a máquina de destino.
Minha idéia começou com o problema da deleção: se vc deleta um objeto do sistema prevalente, o que vc faz com as referências?
Um ponto de partida é vc “saber” quando um objeto é uma entidade (se o nome é muito relacional pra vc, use “remoto”) ou não. Quando um obj é entidade, a associação (isto é, as referências) pra ele precisam ser mais espertas que uma ref. java.
Então que tal implementar uma classe que lida com essa ref esperta? Ela pode implementar Observer e se “desconectar” quando um objeto é removido do seu mapa (pra resolver o problema 1). E toda vez que vc dá get(), o que ela faz é ir pro mapa e dar get() pra pegar o objeto.
Um User tem uma ref esperta pra um Account, então o getAccount() do User tb vai, eventualmente, pro mapa.
Vc ainda tem que lidar com os pobres OIDs, mas isso não é tão ruim. O importante é que durante o design, o programador saiba quais classes têm instâncias que vale a pena passivar.
Pode até ser um esqueminha IoC baseado em interfaces (p.e. implements Passivatable). De qq jeito, como vc precisa de proxies, vc acaba precisando de factories. Mas com um pouco de esforço (e CGLIB), dá pra fazer um esquema 100% dinâmico.
bom, se eu tiver tempo, vou ver esse esquema da ref esperta, posto aqui qq coisa que eu encontre. Tô empolgado! : )
[]s