Hi,
Great, thanks for the swift action. Let me know if any further help is
required.
Kind regards,
Arjan Tijms
On Tue, Aug 16, 2016 at 3:04 PM, Tomas Remes <tremes(a)redhat.com> wrote:
Thanks. I think it's a bug. I created
https://issues.jboss.org/
browse/WFLY-6960.
Tom
----- Original Message -----
From: "arjan tijms" <arjan.tijms(a)gmail.com>
To: "Tomas Remes" <tremes(a)redhat.com>
Cc: "WildFly Dev" <wildfly-dev(a)lists.jboss.org>
Sent: Tuesday, August 16, 2016 1:47:56 PM
Subject: Re: [wildfly-dev] ConcurrentAccessTimeoutException using
producer in stateful bean
Hi,
Sure, I've created one using the request scope now (to rule out any issues
with JSF's view scope).
package test;
import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
@Stateful
@RequestScoped
public class Bean1 {
@Produces
public String produceString() {
return "a string";
}
public void foo() {
}
}
package test;
import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
@Stateful
@RequestScoped
public class Bean2 {
@Inject
private String string;
public void foo() {
}
}
package test;
import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
@Stateful
@RequestScoped
public class Bean3 {
@Inject
private Bean1 bean1;
@Inject
private Bean2 bean2;
public void test() {
bean1.foo();
bean2.foo();
}
}
package test;
import java.io.IOException;
import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = "/test")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Inject
private Bean3 bean3;
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().write("testing");
bean3.test();
}
}
Relevant part of the stack trace:
Caused by: javax.ejb.ConcurrentAccessTimeoutException: WFLYEJB0228: EJB
3.1
FR 4.3.14.1 concurrent access timeout on Bean1 - could not obtain lock
within 5000 MILLISECONDS
at
org.jboss.as.ejb3.component.stateful.StatefulSessionSynchronization
Interceptor.processInvocation(StatefulSessionSynchronization
Interceptor.java:86)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.invocation.InterceptorContext$Invocation.
proceed(InterceptorContext.java:437)
at
org.jboss.weld.ejb.AbstractEJBRequestScopeActivat
ionInterceptor.aroundInvoke(AbstractEJBRequestScopeActivat
ionInterceptor.java:64)
at
org.jboss.as.weld.ejb.EjbRequestScopeActivationInter
ceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(
ConcurrentContextInterceptor.java:45)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.invocation.InitialInterceptor.processInvocation(
InitialInterceptor.java:21)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.invocation.ChainedInterceptor.processInvocation(
ChainedInterceptor.java:61)
at
org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor
.processInvocation(ComponentDispatcherInterceptor.java:52)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.as.ejb3.component.stateful.StatefulComponentInstanceInter
ceptor.processInvocation(StatefulComponentInstanceInterceptor.java:65)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(
CMTTxInterceptor.java:275)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(
CMTTxInterceptor.java:327)
at
org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(
CMTTxInterceptor.java:239)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterc
eptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.
processInvocation(WaitTimeInterceptor.java:43)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(
SecurityContextInterceptor.java:100)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.
processInvocation(ShutDownInterceptorFactory.java:64)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.
processInvocation(LoggingInterceptor.java:66)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(
NamespaceContextInterceptor.java:50)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.
processInvocation(AdditionalSetupInterceptor.java:54)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(
ContextClassLoaderInterceptor.java:64)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at org.jboss.invocation.InterceptorContext.run(
InterceptorContext.java:356)
at
org.wildfly.security.manager.WildFlySecurityManager.doChecked(
WildFlySecurityManager.java:636)
at
org.jboss.invocation.AccessCheckingInterceptor.processInvocation(
AccessCheckingInterceptor.java:61)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at org.jboss.invocation.InterceptorContext.run(
InterceptorContext.java:356)
at
org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(
PrivilegedWithCombinerInterceptor.java:80)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.invocation.ChainedInterceptor.processInvocation(
ChainedInterceptor.java:61)
at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:195)
at
org.jboss.as.ee.component.ViewDescription$1.processInvocation(
ViewDescription.java:185)
at
org.jboss.invocation.InterceptorContext.proceed(
InterceptorContext.java:340)
at
org.jboss.invocation.ChainedInterceptor.processInvocation(
ChainedInterceptor.java:61)
at
org.jboss.as.ee.component.ProxyInvocationHandler.invoke(
ProxyInvocationHandler.java:73)
at test.Bean1$$$view1.produceString(Unknown Source)
If needed I can later today put this in a Maven project as well, but the
above should be enough to get you started I hope.
Kind regards,
Arjan Tijms
On Tue, Aug 16, 2016 at 1:26 PM, Tomas Remes <tremes(a)redhat.com> wrote:
>
> Hi Arjan,
>
> Can you please share some reproducer app? It would be helpful.
>
> Thanks
> Tom
>
> ----- Original Message -----
> From: "arjan tijms" <arjan.tijms(a)gmail.com>
> To: "WildFly Dev" <wildfly-dev(a)lists.jboss.org>
> Sent: Tuesday, August 16, 2016 1:12:22 PM
> Subject: [wildfly-dev] ConcurrentAccessTimeoutException using producer
> in stateful bean
>
> Hi,
>
> I came across a situation where a ConcurrentAccessTimeoutException is
> thrown on WildFly 10.0.0 and 10.1cr1 when an @Stateful @ViewScoped bean
> contains a CDI producer.
>
> In short, there are 3 beans all @Stateful @ViewScoped. Beans 1 and 2 are
> injected in bean 3.
>
> Bean 1 contains a CDI producer.
> Bean 2 is injected with a type from said producer.
>
> The following causes a ConcurrentAccessTimeoutException to be thrown:
>
> bean3.somemethod:
> tx start
> access stateful bean 1
> access stateful bean 2
> (from statefull bean 2): access injected type that causes producer from
> bean 1 to be called
> tx end
>
> If the call to stateful bean 1 is omitted, the producer is called
normally
> when bean 2 accesses the injected type.
>
> If bean 2 is injected directly with bean 1, then bean 1 can be accessed
> without any ConcurrentAccessTimeoutException being thrown.
>
> The code runs fine on WildFly 8.2.
>
> I'll do some further digging, but wonder if this problem rings any bells.
> Could it be that CDI obtains a reference to the stateful bean in such a
way
> that the implicit EJB interceptor doesn't see it's still within the same
> TX? But since there's no call to bean 1 in progress at that point, should
> this even matter?
>
> Kind regards,
> Arjan Tijms
>
> _______________________________________________
> wildfly-dev mailing list
> wildfly-dev(a)lists.jboss.org
>
>
>
>