On Jan 17, 2005, at 11:11 AM, Brian Burridge wrote:
Where do I put the code to get the Hibernate objects? Right now, with the GUI framework they have, its done in a Struts action, which then forwards to a JSP page and uses struts tags to display the contents of the objects.
If you implement your model in Java, then you get to use the Spring framework w/ Hibernate. Follow the instructions at http://new.cocoondev.org/main/117/43.html and study that example! Many consider using Spring in this way to be the best practice for the Cocoon+Hibernate combo.
If you don't do it that way, then you pretty much have to invoke the Hibernate code from the flowscript. You're going to open a Session and start a Transaction, do some Hibernate stuff, etc., call sendPage(), then end the Transaction and close Session.
The method to load the persistent object doesn't have to be called directly in flow; you can call it from down in your model layer, but then you have to pass the session down, too -- or, better: use the Thread Local Session pattern (http://www.hibernate.org/42.html) (that's what I would do if I weren't going to use the Spring+Hibernate stuff).
But the transaction and session have to enclose everything. Don't make the mistake of trying to bury all the hibernate stuff down in the model layer (without using Spring, that is :-)... otherwise you get into trouble with lazy initialization, e.g.
1) flow calls method in model layer;
2) model opens session, does Hibernate stuff, closes session, returns an object
3) flow calls sendPage();
4) Splaaat! Hibernate says, "session closed or no session"
This kind of misdesign can result in kludgy workarounds.
GL, :-) -ml-
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
