Toda vez que eu converso com o Klaus ele me convence que Passivation é desnecessária, e que se o Prevayler/Space4J forem por esse caminho eles vão acabar virando um OODB.
Mas depois de um tempo, quando eu começo a ver que apesar de poucos, haverá casos em que vai faltar memória, eu começo a pensar na viabilidade da porcaria da passivação.
[quote=cv]Como voces vao saber quais objetos estao sendo usados e quais devem ser passivados?
[/quote]
Todo o objeto passível de passivação é acessado via proxy e dentro desse proxy tem um lastAccessTime. De vez em quando um monitor corre o passivation map e passiva todos os objetos que estão sem acessos a X minutos.
Complicado isso realmente pois fazer um full sem índices percorrendo a lista inteira de objetos vai acabar trazendo todos os seus objetos de novo para a memória, a não ser que vc use úm índice, e índices nunca são passivados. Então em teoria as queries seriam feitas nos índices em memória e não no objeto que foi para o disco passivado.
Uma merda isso mesmo! Solução para evitar dores de cabeça: Cada máquina cuida da sua própria passivação isto é, um objeto passivado numa máquina pode não estar passivado em outra máquina, pois os acessos são diferentes, isto é, numa máquina ele pode ter sido acessado muitas vezes e em outra não.
E quando restartar o sistema, o que vale são os objetos passivados no MASTER, ou seja, a passivação dos slaves são ignoradas e vale a do master.
Não me lembro disso direito (faz quase um ano que eu não mexo no space4j) mas acho que o ato da passivação é uma alteração no space e fica logada no LOG. Isso é fundamental para garantir a consistência, ou seja, a passivação é um commando (writer) como qualquer outro, que remove um objeto do Space e mete ele no HD, deixando no lugar dele um proxy malandro.
Isso tudo aí em cima é bonito de se falar, mas quando vc vai implementar, dá um trabalho do cão e faz uma sujeira danada. Espero que um dia esse esforço se pague ou esse framework ficará perdido como um ELEFANTE no meio da simplicadide do Space4J.
Além disso, se vc não tomar cuidado, todos os seus objetos vãi ser passivados e vc vai acabar com um banco de dados de objetos serializados em disco. Nada performático como o CV falou!