-
1. Re: Lazy Exceptions
tony.herstell1 Aug 10, 2008 3:46 AM (in response to tony.herstell1)Now I get it when I use a checkbox with Ajax to redraw less in the list.
This time its lookingfor Roles and I dont even access Roles!javax.faces.FacesException: javax.el.ELException: /pages/user/userList.xhtml @109,79 rendered="#{userListController.isShowingEmail() eq true}": org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: nz.co.selwynequestriancentre.model.entity.User.roles, no session or session was closed at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:373) at org.richfaces.component.DataIterator.nextColumn(DataIterator.java:27) at org.richfaces.component.ColumnsIterator.next(ColumnsIterator.java:40) at org.richfaces.component.ColumnsIterator.next(ColumnsIterator.java:14) at org.ajax4jsf.component.UIDataAdaptor.saveChildState(UIDataAdaptor.java:893) at org.ajax4jsf.component.UIDataAdaptor.setRowKey(UIDataAdaptor.java:346) at org.richfaces.renderkit.AbstractRowsRenderer.process(AbstractRowsRenderer.java:85) at org.ajax4jsf.model.SequenceDataModel.walk(SequenceDataModel.java:101) at org.richfaces.model.ModifiableModel.walk(ModifiableModel.java:118) at org.ajax4jsf.component.UIDataAdaptor.walk(UIDataAdaptor.java:1127) at org.richfaces.renderkit.AbstractRowsRenderer.encodeRows(AbstractRowsRenderer.java:106) at org.richfaces.renderkit.AbstractRowsRenderer.encodeRows(AbstractRowsRenderer.java:91) at org.richfaces.renderkit.AbstractRowsRenderer.encodeChildren(AbstractRowsRenderer.java:138) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812) at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282) at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:125) at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:68) at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:116) at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:68) at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:116) at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:68) at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:116) at org.ajax4jsf.renderkit.AjaxContainerRenderer.encodeAjax(AjaxContainerRenderer.java:123) at org.ajax4jsf.component.AjaxViewRoot.encodeAjax(AjaxViewRoot.java:673) at org.ajax4jsf.component.AjaxViewRoot.encodeChildren(AjaxViewRoot.java:544) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886) at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592) at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108) at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:189) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
Roles are not even lazilly fetched from User.
@OneToMany(cascade={CascadeType.ALL}) public List<SelwynEquestrianCentreRole> getRoles() { return roles; } public void setRoles(List<SelwynEquestrianCentreRole> roles) { this.roles = roles; }
-
2. Re: Lazy Exceptions
tony.herstell1 Aug 10, 2008 3:49 AM (in response to tony.herstell1)just to clarify.
This is when I move onto next page using rich:datascroller -
3. Re: Lazy Exceptions
dhinojosa Aug 10, 2008 7:51 AM (in response to tony.herstell1)What is the scope of nz.co.selwynequestriancentre.model.entity.User?
-
4. Re: Lazy Exceptions
tony.herstell1 Aug 10, 2008 9:24 AM (in response to tony.herstell1)Default... whatever that is?
Humm..what would it be and why is that important??Image and Role are also Default.
@SuppressWarnings("serial") @Entity @Name("user") @Role(name="userSearchCriteria", scope=SESSION)
/** * @author Tony Herstell * @version $Revision: 1.11 $ $Date: 2008-02-28 12:49:26 $ */ @SuppressWarnings("serial") @Entity @Name("user") @Role(name="userSearchCriteria", scope=SESSION) public class User implements Serializable { private Long id; private Integer version; // Hiberante Docs: EJB3 sais Timestamp actually but recommend Integer private String surname; private String firstname; private String password; private String email; private boolean emailContactOk = true; private String homePhone; private String mobilePhone; private boolean phoneContactOk = true; private boolean dressageJudge = false; private boolean dressageWriter = false; private boolean dressageHelper = false; private boolean sjJudge = false; private boolean sjHelper = false; private boolean showingJudge = false; private boolean showingHelper = false; private boolean eventsHelper = false; private boolean termsApproved = false; private List<SelwynEquestrianCentreRole> roles; private Image avatar; private MaintenanceDates maintenanceDates; private List<Booking> bookings;
-
5. Re: Lazy Exceptions
dhinojosa Aug 10, 2008 11:11 PM (in response to tony.herstell1)What about UserListController?
Entities are conversation scope by default. The inevitable solution is going to be to figure out what scopes everything is, and why they shut down earlier than you expect them to. -
6. Re: Lazy Exceptions
tony.herstell1 Aug 10, 2008 11:35 PM (in response to tony.herstell1)UserListController is conversational; even tried it as a stateless bean but that made matters worse; not better. It could have been stateless as I only wanted to lauch conversations for CRUD from it and didn't care if when I got back to the user list it had to re-fetch it (performace is not a big issue for this project and I could refactor it to be session scoped and stateful later).
I will go through all contributing
stuff
tonight and see if anything is not convesational.It really seems like these are involved it the problem
private List<SelwynEquestrianCentreRole> roles; private Image avatar;
maintenanceDates are an embedded entity in the user entity so for all intents and purposes it's
in
the user entity. This has never caused a problem
private MaintenanceDates maintenanceDates;
Most Seam example I have seen don't go down lower than 1 entity deep so I dont have much to go on... and Datatable and DataScroller being components mean there is little I can work through.
I will also try removing the above parts of the User entity and see if that gets me further... it seem that the User entity is becoming detached (for some reason); so when access is made to the role or avatar Seam Barfs.
This pattern I have used before in ICEFaces and it worked perfectly and I still have the option of using the ICEFaces datatables; just wanted to upskill on both Component sets...
I have come across this before ages ago, and re-read the entity to get an attached copy, but this seems totally inefficient for the whole user list... I need to fix this (probably flaws in my knowledge of Seam and how it all hangs together) this time.
Thanks for your support Dan.
-
7. Re: Lazy Exceptions
dhinojosa Aug 11, 2008 12:19 AM (in response to tony.herstell1)Ok, just do a review of your components. Somewhere along the way one of your beans is going out of scope causing your entity to become detached.
-
8. Re: Lazy Exceptions
tony.herstell1 Aug 11, 2008 12:24 AM (in response to tony.herstell1)I usually have a log.info on the @Destroy method of my beans.
Ill ensure I have them all in place (even the entities if I can!).
At least I have somehere to look now.
Thx.
-
-
-
11. Re: Lazy Exceptions
dhinojosa Aug 11, 2008 4:43 AM (in response to tony.herstell1)Are you using a Seam 1.1.x? or Seam 2.x?
The term @Conversional I think is old as for 2.x, and may not be supported. It's now @Scope(type=ScopeType.CONVERSATION).
The other blaring red flag is:
@PersistenceContext private EntityManager em;
That isn't stateful. Therefore once you get an entity you can no longer ask it for more information, it immediately becomes detached. You need to make that an EXTENDED context or better yet, make it SMPC (Seam Managed Persistence Context) to have more functionality.
-
12. Re: Lazy Exceptions
tony.herstell1 Aug 11, 2008 6:10 AM (in response to tony.herstell1)Using Latest Seam proddie and RF.
oh! When did all that change? I skipped a few months a while back (was working with Construction team driving big diggers/scrapers etc.) and doing Wiring/Building etc. on the Equestrian Centre.
If its deprecated why no warnings in the serverlog... I will check!
> make it SMPC (Seam Managed Persistence Context) to have more functionality
Err.. Yes my bad for foreggting about EXTENDED but SMPC.. whats that ! I will have read up on that tonight.
thx.
-
13. Re: Lazy Exceptions
dhinojosa Aug 11, 2008 8:35 AM (in response to tony.herstell1)Ooops, yeah @Conversational is still good, my mistake.
From Seam in Action..
If you want to enforce that a component or method only be used within the scope of a long-
running conversation, annotate the component class or the method with the
@Conversational annotation, summarized in table 7.5. Seam verifies that the
conversation is long-running before permitting a call to the following method:
@Conversational public String saveBasicCourseInfo() { ... }
If an attempt is made to execute a @Conversational method outside the presence of a
long-running conversation, Seam will raise the org.jboss.seam.noConversation event
and then throw the runtime exception NoConversationException.SMPC - is Seam Managed Persistence Context. Its just like EXTENDED but with more features to it.
-
14. Re: Lazy Exceptions
tony.herstell1 Aug 11, 2008 8:53 AM (in response to tony.herstell1)No Worries mate.
I only met one person that never makes mistakes and knows everything.
After marrying her I just sold the Encyclopedia Britannica.Looking up SMPC in the doco now.
If this works I am going to be SOOO happy; in anticipation I already gave you a few stars!
:)