[jboss-jira] [JBoss JIRA] (AS7-5539) JBOSS7 server hangs up completely when a EJB2.1 entity bean business method is called in same transaction in a separate thread from the thread which started the transaction

Stuart Douglas (JIRA) jira-events at lists.jboss.org
Sat Sep 15 22:21:35 EDT 2012


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

Stuart Douglas resolved AS7-5539.
---------------------------------

    Resolution: Won't Fix


If the two threads were actually in the same transaction then this lock would not be blocking, as the lock owner is the transaction itself. The fact that this is happening implies that the two threads are actually in separate transactions. 

>From your description what is actually happening here is that the outer transaction gets the lock, then you run an inner REQUIRES_NEW transaction that also tries to get the lock. These are the expected results, otherwise you can have two transactions working in the same entity bean at the same time, which completely breaks any kind of transactional consistency guarantees. 

You have two options here:

- Use optimistic locking. This means that each transaction can get its own copy of the bean. 
- Change your code to avoid this dead lock situation. 

Note that as the lock scope is tied to the current transaction scope, if you mark the method that is acquiring the lock as not running in a transaction then the lock will only be held for the duration of the method invocation.



                
> JBOSS7 server hangs up completely when a EJB2.1 entity bean business method is called in same transaction in a separate thread from the thread which started the transaction
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: AS7-5539
>                 URL: https://issues.jboss.org/browse/AS7-5539
>             Project: Application Server 7
>          Issue Type: Bug
>          Components: EJB, Transactions
>    Affects Versions: 7.1.1.Final, 7.1.3.Final (EAP), 7.2.0.Alpha1
>            Reporter: Mayank Gupta
>            Assignee: jaikiran pai
>
> JBOSS7 server hangs up completely while trying to access a EJB2.1 entity bean method in a specific scenario.
> I am using a session facade pattern in which I call my EntityBean from a Stateless session bean. For moth the beans I have defined the transaction attribute as REQUIRED.
> On debugging the code I found that if the same Entity bean is accessed from two different threads in same transaction then this issue occurs.
> So for the first time my code enters "EntityBeanSynchronizationInterceptor" code is able to take the lock and assign the requester thread as the lock owner. When second time it comes to access the same entity bean from different thread in SAME TRANSACTION (as 2nd required results in joining the transaction), JBOSS7 server code completely stalls in taking the lock. Moreover this time requester thread is not given the owner status of the transaction. 
> Code snippet where code hangs:
>         final Object lockOwner = getLockOwner(transactionSynchronizationRegistry);
>         lock.pushOwner(lockOwner);
>         try {
>             lock.lock();  //line 80 in EntityBeanSynchronizationInterceptor
> and subsequently in:
>     public void lock() {
>         if (compareAndSetState(0, 1))
>             owner = currentRequestor();
>         else
>             acquire(1); //Here line 86 in OwnableReentrantLock
>     }
> This is a completely blocking issue for migrating my application from JBOSS6 to JBOSS7.
> I get this error in numerous places in my application 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 jboss-jira mailing list