Using the Spring ContextLoaderPlugin where Spring proxies the Struts dispatcher, also handles this issue.
http://static.springframework.org/spring/docs/1.2.x/reference/webintegration.html#struts-contextloaderplugin Matt On 11/30/05, Jadeler <[EMAIL PROTECTED]> wrote: > > Hi Tom, > > This is actually a common problem and a pattern called Open Session > in View was used to solve that specific problem. Because you are also > using Spring with Hibernate, you can check out: > > http://www.springframework.org/docs/api/org/springframework/orm/hibernate/support/OpenSessionInViewFilter.html > > What I did was just add this to my web.xml: > > <filter> > <filter-name>hibernateFilter</filter-name> > <filter-class> > > org.springframework.orm.hibernate3.support.OpenSessionInViewFilter > </filter-class> > </filter> > > I use to also get the lazy initialization exception but this > filter will allow lazy loading in the web view. I dont think you > should be checking for that exception in you dao if you implement the > open session in view pattern. > > Jadeler > > Tom Ziemer <[EMAIL PROTECTED]> wrote: Hi Marco, > > I guess, I'll go with the DTO approach if I'll get no further input. > Will BeanUtils.copyProperties also work on nested collections, though? > > When you encounter a LazyInitializationException, it means that you > access a collection of an object that is no longer connected to a > HibernateSession. One option would be to reconnect the object to a new > session. > > If such an exception is thrown, I guess this should be handled by the > DAO, so that the business layer does not need to know that hibernate is > used for data access. > > I'll look at the BeanUtils now... > Thanks again, > Tom > > Marco Mistroni wrote: > > Hello, > > You invoke BeanUtils.copyProperties on two objects, it will copy > > Only properties that are the same between two objects.. > > As I said, could you handle your lazyexception by simply building > another > > collection out of the collection returned by hibernate? > > > > Btw, sorry for my ignorance about that lazy exception, but what are you > > Supposed to do when a lazy exception is thrown? > > > > Apart from my ignorance of that exception, I suppose it's better to > handle > > That exception in your service layer, so you will give to the web layer > > A 'proper' collection rather than let the web layer handle that... > > > > HTH > > marco > > > > > > > > -----Original Message----- > > From: Tom Ziemer [mailto:[EMAIL PROTECTED] > > Sent: 30 November 2005 15:39 > > To: Struts Users Mailing List > > Subject: Re: slightly [OT] Hibernate and domain objects in web apps > > > > Hi, > > > > @Matt: > > thanks for your elaborate answer. My setup is a lot like yours: Spring > > manages the business objects and the DAOs. My problem is this: > > > > Struts->Business layer->HibernateDAO->Database will return a hibernate > > proxy of my dom object. I have to load all objects lazily, because our > > db has got a very hierarchical layout. This in turn means, that I cannot > > use Hibernate.initialize on all collections, because it would be to > > expensive. Thus, I return an object, which is partially loaded - if my > > action accesses an attribute, which has not been initialized, I'll have > > to deal with a LazyInitializationExceptions, which, IMO, is bad. > > > > Apart from that, I'd like to ask, how you deal with lazy loading in > > general. Do you always return "complete", that is fully initialized > > objects? If not, how do you reflect this in your business layer? Will > > there be multiple methods for each object, depending on the number of > > collections that need to be initialized? > > > > @Marco > > again, thank you for your reply. My problem with DTOs is, that I expect > > to have about 150 dom objects, which would result in 150 DTOs. These are > > objects that I actually do not need - it'll just decrease performance. > > But unfortunately I do see an alternative to DTOs so far, so in case > > nobody else comes up with a brilliant idea, I guess I'll have to > > implement it that way. > > > > BTW: Is it possible to use BeanUtils to copy entire beans or will I have > > to use copy() on each property? Are DynaBeans (beanUtils) an > alternative? > > > > Thanks, > > Tom > > > > Matt Morton wrote: > > > >>Hi Tom > >> > >>In our app we are using pattern where Struts calls a method from what I > > > > call > > > >>a service layer object. Then the service layer calls the dao interface. > >>Then there is an implementation of the dao for Hibernate. So the call > > > > stack > > > >>is something like: > >> > >>Struts Action -> ServiceManager.getSomeObject(Integer id) -> > > > > DAO.get(Integer > > > >>id) -> return Object > >> > >> The service layer are actually Spring beans. These beans are bound to > > > > the > > > >>dao's in the Spring appContext. I am also using Spring to manage the > > > > Struts > > > >>actions. > >> > >>I have always wrestled with the DTO question. I guess I haven't seen > the > >>need for it while using Spring and Hibernate. I have also created > objects > >>that are specific to the view object (like a set of menu links) that is > >>being created dynamically and then populated that with the domain > objects > >>values that were needed. This latter solution is more like a poor mans > > > > (in > > > >>regards too time) JSF. > >> > >>With regards to the LazyLoading issues for collections that reference > > > > other > > > >>domain objects I usually use the Hibernate.initialize(Object) > method. It > >>will then go through and load the objects in the collection that are > >>necessary for what domain object you are using. Then send the object > back > >>to the action to be manipulated as necessary. > >> > >>Probably not perfect but seems to provide the flexibility we need. I am > >>interested to know what others are doing too. > >> > >>Hope that helps. > >> > >>Matt Morton > >> > >>On 11/30/05, Tom Ziemer wrote: > >> > >> > >>>Hi, > >>> > >>>I have got a little problem with Hibernate - well actually it is only > >>>partially related to it: > >>> > >>>My app uses Spring + Hibernate (lazy loading), but should I return the > >>>value beans (dom) from Hibernate to my Struts actions? If I do this, > I'd > >>>have to deal with LazyInitializationExceptions for collections that > have > >>>been lazy-loaded. In my opinion, this would be a horrible design > because > >>>the view would have to know about the data access tier. On the other > >>>hand, I've read, that "DTOs are evil" - but how can I solve this > problem > >>>without DTOs? > >>> > >>>I am sure, lots of you are using > >>>Hibernate/{YOUR_LIST_OF_OTHER_GREAT_FRAMEWORKS_HERE}/Struts and I'd be > >>>grateful for any help. > >>> > >>>Thanks, > >>>Tom > >>> > >>>--------------------------------------------------------------------- > >>>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>For additional commands, e-mail: [EMAIL PROTECTED] > >>> > >>> > >> > >> > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------- > Find your next car at Yahoo! Canada Autos >