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 > > > > [email protected] > > > > > 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 > > > [email protected] > > > > 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 [email protected] https://lists.sourceforge.net/lists/listinfo/wicket-user
