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

Reply via email to