[seam-issues] [JBoss JIRA] (JBSEAM-5103) Conversation after @End method process does not release ConversationEntry lock

Marek Novotny (JIRA) jira-events at lists.jboss.org
Mon May 27 04:37:06 EDT 2013


     [ https://issues.jboss.org/browse/JBSEAM-5103?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Marek Novotny updated JBSEAM-5103:
----------------------------------

    Steps to Reproduce: 
Use seam example : <seam examples>/seamspace

1. Set 60 sec to the concurrent-request-timeout in components.xml.
{noformat}<seam examples>/seamspace/resources/WEB-INF/components.xml
19:    <core:manager conversation-timeout="120000" 
20:                  concurrent-request-timeout="60000"
21:                 conversation-id-parameter="cid"/>
{noformat}
2. Add a sleep process to ProfileAction.getMemberBlogs() method.
{noformat}<seam examples>/seamspace/src/org/jboss/seam/example/seamspace/ProfileAction.java
77:  /**
78:    * Used to read all blog entries for a member
79:    */
80:   @SuppressWarnings("unchecked")
81:   @Factory("memberBlogs")
82:   public void getMemberBlogs()
83:   {
+      try{
+         System.out.println("-- sleep start");
+         Thread.sleep(10000L);
+         System.out.println("-- sleep end");
+        }catch(Exception e){}
84:     if (name == null && authenticatedMember != null)
85:      {
86:         name = authenticatedMember.getMemberName();
87:      }
88:
89:      memberBlogs = entityManager.createQuery(
90:            "from MemberBlog b where b.member.memberName = :memberName order by b.entryDate desc")
91:            .setParameter("memberName", name)
92:            .getResultList();
93:   }
{noformat} 
3. Execute 'mvn install;cd seamspace-ear;mvn jboss-as:deploy' command on the <seam examples>/seamspace directory.
4. Start JBoss AS server.
5. Move to 'http://localhost:8080/seam-space/home.seam' with web browser.
6. Login (demo/demo) -> [Create new blog entry]
7. Push the [Add entry] button (You can confirm '-- sleep start' message on stdout) and push the F5 button immediately.
8. You can confirm waiting of the F5 request[1] even if a sleep process has completed and occurring exception[2] after the concurrent-request-timeout.

{noformat}
[1]
"http-127.0.0.1-8080-6" daemon prio=10 tid=0x00007f330800a800 nid=0x2b1c waiting on condition [0x00007f32ff71f000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00000000ee3ee4f0> (a java.util.concurrent.locks.ReentrantLock$FairSync)
        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireNanos(AbstractQueuedSynchronizer.java:905)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireNanos(AbstractQueuedSynchronizer.java:1224)
        at java.util.concurrent.locks.ReentrantLock.tryLock(ReentrantLock.java:416)
        at org.jboss.seam.core.ConversationEntry.lock(ConversationEntry.java:221)
        at org.jboss.seam.core.Manager.restoreAndLockConversation(Manager.java:616)
        at org.jboss.seam.core.Manager.restoreConversation(Manager.java:603)
        at org.jboss.seam.jsf.SeamPhaseListener.afterRestoreView(SeamPhaseListener.java:392)
        at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:230)
        at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:196)
        at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)
        at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:102)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
        at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73)
        at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
        at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:295)
        at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:373)
        at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:500)
        at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:183)
        at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:95)
        at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
        at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.internalProcess(ActiveRequestResponseCacheValve.java:74)
        at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:47)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:599)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:451)
        at java.lang.Thread.run(Thread.java:662)
{noformat}

{noformat}
[2]
10:29:40,999 INFO  [stdout] (http--127.0.0.1-8080-4) -- sleep start
10:29:51,000 INFO  [stdout] (http--127.0.0.1-8080-4) -- sleep end
10:30:41,494 WARN  [org.jboss.seam.jsf.SeamPhaseListener] (http--127.0.0.1-8080-5) uncaught exception, passing to exception handler: org.jboss.seam.ConcurrentRequestTimeoutException: Concurrent call to conversation
	at org.jboss.seam.core.Manager.restoreAndLockConversation(Manager.java:644) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.core.Manager.restoreConversation(Manager.java:606) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.contexts.Contexts.isPageContextActive(Contexts.java:120) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.jsf.SeamPhaseListener.afterRestoreView(SeamPhaseListener.java:388) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:229) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:195) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) [jboss-seam.jar:2.3.1-SNAPSHOT]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
	at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
	at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_45]
-- snip --
{noformat}

  was:
Use seam example : <seam examples>/seamspace

1. Set 60 sec to the concurrent-request-timeout in components.xml.
{noformat}<seam examples>/seamspace/resources/WEB-INF/components.xml
19:    <core:manager conversation-timeout="120000" 
20:                  concurrent-request-timeout="60000"
21:                 conversation-id-parameter="cid"/>
{noformat}
2. Add a sleep process to ProfileAction.getMemberBlogs() method.
{noformat}<seam examples>/seamspace/src/org/jboss/seam/example/seamspace/ProfileAction.java
77:  /**
78:    * Used to read all blog entries for a member
79:    */
80:   @SuppressWarnings("unchecked")
81:   @Factory("memberBlogs")
82:   public void getMemberBlogs()
83:   {
+      try{
+         System.out.println("-- sleep start");
+         Thread.sleep(10000L);
+         System.out.println("-- sleep end");
+        }catch(Exception e){}
84:     if (name == null && authenticatedMember != null)
85:      {
86:         name = authenticatedMember.getMemberName();
87:      }
88:
89:      memberBlogs = entityManager.createQuery(
90:            "from MemberBlog b where b.member.memberName = :memberName order by b.entryDate desc")
91:            .setParameter("memberName", name)
92:            .getResultList();
93:   }
{noformat} 
3. Execute 'ant deploy' command on the <seam examples>/seamspace directory.
4. Start EAP server.
5. Move to 'http://localhost:8080/seam-space/home.seam' with web browser.
6. Login (demo/demo) -> [Create new blog entry]
7. Push the [Add entry] button (You can confirm '-- sleep start' message on stdout) and push the F5 button immediately.
8. You can confirm waiting of the F5 request[1] even if a sleep process has completed and occurring exception[2] after the concurrent-request-timeout.

