I'm using JBoss 4.0.3SP1 whit EJB3 and MyFaces.
In a JSF managed bean, my application begin a JTA transaction and invoke a stateless session façade that return a entity bean. The entity bean has a lazy collection that throws org.hibernate.LazyInitializationException when I try to get it at managed bean method.
Follow the managed bean method:
public String consultar() throws Exception { ServiceLocator locator = ServiceLocator.getInstance(); UserTransaction tx = (UserTransaction) locator.lookup( "java:comp/UserTransaction" ); tx.begin(); try { AplicacaoFacade facade = locator.lookupEJB( AplicacaoFacade.class ); // Get informations for page vo = (UsuarioVO) paginaRegistros.getRowData(); Usuario usuario = facade.getUsuarioPorId( vo.getId() ); // Build organizations collection List<Long> organizacoesId = new ArrayList<Long>(); // THROWS LAZY EXCEPTION !!!!!! for ( Organizacao organizacao : usuario.getOrganizacoes() ) { organizacoesId.add( organizacao.getId() ); } tx.commit(); } catch ( Exception e ) { tx.rollback(); } return Constantes.OUTCOME_SUCESSO; }
@Stateless public class AplicacaoFacadeBean implements AplicacaoFacade { @PersistenceContext EntityManager entityManager; public Usuario getUsuarioPorId( Long usuarioId ) { return entityManager.find( Usuario.class, usuarioId ); }