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?cmd=lnk&kid0944&bid$1720&dat1642
_______________________________________________
Wicket-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-user