LazyInitializationException - JPA hibernate tomcat without jboss embedded
tathagat May 13, 2009 4:49 PMHi guys.
I have a JPA seam application running on tomcat 6.
Seam version - 2.1.1.GA.
I think
I have SMPC set up properly so as not to get LIE. My code is following. May be you guys see there something I am missing.
Thanks in advance.
components.xml
<?xml version="1.0" encoding="UTF-8"?> <components xmlns="http://jboss.com/products/seam/components" xmlns:core="http://jboss.com/products/seam/core" xmlns:persistence="http://jboss.com/products/seam/persistence" xmlns:security="http://jboss.com/products/seam/security" xmlns:drools="http://jboss.com/products/seam/drools" xmlns:web="http://jboss.com/products/seam/web" xmlns:mail="http://jboss.com/products/seam/mail" xmlns:transaction="http://jboss.com/products/seam/transaction" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:spring="http://jboss.com/products/seam/spring" xmlns:international="http://jboss.com/products/seam/international" xmlns:ui="http://jboss.com/products/seam/ui" xsi:schemaLocation= "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.0.xsd http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.0.xsd http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.0.xsd http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.0.xsd http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.0.xsd http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.0.xsd http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.0.xsd http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd http://jboss.com/products/seam/spring http://jboss.com/products/seam/spring-2.0.xsd http://jboss.com/products/seam/international http://jboss.com/products/seam/international-2.0.xsd"> <core:init /> <security:identity authenticate-method="#{authenticator.authenticate}"/> <transaction:entity-transaction entity-manager="#{em}"/> <persistence:entity-manager-factory name="rupee2india"/> <persistence:managed-persistence-context name="em" auto-create="true" entity-manager-factory="#{rupee2india}" persistence-unit-jndi-name="java:comp/env/jdbc/TestDB"/> <event type="org.jboss.seam.security.notLoggedIn"> <action execute="#{redirect.captureCurrentView}"/> </event> <event type="org.jboss.seam.security.postAuthenticate"> <action execute="#{redirect.returnToCapturedView}"/> </event> </components>
From page 1, user clicks on the following link:
<h:commandLink action="#{client.home}" value="here"/>
In my Action class, I start a long running conversation with a dummy method.
package com.algolog.app.rupee2india.client; import java.io.Serializable; import javax.persistence.EntityManager; import org.apache.log4j.Logger; import org.jboss.seam.annotations.Begin; import org.jboss.seam.annotations.Create; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import com.algolog.app.rupee2india.security.User; @Name("client") public class ClientAction implements Serializable { /** * */ private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(ClientAction.class); @In EntityManager em; @In private User currentUser; public String home() { logger.debug("home: " + currentUser.getEmail()); currentUser = (User) em.createQuery("select u from User u where u.id= :id ") .setParameter("id", currentUser.getId()) .getResultList().get(0); return null; } @Begin @Create public void dummy() { } }
After the home
method on class ClientAction, user is directed to page 2, where I want to show addresses associated with this User. I get LIE here. My understanding is that cause I have a long running conversation, SMPC should keep the transaction open and fetch me more data.
The class User is something like following:
@Entity public class User extends BaseObject { ..... @OneToMany(mappedBy="user") public List<Address> getAddresses() { return addresses; }
What am I missing?
Thanks again!