{noformat}
[1]
"http-127.0.0.1-8080-6" daemon prio=10 tid=0x00007f330800a800 nid=0x2b1c waiting on condition [0x00007f32ff71f000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00000000ee3ee4f0> (a java.util.concurrent.locks.ReentrantLock$FairSync)
        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireNanos(AbstractQueuedSynchronizer.java:905)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireNanos(AbstractQueuedSynchronizer.java:1224)
        at java.util.concurrent.locks.ReentrantLock.tryLock(ReentrantLock.java:416)
        at org.jboss.seam.core.ConversationEntry.lock(ConversationEntry.java:221)
        at org.jboss.seam.core.Manager.restoreAndLockConversation(Manager.java:616)
        at org.jboss.seam.core.Manager.restoreConversation(Manager.java:603)
        at org.jboss.seam.jsf.SeamPhaseListener.afterRestoreView(SeamPhaseListener.java:392)
        at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:230)
        at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:196)
        at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)
        at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:102)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
        at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73)
        at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
        at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:295)
        at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:373)
        at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:500)
        at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
        at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
        at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:183)
        at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:95)
        at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
        at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.internalProcess(ActiveRequestResponseCacheValve.java:74)
        at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:47)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:599)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:451)
        at java.lang.Thread.run(Thread.java:662)
{noformat}

{noformat}
[2]
11:36:25,106 INFO  [STDOUT] -- sleep start
11:36:35,107 INFO  [STDOUT] -- sleep end
11:37:26,420 WARN  [SeamPhaseListener] uncaught exception, passing to exception handler
org.jboss.seam.ConcurrentRequestTimeoutException: Concurrent call to conversation
        at org.jboss.seam.core.Manager.restoreAndLockConversation(Manager.java:641)
        at org.jboss.seam.core.Manager.restoreConversation(Manager.java:603)
        at org.jboss.seam.jsf.SeamPhaseListener.afterRestoreView(SeamPhaseListener.java:392)
        at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:230)
        at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:196)
        at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)
        at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:102)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
-- snip --
11:37:26,434 SEVERE [viewhandler] Error Rendering View[/createBlog.xhtml]
java.lang.IllegalStateException: No active conversation context
        at org.jboss.seam.core.Conversation.instance(Conversation.java:122)
        at org.jboss.seam.ui.component.UIConversationId.getName(UIConversationId.java:44)
        at org.jboss.seam.ui.util.ViewUrlBuilder.addParameter(ViewUrlBuilder.java:42)
        at org.jboss.seam.ui.component.UISeamCommandBase.getUrl(UISeamCommandBase.java:85)
        at org.jboss.seam.ui.renderkit.LinkRendererBase.doEncodeBegin(LinkRendererBase.java:26)
        at org.jboss.seam.ui.util.cdk.RendererBase.encodeBegin(RendererBase.java:79)
-- snip --
{noformat}


    
> Conversation after @End method process does not release ConversationEntry lock
> ------------------------------------------------------------------------------
>
>                 Key: JBSEAM-5103
>                 URL: https://issues.jboss.org/browse/JBSEAM-5103
>             Project: Seam 2
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.3.0.Final
>            Reporter: Eiichi Nagai
>            Assignee: Marek Novotny
>             Fix For: 2.3.1.CR1
>
>
> ConversationEntry after @End method process is removed by endRequest[1] process and does not release lock. Therefore, when there is a request duplicate with the same Conversation ID by F5 operation etc, since a lock is not released, the request has to wait till the concurrent-request-timeout even if pre-request is already completed.
> {code:title=[1] org.jboss.seam.core.Manager.java|borderStyle=solid}
> 441:   /**
> 442:    * Touch the conversation stack, destroy ended conversations, 
> 443:    * and timeout inactive conversations.
> 444:    */
> 445:   public void endRequest(Map<String, Object> session)
> 446:   {
> 447:      if ( isLongRunningConversation() )
> 448:      {
> 449:         if ( log.isDebugEnabled() )
> 450:         {
> 451:            log.debug("Storing conversation state: " + getCurrentConversationId());
> 452:         }
> 453:         touchConversationStack( getCurrentConversationIdStack() );
> 454:      }
> 455:      else
> 456:      {
> 457:         if ( log.isDebugEnabled() )
> 458:         {
> 459:            log.debug("Discarding conversation state: " + getCurrentConversationId());
> 460:         }
> 461:         //now safe to remove the entry
> => 462:         removeCurrentConversationAndDestroyNestedContexts(session);
> 463:      }
> 464:
> 465:      /*if ( !Init.instance().isClientSideConversations() ) 
> 466:      {*/
> 467:         // difficult question: is it really safe to do this here?
> 468:         // right now we do have to do it after committing the Seam
> 469:         // transaction because we can't close EMs inside a txn
> 470:         // (this might be a bug in HEM)
> 471:         Manager.instance().conversationTimeout(session);
> 472:      //}
> 473:   }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the seam-issues mailing list