title: Hibernate Session closed problem!
body: <p>The function below is the actionListener for a button I have in my web application, I am deleting the old chosen rows from a table in a database and inserting the new ones to the database.</p>
  
  <pre><code>public void getSelectedExemptionItems(ActionEvent ae) {
          Session hibernateSession;
          Session hibernate2Session;
          selectedExemptions = new ArrayList&lt;ExemptionBean&gt;();
          for (ExemptionBean eBean : exemBean) { // iterating over the list of ExemptionBean class
              if (selectedExemptionIDs.get(eBean.getExemptionID()).booleanValue()) {
                  selectedExemptions.add(eBean); // adding every ExemptionBean that is selected.
              }
          }
          // getting importane session variables
          SessionBean1 theSessionBean = (SessionBean1) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("SessionBean1");
          JAdmApplication admApplication = theSessionBean.getAdmApplication();
          long admAppID = admApplication.getJAdmApplicationId();
  //        ArrayList&lt;JAdmAppExemption&gt; admAppExemption = (ArrayList&lt;JAdmAppExemption&gt;)theSessionBean.getAdmAppExemption();
  
          JAdmAppExemption admAppExem = new JAdmAppExemption();
  
          // try catch : delete all previously chosen exemptions from database by logged-in user.
          try {
              hibernateSession = HibernateUtil.getAdmSessionFactory().getCurrentSession();
              Transaction t = hibernateSession.beginTransaction();
              t.begin();
              String sequel = "DELETE FROM JAdmAppExemption WHERE createdby = ?";
              Query q = hibernateSession.createQuery(sequel);
              q.setParameter(0, theSessionBean.getPortalUserId());
  
          } catch (Exception e){
              System.out.println("Row could not be deledted from database!!");
          }
  
  //         adding all selected exemptions to the database
  
          for (ExemptionBean e : selectedExemptions) {
              admAppExem.setAdClientId(1000001);
              admAppExem.setAdOrgId(1000001);
              admAppExem.setCreated(getTimestamp());
              admAppExem.setCreatedby(theSessionBean.getPortalUserId());
              admAppExem.setIsactive('Y');
              admAppExem.setJAdmAppExemptionId(getJAdmAppExemptionIdSequence());
              admAppExem.setJAdmApplicationId(admAppID);
              admAppExem.setJAdmExemptionId(e.getExemptionID());
              admAppExem.setUpdated(getTimestamp());
              admAppExem.setUpdatedby(theSessionBean.getPortalUserId());
  
              hibernate2Session = HibernateUtil.getAdmSessionFactory().getCurrentSession(); // session is opened here!
              Transaction tx = hibernate2Session.beginTransaction();
              tx.begin();
              try {
                  hibernate2Session.beginTransaction();
                  hibernate2Session.save(admAppExem); // is it save or saveOrUpdate??
                  hibernate2Session.getTransaction().commit();
                  updateJAdmAppExemptionIdSequence();
  
              } catch (Throwable ex){
                  if (hibernate2Session.getTransaction().isActive()) {
                      hibernate2Session.getTransaction().rollback();
                  }
                  ex.printStackTrace();
              }
          }
      }
  </code></pre>
  
  <p>I keep getting an exception : Session is closed !!  can someone please explain how sessions are closed in hibernate (automatically??) and how to work with them..</p>
  
  <p>here is the detailed stack trace of the exception:</p>
  
  <pre><code>javax.faces.FacesException: org.hibernate.SessionException: Session is closed!
          at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:90)
          at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
          at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
          at com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:18)
          at com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.renderCycle(ReceiveSendUpdates.java:132)
          at com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.service(ReceiveSendUpdates.java:74)
          at com.icesoft.faces.webapp.http.core.RequestVerifier.service(RequestVerifier.java:31)
          at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
          at com.icesoft.faces.webapp.http.servlet.BasicAdaptingServlet.service(BasicAdaptingServlet.java:16)
          at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
          at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:53)
          at com.icesoft.faces.webapp.http.servlet.SessionVerifier.service(SessionVerifier.java:26)
          at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
          at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:131)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
          at com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:56)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
          at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
          at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
          at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:857)
          at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565)
          at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509)
          at java.lang.Thread.run(Thread.java:619)
  Caused by: javax.faces.el.EvaluationException: org.hibernate.SessionException: Session is closed!
          at com.sun.faces.application.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
          at javax.faces.component.UICommand.broadcast(UICommand.java:380)
          at com.icesoft.faces.component.panelseries.UISeries$RowEvent.broadcast(UISeries.java:617)
          at com.icesoft.faces.component.panelseries.UISeries.broadcast(UISeries.java:285)
          at com.icesoft.faces.component.paneltabset.PanelTabSet.broadcast(PanelTabSet.java:320)
          at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
          at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)
          at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
          ... 27 more
  Caused by: org.hibernate.SessionException: Session is closed!
          at org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:49)
          at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1319)
          at sun.reflect.GeneratedMethodAccessor2480.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
          at $Proxy233.beginTransaction(Unknown Source)
          at univportal.AdmissionApplication.Application.getSelectedExemptionItems(Application.java:1595)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.apache.el.parser.AstValue.invoke(AstValue.java:172)
          at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
          at com.sun.faces.application.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
          ... 34 more
  </code></pre>
  
  <p>Thanks,</p>