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#3981642
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3981642
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user