Hi, I want to split up my seam application into 2 different application, so that I can use one JBoss as a webserver and another one as the application-server with the underlyng database. Therefor I use the EntityManager only on the application-server, so that all the updates etc. on the database all go through the same method. Now I experience problems when using my entities and want to use object, that are lazy-loaded.
One example, I have a User-object with a UserLog: | @Name("user") | @Scope(ScopeType.SESSION) | public class User implements Serializable { | ... | | @OneToMany(cascade = CascadeType.ALL, mappedBy = "user", fetch=FetchType.LAZY) | private Set<UserLog> userLogCollection ; | | ... | | public Set<UserLog> getUserLogCollection() { | return this.userLogCollection; | } | | protected void setUserLogCollection(Set<UserLog> userLogCollection) { | this.userLogCollection = userLogCollection; | } | | public void addUserLog(UserLog userLog) { | if (this.userLogCollection == null) { | this.userLogCollection = new HashSet(); | } | this.userLogCollection.add(userLog); | } | | When I Login I query the EnitityManager through my application-server and return the user-object. When I try to add a new UserLog-Object using the methods of my entity object I get a LIE, probably because the user-object is detached: | 16:45:59,978 ERROR [LazyInitializationException] failed to lazily initialize a collection of role: common.entity.User.userLogCollection, no session or session was closed | org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: common.entity.User.userLogCollection, 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.initialize(AbstractPersistentCollection.java:343) | at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86) | at org.hibernate.collection.PersistentSet.toString(PersistentSet.java:309) | at java.lang.String.valueOf(String.java:2615) | at java.lang.StringBuilder.append(StringBuilder.java:116) | When I do this through a method on my application-server together with a em.merge, everything works fine, because the entity becomes managed again. But this cannot be the solution, as would have to write a method for every lazy-loaded object on my application-server. | public User addUserLog(User user, UserLog userLog) { | User userTmp = (User) em.merge(user); | userTmp.addUserLog(userLog); | return userTmp; | } | I tryied to work with the Seam Managed Persistence Context, but as far as I could see in the documentation I have to initialize the EntityManager through the [EMAIL PROTECTED], which doesn´t seem very good, if I would like to have seam-independent controller-beans on my application server. What would be the best solution to work with lazily-loaded objects in a distributed environment? Does anyone have some experiences with that and therefor has a good recommendation? Thank you very much Thomas View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4004859#4004859 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4004859 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user