use *OpenSessionInViewFilter* to avoid lazy initialization exceptions

On Fri, Oct 2, 2009 at 8:42 AM, Albert Romanius <[email protected]>wrote:

> The line that throws the exception is below:
> CheckBoxMultipleChoice subMessagesCB = new CheckBoxMultipleChoice(
>               "subMessages", new PropertyModel(this,
> "selectedSubs"), showMessage.getLazyList());
>
> The problem is the showMessage.getLazyList() call. When wicket renders
> this combobox, spring filter have already closed the EntityManager.
> If I uncomment this line (ugly hack):
>  //showMessage.getLazyList().size();
> Everything works.
>
> I am using tomcat 6.0.18 (bundled with Netbeans).
>
>
> The stacktrace:
>
> ERROR - azyInitializationException - failed to lazily initialize a
> collection of role: com.mycompany.persistence.domain.Message.lazyList,
> no session or session was closed
> org.hibernate.LazyInitializationException: failed to lazily initialize
> a collection of role:
> com.mycompany.persistence.domain.Message.lazyList, no session or
> session was closed
>        at
> org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
>        at
> org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
>        at
> org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:97)
>        at
> org.hibernate.collection.PersistentBag.size(PersistentBag.java:225)
>        at
> org.apache.wicket.markup.html.form.ListMultipleChoice.onComponentTag(ListMultipleChoice.java:246)
>        at
> org.apache.wicket.markup.html.form.CheckBoxMultipleChoice.onComponentTag(CheckBoxMultipleChoice.java:359)
>        at org.apache.wicket.Component.renderComponent(Component.java:2597)
>        at
> org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1536)
>        at org.apache.wicket.Component.render(Component.java:2457)
>        at
> org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1414)
>        at
> org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1601)
>        at
> org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1525)
>        at
> org.apache.wicket.markup.html.form.Form.onComponentTagBody(Form.java:1926)
>        at org.apache.wicket.Component.renderComponent(Component.java:2626)
>        at
> org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1536)
>        at org.apache.wicket.markup.html.form.Form.onRender(Form.java:1997)
>        at org.apache.wicket.Component.render(Component.java:2457)
>        at
> org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1414)
>        at
> org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1552)
>        at org.apache.wicket.Page.onRender(Page.java:1545)
>        at org.apache.wicket.Component.render(Component.java:2457)
>        at org.apache.wicket.Page.renderPage(Page.java:914)
>        at
> org.apache.wicket.request.target.component.PageRequestTarget.respond(PageRequestTarget.java:63)
>        at
> org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105)
>        at
> org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1258)
>        at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
>        at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428)
>        at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
>        at
> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:456)
>        at
> org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:289)
>        at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>        at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>        at
> org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:112)
>        at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
>        at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>        at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>        at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>        at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>        at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>        at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>        at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>        at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
>        at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
>        at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
>        at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>        at java.lang.Thread.run(Thread.java:619)
> ERROR - RequestCycle               - Exception in rendering component:
> [MarkupContainer [Component id = form]]
> org.apache.wicket.WicketRuntimeException: Exception in rendering
> component: [MarkupContainer [Component id = form]]
>        at org.apache.wicket.Component.renderComponent(Component.java:2665)
>        at
> org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1536)
>        at org.apache.wicket.markup.html.form.Form.onRender(Form.java:1997)
>        at org.apache.wicket.Component.render(Component.java:2457)
>        at
> org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1414)
>        at
> org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1552)
>        at org.apache.wicket.Page.onRender(Page.java:1545)
>        at org.apache.wicket.Component.render(Component.java:2457)
>        at org.apache.wicket.Page.renderPage(Page.java:914)
>        at
> org.apache.wicket.request.target.component.PageRequestTarget.respond(PageRequestTarget.java:63)
>        at
> org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105)
>        at
> org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1258)
>        at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
>        at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428)
>        at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
>        at
> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:456)
>        at
> org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:289)
>        at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>        at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>        at
> org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:112)
>        at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
>        at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>        at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>        at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>        at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>        at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>        at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>        at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>        at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
>        at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
>        at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
>        at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>        at java.lang.Thread.run(Thread.java:619)
> Caused by: org.hibernate.LazyInitializationException: failed to lazily
> initialize a collection of role:
> com.mycompany.persistence.domain.Message.lazyList, no session or
> session was closed
>        at
> org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
>        at
> org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
>        at
> org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:97)
>        at
> org.hibernate.collection.PersistentBag.size(PersistentBag.java:225)
>        at
> org.apache.wicket.markup.html.form.ListMultipleChoice.onComponentTag(ListMultipleChoice.java:246)
>        at
> org.apache.wicket.markup.html.form.CheckBoxMultipleChoice.onComponentTag(CheckBoxMultipleChoice.java:359)
>        at org.apache.wicket.Component.renderComponent(Component.java:2597)
>        at
> org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1536)
>        at org.apache.wicket.Component.render(Component.java:2457)
>        at
> org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1414)
>        at
> org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1601)
>        at
> org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1525)
>        at
> org.apache.wicket.markup.html.form.Form.onComponentTagBody(Form.java:1926)
>        at org.apache.wicket.Component.renderComponent(Component.java:2626)
>
>
>
>
>
> On Thu, Oct 1, 2009 at 10:39 PM, Marcelo Fukushima <[email protected]>
> wrote:
> > while i couldnt identify which object is throwing the
> > lazyInitialization, the problem is probably that the entity is not
> > associated with the hibernate session. On the request that opens the
> > ModalWindow you must either reload or reatach the entity
> >
> > On Thu, Oct 1, 2009 at 7:55 PM, Albert Romanius <[email protected]>
> wrote:
> >> Hi,
> >>
> >> I am working with wicket and jpa/hibernate/spring. I am trying to
> >> create a ModalWindow, but I get a LazyLoadingException. I tryed the
> >> OSIVpattern, but it did not work.
> >> Using the modal inside a form does not make any difference also.
> >>
> >> Has anyone else this problem?
> >>
> >>
> >> The page which the modalWindow is triggered has:
> >> ===============
> >>  AjaxLink link = new AjaxLink("openModal") {
> >>                    @Override
> >>                    public void onClick(AjaxRequestTarget target) {
> >>                        modalWindow.setPageCreator(new
> >> ModalWindow.PageCreator() {
> >>                            public Page createPage() {
> >>                                return new MyModalPage(modalWindow,
> >> messageListModel.getObject().get(0));
> >>                            }
> >>                        });
> >>                        modalWindow.show(target);
> >>                    }
> >>   };
> >> ==============
> >>
> >> #Modal Panel
> >> ==============
> >> public class MyModalPage extends WebPage {
> >>
> >>    @SpringBean
> >>    GeneralRepository generalRepository;
> >>
> >>    Set<SubMessage> selectedSubs = new HashSet<SubMessage>();
> >>
> >> public MyModalPage(final ModalWindow window, Message message) {
> >>
> >>        Message showMessage = (Message)
> >> generalRepository.<Message>getById(message.getId(), Message.class);
> >>
> >>        //showMessage.getLazyList().size();
> >>
> >>        Form f = new Form("form");
> >>        add(f);
> >>
> >>        CheckBoxMultipleChoice subMessagesCB = new
> CheckBoxMultipleChoice(
> >>                "subMessages", new PropertyModel(this,
> >> "selectedSubs"), showMessage.getLazyList());
> >>        f.add(subMessagesCB);
> >>
> >>        AjaxButton saveButton = new AjaxButton("save") {
> >>
> >>            @Override
> >>            protected void onSubmit(AjaxRequestTarget target, Form<?>
> arg1) {
> >>                window.close(target);
> >>            }
> >>        };
> >>
> >>        f.add(saveButton);
> >>
> >>        add(new AjaxLink("closeCancel")
> >>        {
> >>            @Override
> >>            public void onClick(AjaxRequestTarget target)
> >>            {
> >>                window.close(target);
> >>            }
> >>        });
> >>
> >>
> >>    }
> >> ==========
> >>
> >>
> >> --
> >> Albert
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [email protected]
> >> For additional commands, e-mail: [email protected]
> >>
> >>
> >
> >
> >
> > --
> > http://mapsdev.blogspot.com/
> > Marcelo Takeshi Fukushima
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> >
> >
>
>
>
> --
> Albert
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>


-- 
Pedro Henrique Oliveira dos Santos

Reply via email to