[seam-issues] [JBoss JIRA] (JBSEAM-5001) Deadlock between SFSB EJB lock and Component.getInstanceFromFactory factoryLock calling factory from the same component

Marek Schmidt (JIRA) jira-events at lists.jboss.org
Wed Apr 17 09:22:54 EDT 2013


    [ https://issues.jboss.org/browse/JBSEAM-5001?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12768049#comment-12768049 ] 

Marek Schmidt commented on JBSEAM-5001:
---------------------------------------

Yes, but when you look at the server log, you'll see that the error is a timeout at the SFSB lock, which resolves the deadlock after 5 seconds.

Caused by: javax.ejb.ConcurrentAccessTimeoutException: JBAS014360: EJB 3.1 FR 4.3.14.1 concurrent access timeout on org.jboss.invocation.InterceptorContext at 40fa6677 - could not obtain lock within 5000 MILLISECONDS
        at org.jboss.as.ejb3.component.stateful.StatefulSessionSynchronizationInterceptor.processInvocation(StatefulSessionSynchronizationInterceptor.java:117) [jboss-as-ejb3-7.2.0.Final-redhat-4.jar:7.2.0.Final-r
edhat-4]
                
> Deadlock between SFSB EJB lock and Component.getInstanceFromFactory factoryLock calling factory from the same component
> -----------------------------------------------------------------------------------------------------------------------
>
>                 Key: JBSEAM-5001
>                 URL: https://issues.jboss.org/browse/JBSEAM-5001
>             Project: Seam 2
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.3.0.BETA2
>         Environment: JBoss AS 7.1.2, Seam 2.3.0.CR1-SNAPSHOT r14986
>            Reporter: Marek Schmidt
>            Assignee: Marek Novotny
>             Fix For: 2.3.1.CR1
>
>         Attachments: JBSEAM-5001.ear, JBSEAM-5001.tar.gz, test.py
>
>
> The following sample demonstrates a deadlock between SFSB lock and the Component.getInstanceFromFactory factoryLock:
> {code}
> @Stateful
> @Scope(ScopeType.SESSION)
> @Name("test")
> public class TestAction implements Test
> {
>    
>    public String test() {
>       Thread.sleep(500);
>       Component.getInstance("testString", true);
>       return "test";
>    }
>    
>    @Factory(value="testString", scope=ScopeType.SESSION)
>    public String getTestString() {
>       return "testString";
>    }
>    @Remove
>    public void remove() {}
> }
> {code}
> when test.xhtml contains:
> {code}
> <h:outputText value="#{test.test()} " />
> {code}
> and othertest.xhtml contains:
> {code}
> <h:outputText value="#{testString} " />
> {code}
> If the othertest.seam is requested just after (<500ms after) the test.seam with the same session cookie.
> The problem seems to be that the #{test.test()} first locks the TestAction SFSB lock and then the Seam factory lock in the Component.getInstance call, while #{testString} locks the factoryLock first. 

--
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