[
https://issues.jboss.org/browse/WFLY-6663?page=com.atlassian.jira.plugin....
]
jaikiran pai edited comment on WFLY-6663 at 10/8/16 11:34 AM:
--------------------------------------------------------------
I see what's going on (and am able to reproduce it within the WildFly testsuite). It
isn't related to anything transaction management. The root cause of the issue is that
the startup singleton bean injects a *remote view of a stateful session bean*. Internally,
when the injection process on that singleton startup bean is in progress, it triggers a
session creation on the stateful session bean, even before the (MSC service backing the)
stateful component has started.
The relevant piece of code in WildFly is (I think) this
https://github.com/wildfly/wildfly/blob/master/ejb3/src/main/java/org/jbo...
where it skips adding a dependency and instead sets up the
RemoteViewManagedReferenceFactory which later on just goes ahead and tries to create a
component session for the stateful bean
https://github.com/wildfly/wildfly/blob/master/ejb3/src/main/java/org/jbo...
I have been away from WildFly code for a while now and can't think of a way to fix
this properly, given that ejb: lookups in theory don't need to depend on the
component, if the component is really "remote" and doesn't reside on the
same server, which is not the case in the example above. Someone else in the WildFly dev
team, I believe, will be able to fix this properly.
The only workaround that I can think of is, if your MainEjb which I believe is a stateful
bean has a local business interface too, then use that interface for injection instead of
the remove business interface here:
{code}
@EJB
private MainEjb mainEjb; // use a local business interface instead of a remote
one
{code}
was (Author: jaikiran):
I see what's going on (and am able to reproduce it within the WildFly testsuite). It
isn't related to anything transaction management. The root cause of the issue is that
the startup singleton bean injects a *remote view of a stateful session bean*. Internally,
when the injection process on that singleton startup bean is in progress, it triggers a
session creation on the stateful session bean, even before the (MSC service backing the)
stateful component has started.
The relevant piece of code in WildFly is (I think) this
https://github.com/wildfly/wildfly/blob/master/ejb3/src/main/java/org/jbo...
where it skips adding a dependency and instead sets up the
RemoteViewManagedReferenceFactory which later on just goes ahead and tries to create a
component session for the stateful bean
https://github.com/wildfly/wildfly/blob/master/ejb3/src/main/java/org/jbo...
I have been away from WildFly code for a while now and can't think of a way to fix
this properly, given that ejb: lookups in theory don't need to depend on the
component, if the component is really "remote" and doesn't reside on the
same server, which is not the case in the example above. Someone else in the WildFly dev
team, I believe, will be able to fix this properly.
The only workaround that I can think of is, if you MainEjb which I believe is a stateful
bean has a local business interface too, then use that interface for injection instead of
the remove business interface here:
{code}
@EJB
private MainEjb mainEjb; // use a local business interface instead of a remote
one
{code}
NPE
o.j.a.ejb3.component.stateful.StatefulSessionComponent.createSession(StatefulSessionComponent.java:238)
-----------------------------------------------------------------------------------------------------------
Key: WFLY-6663
URL:
https://issues.jboss.org/browse/WFLY-6663
Project: WildFly
Issue Type: Bug
Components: EJB
Affects Versions: 10.0.0.Final, 10.1.0.Final
Environment: Win7 64bit + JDK8 64bit
Reporter: Darryl Miles
1 in 8 deployments fail to deploy, usually a redeploy fixes it.
If there is anyway to get a module state logging out of it, I can send over two logs to
compare, one that deploy ok and one that fails. I guess there is a race bug there
somewhere.
09:42:01,687 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 529)
MSC000001: Failed to start service
jboss.deployment.subunit."com.domain.ear-0.0.1-SNAPSHOT.ear"."com-domain-ejb.main-0.0.1-SNAPSHOT.jar".component.MainStartupEjbImpl.START:
org.jboss.msc.service.StartException in service
jboss.deployment.subunit."com.domain.ear-0.0.1-SNAPSHOT.ear"."com-domain-ejb.main-0.0.1-SNAPSHOT.jar".component.MainStartupEjbImpl.START:
java.lang.IllegalStateException: WFLYEE0042: Failed to construct component instance
at org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:57)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: java.lang.IllegalStateException: WFLYEE0042: Failed to construct component
instance
at
org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:163)
at
org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:134)
at org.jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:88)
at
org.jboss.as.ejb3.component.singleton.SingletonComponent.getComponentInstance(SingletonComponent.java:124)
at
org.jboss.as.ejb3.component.singleton.SingletonComponent.start(SingletonComponent.java:138)
at org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:54)
... 6 more
Caused by: javax.ejb.EJBException: java.lang.RuntimeException: WFLYNAM0059: Resource
lookup for injection failed: env/com.domain.ejb.main.impl.MainStartupEjbImpl/mainEjb
at org.jboss.as.ejb3.tx.BMTInterceptor.handleException(BMTInterceptor.java:83)
at org.jboss.as.ejb3.tx.EjbBMTInterceptor.checkStatelessDone(EjbBMTInterceptor.java:91)
at org.jboss.as.ejb3.tx.EjbBMTInterceptor.handleInvocation(EjbBMTInterceptor.java:106)
at org.jboss.as.ejb3.tx.BMTInterceptor.processInvocation(BMTInterceptor.java:58)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at
org.jboss.as.weld.injection.WeldInjectionContextInterceptor.processInvocation(WeldInjectionContextInterceptor.java:43)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at
org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
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.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.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.BasicComponent.constructComponentInstance(BasicComponent.java:161)
... 11 more
Caused by: java.lang.RuntimeException: WFLYNAM0059: Resource lookup for injection failed:
env/com.domain.ejb.main.impl.MainStartupEjbImpl/mainEjb
at
org.jboss.as.naming.deployment.ContextNames$BindInfo$1$1.getReference(ContextNames.java:319)
at
org.jboss.as.ee.component.ManagedReferenceFieldInjectionInterceptorFactory$ManagedReferenceFieldInjectionInterceptor.processInvocation(ManagedReferenceFieldInjectionInterceptorFactory.java:97)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at
org.jboss.as.ee.component.ManagedReferenceFieldInjectionInterceptorFactory$ManagedReferenceFieldInjectionInterceptor.processInvocation(ManagedReferenceFieldInjectionInterceptorFactory.java:107)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at
org.jboss.as.ee.component.ManagedReferenceFieldInjectionInterceptorFactory$ManagedReferenceFieldInjectionInterceptor.processInvocation(ManagedReferenceFieldInjectionInterceptorFactory.java:107)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at
org.jboss.as.ee.component.ManagedReferenceFieldInjectionInterceptorFactory$ManagedReferenceFieldInjectionInterceptor.processInvocation(ManagedReferenceFieldInjectionInterceptorFactory.java:107)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at
org.jboss.as.ee.component.AroundConstructInterceptorFactory$1.processInvocation(AroundConstructInterceptorFactory.java:28)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at
org.jboss.as.weld.injection.WeldInterceptorInjectionInterceptor.processInvocation(WeldInterceptorInjectionInterceptor.java:56)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at
org.jboss.as.weld.ejb.Jsr299BindingsCreateInterceptor.processInvocation(Jsr299BindingsCreateInterceptor.java:100)
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.tx.EjbBMTInterceptor.handleInvocation(EjbBMTInterceptor.java:103)
... 26 more
Caused by: javax.naming.NamingException: WFLYNAM0062: Failed to lookup
env/com.domain.ejb.main.impl.MainStartupEjbImpl/mainEjb [Root exception is
java.lang.RuntimeException: WFLYEJB0423: Could not create session for stateful bean
MainEjbImpl]
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:157)
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:83)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:207)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:193)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:189)
at
org.jboss.as.naming.deployment.ContextNames$BindInfo$1$1.getReference(ContextNames.java:316)
... 43 more
Caused by: java.lang.RuntimeException: WFLYEJB0423: Could not create session for stateful
bean MainEjbImpl
at
org.jboss.as.ejb3.remote.RemoteViewManagedReferenceFactory.getReference(RemoteViewManagedReferenceFactory.java:99)
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:143)
... 48 more
Caused by: java.lang.NullPointerException
at
org.jboss.as.ejb3.component.stateful.StatefulSessionComponent.createSession(StatefulSessionComponent.java:238)
at org.jboss.as.ejb3.remote.LocalEjbReceiver.openSession(LocalEjbReceiver.java:296)
at org.jboss.ejb.client.EJBClient.createSessionWithPossibleRetries(EJBClient.java:225)
at org.jboss.ejb.client.EJBClient.createSession(EJBClient.java:202)
at org.jboss.ejb.client.EJBClient.createSession(EJBClient.java:176)
at
org.jboss.as.ejb3.remote.RemoteViewManagedReferenceFactory.getReference(RemoteViewManagedReferenceFactory.java:97)
... 49 more
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)