[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-3652) Major reentrancy problem with "Page Scope" components and injection/disinjection
Shane Bryzak (JIRA)
jira-events at lists.jboss.org
Mon Nov 10 03:02:36 EST 2008
[ https://jira.jboss.org/jira/browse/JBSEAM-3652?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12437591#action_12437591 ]
Shane Bryzak commented on JBSEAM-3652:
I can't seem to reproduce this issue, could you please attach a minimal test case including steps to reproduce. In response to your questions:
1) Seam will synchronize access to session scoped components, and as described by the docs it also enforces a single thread per conversation model. The page context is single-threaded in nature (a new page context is created for each request).
2) From memory there is a good reason why we only outject for the last concurrent thread, however off the top of my head I can't remember what it is. I'll bring it up on the seam-dev mailing list (and try to document it in the code also once I have an answer).
> Major reentrancy problem with "Page Scope" components and injection/disinjection
> Key: JBSEAM-3652
> URL: https://jira.jboss.org/jira/browse/JBSEAM-3652
> Project: Seam
> Issue Type: Bug
> Affects Versions: 2.0.2.SP1, 2.0.3.CR1, 2.1.0.GA
> Environment: WebSphere v22.214.171.124 in POJO Mode
> Reporter: Denis Forveille
> Assignee: Shane Bryzak
> Priority: Blocker
> Fix For: 2.1.1.CR1
> This bug is very similar to the JBSEAM-3295 bug, but for "Page Scope" components this time
> Under stress, we have random NPE, "conversation expired" and other strange eroors from time to time in production
> This is due to a flaw in the "BijectionInterceptor" class and it is quite easy to reproduce
> On a facelets page, we have a datatable with a list of h:commadLink, teh first page of a classic "list entities/showDetail" scheme. The controleur that manages the list is in "Page Scope"
> When the user clics on one of the link, then quickly clic on another link, another one etc... without waiting for the detail view to show up, we have two concurrent request addressed to the same Page Scope component (Verified by putting traces in the BijectionInterceptor class)
> In BijectionInterceptor, in that case, counter == 2 after line 77 meaning there is two concurrent thread running: the current thread + another one currently "using" the component
> The counter will be decrease for the first time on line 82, then a second time on line 129 and so, disinjection will occur on line 134. This occurs while there is another thread "using" the component, causing random NPE and other errors!!!!
> In fact this will happen each time counter >1, ie there is more than one "concurrent" request on the same component
> This alleviate some questions:-
> - is this normal that 2 (or more) concurrent request from the same user/conversation/page acces the same page scope component concurrently (I thought seam was taking care of this and was serializing such requests...
> - is this normal that on line 88, components are outjected, only when the last concurrent "user" of the component exits the interceptor and not when each request "eixts" the interceptor?
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
More information about the seam-issues