I have seen that trick before but wasn't sure if that was the best approach since I don't *always* want the collection (but would have it since I'm "preloading" before it gets to the view.)
On 4/12/06, Marco Geier <[EMAIL PROTECTED]> wrote:
"preloading" is basically just calling "mybean.getMyCollection().size()"
while you still have a session context. (i.e. either in an ejb session
bean or for a example in your Wicket page constructor, given that you
wrapped the eventhandling phase in a usertransaction.
This approach feels a little bit like EJB2 "value objects" without
having separate classes for separate usescases....
Vincent Jenks 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?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