EJB3 e lazy loading

Olá

Comecei a estudar EJB3 recentemente. Estou testando com JBoss 4.

Alguém mais já fez algum teste interessante ou protótipo?

No momento, eu estou tentando descobrir se é possível montar alguma estratégia para que “detached” entity beans possam fazer lazy loading de associações quando chamarmos o método getXxxx correspondente na aplicação cliente (em outra VM).

Idéias são bem vindas.

Sem fazer o reattach acho que fica entre o improvavel e o impossivel.

Eu penso mais ou menos no seguinte:

Se houvesse como fazer com que o conteúdo da associação fosse algum tipo de proxy criado por mim, eu poderia implementar qualquer algoritmo para a recuperação do objeto associado, inclusive um código que invocasse algum session bean que recuperasse ele.

E ai você estaria implementando um framework de ORM, certo? Que é oq o EJB3 faz.

Vale lembrar que EJB3 trabalha com dados transacionais, então ele não manipula objetos fora do contexto de uma Session/UnitOfWork/???.

Nem tanto…

Eu acho que seria ótimo poder navegar livremente por um grafo de objetos em uma interface gráfica sem se preocupar em pré inicializar cada um deles.

Imagine que você tenha dados hierárquicos e queira mostrá-los em uma árvore em que todos os nós aparecem fechados inicialmente. Aí conforme você vai clicando nos sinais de [+], por exemplo, os nós vão se expandindo e acessando objetos associados que vão sendo recuperados automaticamente.

Algo assim não representa um framework ORM completo, é apenas uma estratégia de recuperação de objetos mais conveniente que poderia ser implementada usando AOP e/ou proxies dinâmicos que talvez pudessem ser colocados no lugar das associações lazy automaticamente pelo EJB3 …

Parece ser muito trabalho.
Qual o problema em usar lazy loading do EJB3?

Sem usar AOP e/ou proxies dinâmicos, acredito que não seja possível usando o padrão.

[quote=mister__m]
Sem usar AOP e/ou proxies dinâmicos, acredito que não seja possível usando o padrão.[/quote]

Pois é … eu também estava começando a achar isso.

Aliás, aproveito para declarar que sou grande fã das idéias do Gensis.
Você sabe se nele foi implementado algum recurso desse tipo? Que usasse AOP e proxies dinâmicos para implementar esse tipo de carga sob demanda?

Opa, valeu :slight_smile:

Se eu que criei o projeto não souber, a coisa tá feia :slight_smile:

Isso é uma das coisas que planejamos para a release 3.0, que está em desenvolvimento. De verdade, acredito que você vai precisar colocar um advice no retorno do método remoto e varrer o grafo pra “atachar” dinamicamente um advice capaz de fazer isso com seus relacionamentos. Você vai ter que usar o AspectWerkz 2.0 pra isso.