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

Reply via email to