So, when I reference these persistent child collections, won't they also need to be wrapped in a detachable model, i.e. when they're passed to a ListView? Or, because they're child objects of an already detachable model, are they detached?
On 4/11/06, Igor Vaynberg <[EMAIL PROTECTED]> wrote: > ah, if you were doing the same thing in jsp and it worked then it should > work in wicket. there is no difference. if it is still not working then you > are still not using a model somewhere and a persistent object/set ends up in > session. > > > -Igor > > On 4/11/06, Vincent Jenks <[EMAIL PROTECTED]> wrote: > > 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?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