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

Reply via email to