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