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

Reply via email to