3 Replies Latest reply on Nov 6, 2008 5:14 PM by anilerukala

    2.1.0.BETA1: IllegalStateException: EntityManager is closed

    vladimir.kovalyuk

      Sympthoms:


      page contains <h:selectOneMenu> with <s:convertEntity> within. It displays correctly for the first time. But when the user selects an instance and submits the form the IllegalStateException occurs. It tells that EntityManager is closed. Performed brief investigation on that matter I figured out that:


      2.1.0.A1 had EntityLoader class with overriden method


         @Override
         public EntityManager getPersistenceContext()
         {
            if (!super.getPersistenceContext().isOpen())
               super.setPersistenceContext(null);
            return super.getPersistenceContext();
         }



      2.1.0.BETA1 has JpaEntityLoader which does not have such a method overriden and the following code works:



      public abstract class PersistenceController<T> extends Controller
      {
         private transient T persistenceContext;
         
         public T getPersistenceContext()
         {
            if (persistenceContext==null)
            {
               persistenceContext = (T) getComponentInstance( getPersistenceContextName() );
            }
            return persistenceContext;
         }
      
      


      As the result when page is rendered jpaEntityLoader contains opened entityManager. After submit when processing validations it remembers stale persistence context and returns it. Persistence context has been already closed so that's the cause of the problem.


      Proceed with JIRA?

        • 1. Re: 2.1.0.BETA1: IllegalStateException: EntityManager is closed
          thejavafreak

          Have you crossed check to jboss svn repo:
          http://fisheye.jboss.com/browse/Seam


          Make sure that the code yo have pointed out was really what causes the problem

          • 2. Re: 2.1.0.BETA1: IllegalStateException: EntityManager is closed
            pmuir
            • 3. Re: 2.1.0.BETA1: IllegalStateException: EntityManager is closed
              anilerukala

              I am getting the same error when i use entity converter with secondary (not primary) database.


              java.lang.IllegalStateException: EntityManager is closed
              at org.hibernate.ejb.EntityManagerImpl.getSession(EntityManagerImpl.java:42)


              I am using Seam 2.1.0.GA and JPA.


              Components.xml




              <components xmlns="http://jboss.com/products/seam/components"
              xmlns:ui="http://jboss.com/products/seam/ui">
              
               <persistence:managed-persistence-context name="entityManager"
                auto-create="true"
                persistence-unit-jndi-name="java:/mduEntityManagerFactory" />
              
               <persistence:managed-persistence-context name="entityManagerIDM"
                auto-create="true"
                persistence-unit-jndi-name="java:/idmEntityManagerFactory" />
              
              <ui:jpa-entity-loader name="idmEntityLoader" entity-manager="#{entityManagerIDM}"/>
              
              <ui:entity-converter name="idmEntityConverter" entity-loader="#{idmEntityLoader}"/>
              
              </components>




              xhtml page where I am using entity converter.



              <h:selectOneListbox size="1"
              value="#{developmentDetailsAction.development.directSalesRep}">
                    <s:selectItems value="# {developmentDetailsAction.getDirectSalesReps()}" label="#{directSalesRepresent.firstname} #{directSalesRepresent.lastname}" var="directSalesRepresent" noSelectionLabel="Choose" />
               <f:converter converterId="idmEntityConverter" />
              </h:selectOneListbox>



              More description about my problem is here.


              Thanks,
              Anil Erukala