Before posting about this problem, I should say that I'm new to JBoss. I've been
spending the last 5 months learning Java EE and developing a system using Glassfish, but
I've recently made the switch to JBoss 4.0.5 (with EJB3 capability).
I've been having a number of problems cropping up during the migration, but this
one's really got me confused. It seems that the LazyInitializationException crops up
frequently (judging from the Google results and forum posts here) - however, it's
normally in getter methods when people are using FetchType.LAZY.
In my case, I seem to be getting this exception in a setter method when I'm using
FetchType.EAGER. Here is the offending code:
| // ...
|
| @OneToMany( fetch = FetchType.EAGER, cascade = { CascadeType.ALL } )
| public Set< Season > getSeasons() { return m_seasons; }
| public void setSeasons( Set< Season > seasons )
| {
| m_seasons = new TreeSet< Season >();
|
| if( seasons != null )
| m_seasons.addAll( seasons );
| }
|
| // ...
|
I'm using a TreeSet in this way because it allows me to preserve order when loading
the entities back out of the database, as well as making use of the no-duplicates
characteristic of sets. The actual line that causes the exception is the
'm_seasons.addAll( seasons );', as shown by this extract of the stack trace:
anonymous wrote :
| ...
|
| Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a
collection, 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.PersistentSet.size(PersistentSet.java:139)
| at java.util.TreeSet.addAll(TreeSet.java:245)
| at uk.co.aeroglade.vv.entity.Property.setSeasons(Property.java:77)
| ... 93 more
|
(the top-most exception, by the way, is "javax.ejb.EJBException:
javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: Exception
occurred inside setter of uk.co.aeroglade.vv.entity.Property.seasons").
All of this code was working perfectly on Glassfish - so I'm suspecting it has
something to do with the architecture of JBoss that I've overlooked:
This exception actually occurs inside a servlet which gets hold of a stateless EJB using
JNDI lookup, since the @EJB annotation isn't supported by Tomcat 5.5. Once it has a
reference to the EJB, it calls 'getAccounts', which returns an Account object. An
Account object has a Property object, inside which has a collection of Season objects (as
you can see above).
The unhappiness seems to root from the fact that I'm using the parameter passed to the
setter.
I'll be honest: I'm completely confused and I'm not really sure where to dig
for solutions to this. I'm determined to get this working though. Any guidance
(explanations of why, references to articles/blog posts, etc.) would be greatly
appreciated!
Regards,
Chris
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3981642#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...