[
https://jira.jboss.org/jira/browse/JBSEAM-3680?page=com.atlassian.jira.pl...
]
Takayoshi Kimura updated JBSEAM-3680:
-------------------------------------
Attachment: test-JBSEAM-3680.diff
How to reproduce:
1) Apply test-JBSEAM-3680.diff to booking project:
$ cd $JBOSS_SEAM_HOME/examples
$ cat test-JBSEAM-3680.diff | patch -p0
2) Build booking application and deploy to JBoss AS
3) Turn off keep-alive
Put maxKeepAliveRequests="1" on 8080 Connector in
$JBOSS_HOME/server/$JBOSS_SERVER_CONFIG/deploy/jboss-web.deployer/server.xml
4) Perform load to the 8080 Connector
This helps to switch processing thread after exception redirection. For example with ab
(apache bench) command:
$ ab -c 100 -n 10000000
http://localhost:8080/
5) Open the booking application in browser and book hotel
You don't see messages on the main page after redirecting by the exception, and log
shows "no stored conversation".
If you skip step #3 and #4, it works fine.
I've deployed AOP trace interceptor (just prints ClassName#method) and see the
following:
2008-11-13 22:14:56,961 DEBUG [org.jboss.seam.contexts.FacesLifecycle]
(http-127.0.0.1-8080-90) >>> Begin JSF request for /seam-booking/hotel.seam
2008-11-13 22:14:56,978 DEBUG [com.redhat.jboss.support.aop.MethodCallTraceInterceptor]
(http-127.0.0.1-8080-90) org.jboss.seam.core.ConversationEntry#lock
2008-11-13 22:14:57,192 DEBUG [org.jboss.seam.web.ExceptionFilter]
(http-127.0.0.1-8080-90) running exception handlers
2008-11-13 22:14:57,193 DEBUG [com.redhat.jboss.support.aop.MethodCallTraceInterceptor]
(http-127.0.0.1-8080-90) org.jboss.seam.core.ConversationEntry#lock
2008-11-13 22:14:57,219 DEBUG [com.redhat.jboss.support.aop.MethodCallTraceInterceptor]
(http-127.0.0.1-8080-90) org.jboss.seam.core.ConversationEntry#unlock
2008-11-13 22:14:57,228 DEBUG [org.jboss.seam.web.ExceptionFilter]
(http-127.0.0.1-8080-90) done running exception handlers
2008-11-13 22:14:57,235 DEBUG [org.jboss.seam.contexts.FacesLifecycle]
(http-127.0.0.1-8080-3) >>> Begin JSF request for /seam-booking/main.seam
2008-11-13 22:14:57,251 DEBUG [com.redhat.jboss.support.aop.MethodCallTraceInterceptor]
(http-127.0.0.1-8080-3) org.jboss.seam.core.ConversationEntry#lock
2008-11-13 22:14:57,796 DEBUG [com.redhat.jboss.support.aop.MethodCallTraceInterceptor]
(http-127.0.0.1-8080-3) org.jboss.seam.core.ConversationEntry#lockNoWait
The first request doesn't release the ReentrantLock inside the ConversationEntry
properly.
Locking issue for ConversationEntry when redirecting at
ExceptionFilter
-----------------------------------------------------------------------
Key: JBSEAM-3680
URL:
https://jira.jboss.org/jira/browse/JBSEAM-3680
Project: Seam
Issue Type: Bug
Components: Exception Handling
Affects Versions: 2.0.2.SP1
Environment: Windows XP SP2, JBoss EAP 4.3
Reporter: Hiroyuki Wada
Priority: Critical
Attachments: test-JBSEAM-3680.diff
When redirecting at ExceptionFilter, it seems that the ConversationEntry lock is not
released.
Therefore, if next request is processed by the another thread, the thread wait for until
unlocking.
This results in the user being redirected to the no-conversation-view-id after the
concurrent-request-timeout expires.
I checked the Seam 2.0.2.SP1 source. It seems that the unlocking process for
ConversationEntry
is skipped when Exception is thrown from JSF Action that invoked in INVOKE_APPLICATION
phase.
When Exception is not thrown, the lock is release after INVOKE_APPLICATION phase.
(at method calling "afterResponseComplete(facesContext)" at 249 line of
SeamPhaseListener.java)
When Exception is thrown, this method is not called because of the result of
FacesContext#getResponseComplete()
is FALSE.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira