That'd basically require me to re-write my application and do everything in an entirely different way...and I'd rather just deal w/ eager fetching and limit the number of records I'm calling instead. Since I'm using the EJB3 EntityManager I don't want to have to resort to touching the Hibernate details underneath (or using EJB at all is worthless to me since I could just use Hibernate and do it w/ less dinking around.) This EJB3 stuff was supposed to make my life easier ;)
I guess I assumed Wicket wouldn't cause this since I was doing the same thing when using Servlets & JSP. The panels were JSP Tag Files and I passed data in through attributes...as wasn't getting the Lazy exception. Obviously...different technologies...different issues. I'm still fairly ignorant when it comes to Wicket. I appreciate all the help anyways! On 4/11/06, Igor Vaynberg <[EMAIL PROTECTED]> wrote: > you can have a filter that opens AND closes the session/transaction. keep it > in a threadlocal, and a base dao that retrieves it from the threadlocal. you > can also keep rollback flag in the threadlocal so the filter knows if it > needs to rollback or commit the transaction. > > hibernate 3 also has the sessionfactory.currentsession that lets you hook > into the filter's session threadlocal so that your daos can just go > sessionfactory.currentsession(). > > also spring takes care of all this for you via open session in view filter. > im sure there is something similar for ejb3. > > > -Igor > > > On 4/11/06, Vincent Jenks <[EMAIL PROTECTED]> wrote: > > Ugh...I thought once I started using a container this issue would go > > away...that was the one thing that made setting up Hibernate a > > PITA....managing the frickin' session context (I thought it was really > > ugly to open the session in the DAO and close it in a filter...with no > > real control over the transaction.) > > > > Marco, what do you mean by "preloading" the collections? Not a term > > I've heard before...not familiar w/ the concept - it sounds a little > > like eager fetching. Or, is that to say that you fetch them > > separately instead of allowing hibernate/EJB3 to automatically pull > > the collection? > > > > I'll just use eager fetching for now and see if someone can help me > > out on the EJB3 user forums in figuring out the session problem. I've > > been scanning over the EntityManager docs for a couple hours and I > > don't see an obvious solution. > > > > Thanks guys! > > > > On 4/11/06, Marco Geier <[EMAIL PROTECTED] > wrote: > > > you could wrap a transaction around the render phase) > > > (and also around the event processing phase, or both, depending on your > > > RenderStrategy) > > > > > > The key is: > > > > > > UserTransaction ut = (UserTransaction) new > > > InitialContext().lookup("java:comp/UserTransaction"); > > > > > > But you may need to reattach beans to the session, for the lazy > > > collection thing to work properly. > > > > > > But ususally i just "preload" the collections, for example when i build > > > or attach the model, > > > > > > hth > > > > > > Marco > > > > > > Vincent Jenks wrote: > > > > Yes...if I were using plain Hibernate and not EJB3...like I explained > > > > in my first post. I need another way of making this work (as Igor > > > > said...a way to keep the session open somehow in the container) - a > > > > way that wouldn't require any Hibernate-specific coding... > > > > > > > > I've built several plain Hibernate (Hibernate + Servlets + EJB) where > > > > the DAOs would open the transaction and a filter would close the > > > > session...but that doesn't apply so much here, if I'm not mistaken. > > > > > > > > On 4/11/06, Andrew Berman < [EMAIL PROTECTED]> wrote: > > > > > > > >>You need Open Session In View --> > > > >>http://www.hibernate.org/43.html > > > >> > > > >> > > > >>On 4/11/06, Igor Vaynberg < [EMAIL PROTECTED]> wrote: > > > >> > > > >>>in that case your container's persistence mechanism is closing the > > > >> > > > >>underlying hibernate session after the end of the invocation? this is > a > > > >>container specific problem not a wicket one. you need to figure out > how to > > > >>tell your container to keep the underlying entity manager session open > so > > > >>that lazy collections can be fetched even outside the > session/stateless > > > >>bean's method invocation. > > > >> > > > >>> > > > >>>-Igor > > > >>> > > > >>> > > > >>> > > > >>>On 4/11/06, Vincent Jenks < [EMAIL PROTECTED]> wrote: > > > >>> > > > >>>>I changed the param to look like yours: > > > >>>> > > > >>>>new PropertyModel(blogModel, "categories") > > > >>>> > > > >>>>...and I get the same exception...no luck! > > > >>>> > > > >>>>On 4/11/06, Igor Vaynberg < [EMAIL PROTECTED]> wrote: > > > >>>> > > > >>>>>you are still not using a model for the listview, you are binding > the > > > >>>>>listview to hibernate's lazy initializable set instead in this > line: > > > >>>>> > > > >>>>> > > > >>>>>add(new ListView("categoriesView", ((Blog)getModelObject()) > > > >>>>> .getCategories()) > > > >>>>> > > > >>>>>try changing that to: > > > >>>>> > > > >>>>>add(new ListView("categoriesView", new PropertyModel(blogModel, > > > >>>>>"categories")); > > > >>>>> > > > >>>>>or create a simple wrapper around blogmodel directly if you dont > want > > > >> > > > >>to use > > > >> > > > >>>>>"soft binding" and reflection. > > > >>>>> > > > >>>>>-Igor > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>>On 4/11/06, Vincent Jenks < [EMAIL PROTECTED]> wrote: > > > >>>>> > > > >>>>> OK, this doesn't appear to work. I finally got around to testing > > > >> > > > >>this > > > >> > > > >>>>>and I still get a > > > >>>>>LazyInitializationException. > > > >>>>> > > > >>>>>I passed the model around and it's barfing. > > > >>>>> > > > >>>>>"main" page (ViewBlog.class): > > > >>>>> > > > >>>>> //get object graph in detachable model > > > >>>>> IModel blogModel = new LoadableDetachableModel() > > > >>>>> { > > > >>>>> protected Object load() > > > >>>>> { > > > >>>>> //get blog & > entries > > > >>>>> Blog blog = > > > >>>>>BlogProxy.getDefault (); > > > >>>>> return blog; > > > >>>>> } > > > >>>>> }; > > > >>>>> > > > >>>>> //set as page model > > > >>>>> setModel(blogModel); > > > >>>>> > > > >>>>> //add panel components > > > >>>>> add(new TopicsPanel("topicsPanel", blogModel)); > > > >>>>> > > > >>>>>In the TopicsPanel class: > > > >>>>> > > > >>>>>public class TopicsPanel extends Panel > > > >>>>>{ > > > >>>>> public TopicsPanel(String id, IModel blogModel) > > > >>>>> { > > > >>>>> super(id, blogModel); > > > >>>>> > > > >>>>> //get model object > > > >>>>> Blog blog = (Blog)getModelObject(); > > > >>>>> > > > >>>>> //add list view repeater > > > >>>>> add(new ListView("categoriesView", > > > >>>>>((Blog)getModelObject()).getCategories()) > > > >>>>> { > > > >>>>> protected void > > > >>>>>populateItem(ListItem item) > > > >>>>> { > > > >>>>> //get row model > > > >>>>> final Category > > > >> > > > >>category = > > > >> > > > >>>>>(Category)item.getModelObject(); > > > >>>>> > > > >>>>> //create link > > > >>>>> Link categoryLink > = > > > >> > > > >>new > > > >> > > > >>>>>PageLink("categoryLink", ViewBlog.class) > > > >>>>> { > > > >>>>> public > void > > > >>>>>onClick() > > > >>>>> { > > > >>>>> > > > >>>>>info("booyah!"); > > > >>>>> } > > > >>>>> }; > > > >>>>> > > > >>>>> //add category > name > > > >> > > > >>label > > > >> > > > >>>>> > categoryLink.add(new > > > >>>>>Label("topic", category.getName ())); > > > >>>>> > > > >>>>> //add link > > > >>>>> > > > >> > > > >>item.add(categoryLink); > > > >> > > > >>>>> } > > > >>>>> }); > > > >>>>> } > > > >>>>>} > > > >>>>> > > > >>>>>Where I'm trying to retrive the lazy collection in the ListView the > > > >>>>>session has still been lost. > > > >>>>> > > > >>>>>What have I done wrong? How can I get the lazily loaded collection > > > >>>>>and not have to resort to eager fetching? > > > >>>>> > > > >>>>>Remember, I'm not using Hibernate directly...I'm using JBoss EJB3 > in > > > >>>>>JBoss 4.0.4RC1...I don't have a lot of control over Hibernate...no > do > > > >>>>>I want to if I want to keep my project container-independent. > > > >>>>> > > > >>>>>Thanks! > > > >>>>> > > > >>>>>On 3/20/06, Igor Vaynberg <[EMAIL PROTECTED]> wrote: > > > >>>>> > > > >>>>>>or pass the same model :) > > > >>>>>> > > > >>>>>> > > > >>>>>>-Igor > > > >>>>>> > > > >>>>>> > > > >>>>> > > > >>>>> > > > > >>>>> > > > >>>>>>On 3/20/06, Vincent Jenks <[EMAIL PROTECTED] > wrote: > > > >>>>>> > > > >>>>>>>Well, in the previous page which passes the Product into this > > > >> > > > >>page...the > > > >> > > > >>>>>object was wrapped in a detachable model...not just called > > > >> > > > >>directly...so I > > > >> > > > >>>>>should try and wrap it again in the current page? > > > >>>>> > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> On 3/20/06, Igor Vaynberg < [EMAIL PROTECTED]> wrote: > > > >>>>>>> > > > >>>>>>>>instead of using the product object directly, use a detachable > > > >> > > > >>model. > > > >> > > > >>>>>>>>you might also need to use an open session in view interceptor > > > >> > > > >>in case > > > >> > > > >>>>>jboss closes the hibernate session after your bean's method is > > > >> > > > >>finished > > > >> > > > >>>>>executing. if it does this, then by the time wicket code runs the > > > >> > > > >>object is > > > >> > > > >>>>>already disconnected from its session and thus cant load any child > > > >>>>>collections. > > > >>>>> > > > >>>>>>>> > > > >>>>>>>>-Igor > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>>On 3/20/06, Vincent Jenks < [EMAIL PROTECTED] > wrote: > > > >>>>>>>> > > > >>>>>>>>>OK, so I'm in a bit of a quagmire. > > > >>>>>>>>> > > > >>>>>>>>>I'm using Wicket + EJB3 (JBoss 4.0.4RC1) which uses Hibernate > > > >> > > > >>as the > > > >> > > > >>>>>persistence behind EJB3. > > > >>>>> > > > >>>>>>>>>Unless I set all of my parent/child object relationship > > > >> > > > >>annotations > > > >> > > > >>>>>to EAGER fetching...I get this error: > > > >>>>> > > > >>>>>>>>>"org.hibernate.LazyInitializationException : > > > >> > > > >>failed > > > >> > > > >>>>>to lazily initialize a collection of role:...." > > > >>>>> > > > >>>>>>>>>...when I try to access the child collection of the parent > > > >> > > > >>object. > > > >> > > > >>>>>In my case, for example, I am passing an object to a form in Wicket > > > >> > > > >>using > > > >> > > > >>>>>the constructor: > > > >>>>> > > > >>>>>>>>>public class ProductDetail extends WebPage > > > >>>>>>>>>{ > > > >>>>>>>>> public ProductDetail() > > > >>>>>>>>> { > > > >>>>>>>>> this(null); > > > >>>>>>>>> } > > > >>>>>>>>> > > > >>>>>>>>> public ProductDetail(Product product) > > > >>>>>>>>> { > > > >>>>>>>>> add(new > > > >>>>> > > > >>>>>ProductDetailForm("productDetailForm", product)); > > > >>>>> > > > >>>>>>>>>... > > > >>>>>>>>> > > > >>>>>>>>>The parent object being "Product" and the child being > > > >>>>> > > > >>>>>Product.getConfigurations ()....which is a List<Configuration>. > > > >>>>> > > > >>>>>>>>>This same ProductDetail page has a form (see above where I > > > >> > > > >>passed > > > >> > > > >>>>>the Product into the form)...and I need to access the child > collection > > > >>>>>inside the form: > > > >>>>> > > > >>>>>>>>> add(new ListView("configs", > > > >> > > > >>product.getConfigurations()) > > > >> > > > >>>>>>>>> { > > > >>>>>>>>> protected void > populateItem(ListItem item) > > > >>>>>>>>> { > > > >>>>>>>>> final Configuration config > = > > > >>>>> > > > >>>>>(Configuration)item.getModelObject(); > > > >>>>> > > > >>>>>>>>> item.add(new Label("quantity", > > > >>>>> > > > >>>>>String.valueOf(config.getQuantity ()))); > > > >>>>> > > > >>>>>>>>> item.add(new Label("name", > > > >> > > > >>config.getName())); > > > >> > > > >>>>>>>>> item.add(new Label("weight", > > > >>>>> > > > >>>>>config.getWeight())); > > > >>>>> > > > >>>>>>>>> item.add(new Label("price", > > > >> > > > >>String.valueOf( > > > >> > > > >>>>>config.getPrice()))); > > > >>>>> > > > >>>>>>>>> } > > > >>>>>>>>> }); > > > >>>>>>>>> > > > >>>>>>>>>badda-bing...here's when the exception occurs. Now...I > > > >> > > > >>*could* fix > > > >> > > > >>>>>it by setting the collection to EAGER fetching...but this could > > > >> > > > >>eventually > > > >> > > > >>>>>cause me some severe performance problems....especially once the > > > >> > > > >>collections > > > >> > > > >>>>>begin to grow in size...I just have to be able to do LAZY fetching. > > > >>>>> > > > >>>>>>>>>Since I'm using EJB3 CMP I don't have control over the > > > >> > > > >>hibernate > > > >> > > > >>>>>session - the container does...so my flexibility there is limited. > Is > > > >> > > > >>there > > > >> > > > >>>>>something I could do to work around this? > > > >>>>> > > > >>>>>>>>>Thanks! > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>>>> > > > > >>------------------------------------------------------- > > > >> > > > >>>>>This SF.Net email is sponsored by xPML, a groundbreaking scripting > > > >> > > > >>language > > > >> > > > >>>>>that extends applications into web and mobile media. Attend the > live > > > >> > > > >>webcast > > > >> > > > >>>>>and join the prime developer group breaking into this new coding > > > >> > > > >>territory! > > > >> > > > >> > http://sel.as-us.falkag.net/sel?cmdlnk&kid0944&bid$1720&dat1642 > > > >> > > > >>>>>_______________________________________________ > > > >>>>>Wicket-user mailing list > > > >>>>>Wicket-user@lists.sourceforge.net > > > >>>>> > > > >> > > > >> > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > >> > > > >>>>> > > > >>>> > > > > >>>>------------------------------------------------------- > > > >>>>This SF.Net email is sponsored by xPML, a groundbreaking scripting > > > >> > > > >>language > > > >> > > > >>>>that extends applications into web and mobile media. Attend the live > > > >> > > > >>webcast > > > >> > > > >>>>and join the prime developer group breaking into this new coding > > > >> > > > >>territory! > > > >> > > > >> > http://sel.as-us.falkag.net/sel?cmdlnk&kid0944&bid$1720&dat1642 > > > >> > > > >>>>_______________________________________________ > > > >>>>Wicket-user mailing list > > > >>>>Wicket-user@lists.sourceforge.net > > > >>>> > > > >> > > > >> > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > >> > > > >>> > > > >> > > > > > > > > > > > > > ------------------------------------------------------- > > > > This SF.Net email is sponsored by xPML, a groundbreaking scripting > language > > > > that extends applications into web and mobile media. Attend the live > webcast > > > > and join the prime developer group breaking into this new coding > territory! > > > > > http://sel.as-us.falkag.net/sel?cmd=k&kid0944&bid$1720&dat1642 > > > > _______________________________________________ > > > > Wicket-user mailing list > > > > Wicket-user@lists.sourceforge.net > > > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > > > > > > -- > > > ___________________________ > > > > > > Dipl.-Ing. Marco Geier > > > EyeTea GmbH > > > Germany > > > phone +49 (0)721 662464-0 > > > fax +49 (0)721 662464-1 > > > mobile +49 (0)177 6579590 > > > [EMAIL PROTECTED] > > > > > > > > > ------------------------------------------------------- > > > This SF.Net email is sponsored by xPML, a groundbreaking scripting > language > > > that extends applications into web and mobile media. Attend the live > webcast > > > and join the prime developer group breaking into this new coding > territory! > > > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 > > > _______________________________________________ > > > Wicket-user mailing list > > > Wicket-user@lists.sourceforge.net > > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > ------------------------------------------------------- > > This SF.Net email is sponsored by xPML, a groundbreaking scripting > language > > that extends applications into web and mobile media. Attend the live > webcast > > and join the prime developer group breaking into this new coding > territory! > > > http://sel.as-us.falkag.net/sel?cmdlnk&kid0944&bid$1720&dat1642 > > _______________________________________________ > > Wicket-user mailing list > > Wicket-user@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid0944&bid$1720&dat1642 _______________________________________________ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user