Transactional CDI events not work in case of remote EJB call
------------------------------------------------------------
Key: JBAS-8850
URL:
https://issues.jboss.org/browse/JBAS-8850
Project: JBoss Application Server
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: Weld/CDI
Affects Versions: 6.0.0.Final
Reporter: Eugene Romanenko
Assignee: Marius Bogoevici
When EJB fires CDI event, observer method called only if TransactionPhase set to
IN_PROGRESS. When TransactionPhase set to any other value (transactional event), JBoss
shows error:
{code}20:55:40,700 ERROR [org.jboss.weld.Event] WELD-000401 Failure while notifying an
observer of event er.t2.TestEvent@78a17a{code}
Looks like there problem with cdi events during remote call.
Testcase:
{code:title=TestEvent.java|borderStyle=solid}
public class TestEvent {
private String message;
public TestEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
{code}
{code:title=T2Remote.java|borderStyle=solid}
@Remote
public interface T2Remote {
void theTest();
}
{code}
{code:title=T2Bean.java|borderStyle=solid}
@Stateless
public class T2Bean implements T2Remote {
@Inject
private Event<TestEvent> events;
@Override
public void theTest() {
events.fire(new TestEvent("from bean " + System.currentTimeMillis()));
}
}
{code}
{code:title=TestListener.java|borderStyle=solid}
@Stateless
public class TestListener {
public void listen( @Observes(during=AFTER_COMPLETION) TestEvent evt ) {
System.out.println("Event: " + evt.getMessage());
}
}
{code}
Simple remote client:
{code:title=Main.java|borderStyle=solid}
public class Main {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
properties.put(Context.PROVIDER_URL, "localhost");
Context ctx = new InitialContext( properties );
Object ref = ctx.lookup( "T2Bean/remote" );
T2Remote t = (T2Remote)ref;
t.theTest();
System.out.println( "theTest() called!" );
}
}
{code}
In debug log we have following exception:
{code}
2011-01-25 09:13:04,359 DEBUG [org.jboss.ejb3.stateless.StatelessContainer]
(WorkerThread#0[127.0.0.1:3536]) Received dynamic invocation for method with hash:
-4087570856943461660
2011-01-25 09:13:04,359 DEBUG [org.jboss.weld.Event] (WorkerThread#0[127.0.0.1:3536])
WELD-000400 Sending event er.tst.TestEvent@151e0c7 directly to observer [method] public
er.tst.TestListener.listen(TestEvent)
2011-01-25 09:13:04,359 ERROR [org.jboss.weld.Event] (WorkerThread#0[127.0.0.1:3536])
WELD-000401 Failure while notifying an observer of event er.tst.TestEvent@151e0c7
2011-01-25 09:13:04,359 DEBUG [org.jboss.weld.Event] (WorkerThread#0[127.0.0.1:3536])
throwing: org.jboss.weld.exceptions.UnsatisfiedResolutionException: WELD-001308 Unable to
resolve any beans for Types: [interface org.jboss.weld.context.ejb.EjbRequestContext];
Bindings: [@org.jboss.weld.context.unbound.Unbound()]
at org.jboss.weld.manager.BeanManagerImpl.getBean(BeanManagerImpl.java:788)
[:6.0.0.Final]
at org.jboss.weld.bean.builtin.InstanceImpl.get(InstanceImpl.java:80) [:6.0.0.Final]
at
org.jboss.weld.event.DeferredEventNotification$RunInRequest.run(DeferredEventNotification.java:103)
[:6.0.0.Final]
at
org.jboss.weld.event.DeferredEventNotification.run(DeferredEventNotification.java:64)
[:6.0.0.Final]
at
org.jboss.weld.event.TransactionSynchronizedRunnable.afterCompletion(TransactionSynchronizedRunnable.java:62)
[:6.0.0.Final]
at
com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.afterCompletion(SynchronizationImple.java:117)
[:6.0.0.Final]
at
com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.afterCompletion(TwoPhaseCoordinator.java:371)
[:6.0.0.Final]
at
com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:104)
[:6.0.0.Final]
at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:159) [:6.0.0.Final]
at
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1158)
[:6.0.0.Final]
at
com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:119)
[:6.0.0.Final]
at
com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
[:6.0.0.Final]
at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:82)
[:0.0.1]
at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:255)
[:0.0.1]
at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.required(CMTTxInterceptor.java:349)
[:0.0.1]
at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invoke(CMTTxInterceptor.java:209)
[:0.0.1]
at
org.jboss.ejb3.tx2.aop.CMTTxInterceptorWrapper.invoke(CMTTxInterceptorWrapper.java:52)
[:0.0.1]
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
[jboss-aop.jar:2.2.1.GA]
at
org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
[:1.0.0.GA]
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
[jboss-aop.jar:2.2.1.GA]
at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42) [:1.0.3]
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
[jboss-aop.jar:2.2.1.GA]
at
org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:182)
[:1.7.17]
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
[jboss-aop.jar:2.2.1.GA]
at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)
[:1.7.17]
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
[jboss-aop.jar:2.2.1.GA]
at
org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)
[:1.7.17]
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
[jboss-aop.jar:2.2.1.GA]
at
org.jboss.ejb3.core.context.CurrentInvocationContextInterceptor.invoke(CurrentInvocationContextInterceptor.java:47)
[:1.7.17]
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
[jboss-aop.jar:2.2.1.GA]
at
org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
[:1.0.1]
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
[jboss-aop.jar:2.2.1.GA]
at org.jboss.ejb3.interceptor.EJB3TCCLInterceptor.invoke(EJB3TCCLInterceptor.java:86)
[:1.7.17]
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
[jboss-aop.jar:2.2.1.GA]
at
org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:392)
[:1.7.17]
at
org.jboss.ejb3.session.InvokableContextClassProxyHack._dynamicInvoke(InvokableContextClassProxyHack.java:53)
[:1.7.17]
at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:91) [jboss-aop.jar:2.2.1.GA]
at
org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
[:1.0.1.GA]
at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:898) [:6.0.0.Final]
at
org.jboss.remoting.transport.socket.ServerThread.completeInvocation(ServerThread.java:791)
[:6.0.0.Final]
at
org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:744)
[:6.0.0.Final]
at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:548)
[:6.0.0.Final]
at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:234)
[:6.0.0.Final]
2011-01-25 09:13:04,375 DEBUG [org.jboss.remoting.transport.socket.ServerThread]
(WorkerThread#0[127.0.0.1:3536]) WorkerThread#0[127.0.0.1:3536] closed socketWrapper:
ServerSocketWrapper[Socket[addr=/127.0.0.1,port=3536,localport=3873].15fe804]
{code}
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira