You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Paolo ChilĂ  <pa...@gmail.com> on 2008/04/18 13:05:54 UTC

[ORCHESTRA] - Problem restoring PersistenceContext in conversation

Hi,

I'm trying to use MyFaces Orchestra in my JSF 1.1 application using
Hibernate Entity Manager as JPA Provider and Tomcat 5.5.

I have a problem when using the EntityManager inside a conversation (all
pages are inside anonymous conversations since I use a single bean behind
each page):

- The first time I load a page the EntityManager is injected correctly
(inside the init() method of the page I can make queries etc.)
- After the page is rendered for the first time, calling an action (a
method) on that page i get the following exception

INFO  12:51:00,222         FWBasePage,263 Pagina: class
it.reply.fpt.estesa.fe.InserimentoUtentePage, action-method: doCercaUtente
DEBUG 12:51:00,222 erimentoUtentePage,291 cerca utente
DEBUG 12:51:00,222 edBeanTargetSource,70  getRealBean for
inserimentoUtentePageBean
DEBUG 12:51:00,222 ringOrchestraScope,309 getRealBean called for bean
inserimentoUtentePageBean
DEBUG 12:51:00,222 edBeanTargetSource,70  getRealBean for
inserimentoUtentePageBean
DEBUG 12:51:00,222 ringOrchestraScope,309 getRealBean called for bean
inserimentoUtentePageBean
DEBUG 12:51:00,237 edBeanTargetSource,70  getRealBean for
inserimentoUtentePageBean
DEBUG 12:51:00,237 ringOrchestraScope,309 getRealBean called for bean
inserimentoUtentePageBean
DEBUG 12:51:00,237 rInvocationHandler,185 Creating new EntityManager for
shared EntityManager invocation
DEBUG 12:51:00,237 anagerFactoryUtils,311 Closing JPA EntityManager
DEBUG 12:51:00,237 eBeanPhaseListener,27  ViewId corrente:
/pages/admin/gestioneAnagrafica.xhtml
DEBUG 12:51:00,237 edBeanTargetSource,70  getRealBean for
gestioneAnagraficaPageBean
DEBUG 12:51:00,237 ringOrchestraScope,309 getRealBean called for bean
gestioneAnagraficaPageBean
DEBUG 12:51:00,237 edBeanTargetSource,70  getRealBean for
gestioneAnagraficaPageBean
DEBUG 12:51:00,237 ringOrchestraScope,309 getRealBean called for bean
gestioneAnagraficaPageBean
DEBUG 12:51:00,237 esContextFactory$1,129 Running release
DEBUG 12:51:00,237 sfFrameworkAdapter,69  Ending request
DEBUG 12:51:00,237 esContextFactory$1,138 Release completed
DEBUG 12:51:00,237 essionInViewFilter,207 Closing single Hibernate Session
in OpenSessionInViewFilter
DEBUG 12:51:00,237 essionFactoryUtils,774 Closing Hibernate Session
ERROR 12:51:00,237 andardWrapperValve,253 Servlet.service() for servlet
Faces Servlet threw exception
org.hibernate.SessionException: Session is closed!
    at
org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:49)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1110)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:65)
    at
it.reply.fpt.estesa.fe.InserimentoUtentePage.doCercaUtente(InserimentoUtentePage.java:348)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at it.reply.fw2.fe.jsf.bean.FWBasePage.doAction(FWBasePage.java:267)
    at
it.reply.fw2.fe.jsf.bean.FWBasePage$$FastClassByCGLIB$$9162783.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
    at
org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:628)
    at
it.reply.fpt.estesa.fe.InserimentoUtentePage$$EnhancerByCGLIB$$9bf81719.doAction(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.el.parser.AstValue.invoke(Unknown Source)
    at com.sun.el.MethodExpressionImpl.invoke(Unknown Source)
    at
com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
    at
com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:69)
    at
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
    at javax.faces.component.UICommand.broadcast(UICommand.java:109)
    at
org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:62)
    at
org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:184)
    at
org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:162)
    at
org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:350)
    at
org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
    at
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
    at
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
    at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at
org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:420)
    at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Unknown Source)

As you can see in this case the EntityManager is created and then closed
immediately.
In both methods i use the same annotation @Transactional(readOnly=true,
propagation=Propagation.REQUIRED),

My orchestraConfiguration.xml:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
               http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

  <!-- 1. initialization of all orchestra modules (required for core15
module) -->
  <import resource="classpath*:/META-INF/spring-orchestra-init.xml" />

  <!-- 2. the conversation scopes -->
  <bean
class="org.springframework.beans.factory.config.CustomScopeConfigurer">
    <property name="scopes">
      <map>
        <entry key="conversation.manual">
          <bean
class="org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope">
            <property name="timeout" value="30" />
            <property name="advices">
              <list>
                <ref bean="persistentContextConversationInterceptor"/>
              </list>
            </property>
          </bean>
        </entry>

        <entry key="conversation.access">
          <bean
class="org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope">
            <property name="timeout" value="30" />
            <property name="advices">
              <list>
                <ref bean="persistentContextConversationInterceptor"/>
              </list>
            </property>
            <property name="lifetime" value="access"/>
          </bean>
        </entry>
      </map>
    </property>
  </bean>

  <!-- 3. the "entity manager" manager -->
  <bean id="persistentContextConversationInterceptor"

class="org.apache.myfaces.orchestra.conversation.spring.PersistenceContextConversationInterceptor">
    <property name="persistenceContextFactory"
ref="persistentContextFactory"/>
  </bean>

  <!-- 4. conversation - persistence adapter -->
  <bean id="persistentContextFactory"

class="org.apache.myfaces.orchestra.conversation.spring.JpaPersistenceContextFactory">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
  </bean>

  <!-- 5. persistence -->
  <bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

  <tx:annotation-driven />

  <bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
  </bean>

   <bean id="entityManagerFactory"

class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

    <property name="jpaProperties">
      <props>
           <prop
key="hibernate.session_factory_name">hibernate/FptSessionFactory</prop>
           <prop key="hibernate.show_sql">true</prop>
           <prop key="hibernate.format_sql">true</prop>
      </props>
    </property>

    <property name="jpaVendorAdapter">

        <bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>

    </property>

    <property name="persistenceUnitName" value="FptEstesaJPA"/>
  </bean>


</beans>

and my persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="FptEstesaJPA" transaction-type="RESOURCE_LOCAL">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:comp/env/jdbc/FPTEstesa</jta-data-source>
      <properties>
         <property name="hibernate.dialect"
value="org.hibernate.dialect.Oracle10gDialect"/>
         <property name="hibernate.show_sql" value="true"/>
      </properties>


    </persistence-unit>
</persistence>

I tried to look for examples of configuration for Orchestra + Hibernate +
JTA + Tomcat but I couldn't find any. It seems a matter of wrong
configuration to me but I don't know where to look, so any advice will be
greately appreciated.

Sorry for the length of this mail, but I found orchestra's features amazing
and I'd really like to use it in my project.

Thanks for your time and keep up the good work!

Paolo ChilĂ