From: Jeremy Quinn [mailto:[EMAIL PROTECTED] 

> By passing a Bean persisted by Hibernate from the flow layer to the 
> view layer, you are implementing SoC by allowing the view layer to 
> decide what is relevant for that view. This aspect not being 
> the Flow's 
> concern.

Only to make it transparent (for me): The flow layer passes e.g. a 
user bean with the id 4711 to the view layer. The view layer only
"knows" that it can expect a user bean and has tho show e.g. the name 
and the adress and so it doesn't care where the bean comes from
(database,
webservice, ...). Do we agree on this?

> 
> However, once you have triggered the view layer with 
> SendPageAndWait(), 
> control does not return to the flow layer until the Response has been 
> sent and the next Request received, thus loosing you the 
> opportunity to 
> close the Hibernate Session from the Flow layer before the 
> Response is 
> sent.

Chris' experimental implementation of cocoon.getComponent() should solve
this problem. 

> SendPage() might not suffer this problem, but due to the nature of a 
> SAX event pipeline, I would not bet on it.
> 
> With 'lazy initialisation' SQL Queries are only made when getter 
> methods of the Bean are executed. If you have passed the Bean to the 
> view layer, XPath expressions in JXPathTemplate (etc.) will result in 
> those getter methods being accessed. If your flowscript has already 
> released it's Hibernate Component, you are in trouble.
> 
> You could clone the Bean to pass it to the view layer, but it is kind 
> of self-defeating IMHO.

Why do you think it is self-defeating? IIUC the point of lazy
initialization 
is calling the persistence layer at the time when it is really needed 
(when I generate some output). If I pass the bean with 
sendPageAndWait("myPage", {bean:bean}) I *already know* that I need this
bean
- otherwise I wouldn't pass it, wouldn't I? 

Cheers,
Reinhard

Reply via email to