I'm currently using Struts2 in a project that is utilizing the Java Persistence
API (JPA, specifically Hibernate) with container managed transactions (CMT).  To
access the Persistence layer, a layer was created using SLSBs as "service"
objects which provide simple "<entity_type> get<entity_type>ById( int )" and
"List<<entity_type>> get<entity_type>s()" type methods.  The Struts2 Actions use
these beans (by injection (provided by some interceptor, such as the EJB3
Plugin) or a JNDI lookup, it doesn't matter really) to get the instances of the
entities.

Up until now, all of the properties of the entities that were being accessed to
create the view were either eagerly fetched associations, or private members of
the entity.  Recently, I have the need to start using lazily fetched
associations (self joins and the like), and need to find a way to extend the
Persistence context through to the view generation.

Although there isn't much need to explain, the error I am receiving is the
following:
ERROR [LazyInitializationException] failed to lazily initialize a collection of
role: <private_member_name>, no session or session was closed

I noticed recently that there was a "Full Hibernate" Plugin that supports
injection of a Session (presumably into an Action?) and will close the Session
after the view generation.  This works fine for application managed persistence,
but does not solve the issue of when using CMT (or at least to my knowledge).

Searching the web for solutions to the problem resulted in a suggestion to
create an interceptor (that runs after the Action, but before the view
generation?) that does a JNDI lookup to create an EntityManager (extending the
Persistence Context to the interceptor, I think).  I'm not sure what this was
supposed to resolve, but I have not tried this as 1) I'm not sure how to create
such an interceptor and get it to "intercept" at the appropriate time, and 2) I
don't think this would resolve anything, as I don't think this would really
extend the Persistence Context through to the view generation.

How are others resolving this issue and using lazy initialization?

I have a few more ideas as last resorts, but I don't want to taint the
responses, so I will hold onto them for now.

Thanks,
-Nate


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org

Reply via email to