[
https://issues.apache.org/jira/browse/OPENEJB-1099?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12869313#action_12869313
]
David Blevins commented on OPENEJB-1099:
----------------------------------------
That's definitely the guilty if block. There's some related EJB 3.1
functionality for this as well (@AccessTimeout)
What we should be doing is holding a ReentrantLock instead of a boolean. And
"isInUse()" should be a tryLock() call on the reentrant lock. The new
@AccessTimeout annotation basically allows users to specify how long they're
willing to wait for the lock before getting an exception. On that note,
RemoteException is no longer the right exception. There's a new
ConcurrentAccessTimeoutException which should be thrown.
Interested in working on it? We can use all the help we can get :)
> Reentrant calls to Stateful beans
> ---------------------------------
>
> Key: OPENEJB-1099
> URL: https://issues.apache.org/jira/browse/OPENEJB-1099
> Project: OpenEJB
> Issue Type: Bug
> Components: container system
> Affects Versions: 3.1, 3.1.1, 3.1.2
> Reporter: David Blevins
> Fix For: 3.1.3
>
>
> A stateful bean should be able to invoke itself via its business interface.
> The following code should work:
> @Stateful
> public class MySessionBean implements MySessionBeanLocal {
> @Resource
> private SessionConext context;
> public void method1() {
> System.out.println("Method 1 invoked!");
> context.getBusinessObject(mySessionBeanLocal.class).method2();
> }
> public void method2() {
> System.out.println("Method 2 invoked!");
> }
> }
> Currently this results in the following exception:
> I get a "Concurrent calls not allowed" exception:
> javax.ejb.EJBException: The bean encountered a non-application exception;
> nested exception is:
> javax.ejb.EJBException: Concurrent calls not allowed
> at
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:358)
> at
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:286)
> at $Proxy117.method1(Unknown Source)
> //....
> Caused by: javax.ejb.EJBException: Concurrent calls not allowed
> at
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:358)
> at
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:286)
> at $Proxy117.Method2(Unknown Source)
> //...
> Caused by: java.rmi.RemoteException: Concurrent calls not allowed
> at
> org.apache.openejb.core.stateful.StatefulContainer.obtainInstance(StatefulContainer.java:635)
> at
> org.apache.openejb.core.stateful.StatefulContainer.businessMethod(StatefulContainer.java:484)
> at
> org.apache.openejb.core.stateful.StatefulContainer.invoke(StatefulContainer.java:274)
> at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:217)
> at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
> at
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:281)
> ... 56 more
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.