[jboss-jira] [JBoss JIRA] (WFLY-8954) Wildfly 10 with eclipselink Onscucess observer gets stale entity
Nuno Godinho de Matos (JIRA)
issues at jboss.org
Sat Jun 24 12:22:01 EDT 2017
[ https://issues.jboss.org/browse/WFLY-8954?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13426332#comment-13426332 ]
Nuno Godinho de Matos commented on WFLY-8954:
---------------------------------------------
Hi,
I have now launche the sample application on both application servers, and tested the triggering to event B on both app servers. The event B, is the one where the observer of event B is a @Singleton @TransactioAsttirbute requires new.
My impresison, is that the bug is not in the "com.arjuna" but rather on the wildfly/jboss registration of onsuccess oberservers into this adapter, to determine what should happen during on succes.
But here I am going a bit to far on my analysis, since I am not really sure how exactly these different components glue together. But as you will see in the stack traces posted bellow, the arjuna code seems to be doing some sort of generic loop invoking oncusscess obverserves.
And it just so happens to appear that arjuna is first invoking the CDI / EJB on success event publisher and only later the eclipse link sessiong synchronizer code.
But I leave to you guys the actual conclusion on the bug, I believe these stack traces have everything in there to point the bug and the above is just my impression / but since I have never written container code it is all I can offer.
OK so first we start with the stack traces for weblogic:
On weblogic I put two stack traces.
1. The first stack trace is my break point the eclipselink RepeatableWriteUnitOfWork.mergeToParent() getting called.
2. The second trace corresponds to my second break point getting hit, which is the business logic for the observes event.
The above stack traces are perfectly in line to theory we have discussed above.
And it makes perfect logic sense. First weblogic commits and synchronizies the server session cache. Then it calls our on success business logic.
{panel}
-- -------------------------
-- MOMENT 1: clicking on the web page to trigger event B
-- -------------------------
1 CLICK EVENT B
-- -------------------------
-- MOMENT 2: The break point in the RepeatableWriteUnitOfWorkMerge to parent gets hit (it is around here that mreging to server session will be taking place)
-- -------------------------
2. Repeatable write unti of work merge chages into parent:
Daemon Thread [[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'] (Suspended (breakpoint at line 371 in org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork))
owns: weblogic.transaction.internal.ServerSCInfo (id=269)
org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork(org.eclipse.persistence.internal.sessions.UnitOfWorkImpl).mergeClonesAfterCompletion() line: 3412
org.eclipse.persistence.transaction.JTASynchronizationListener(org.eclipse.persistence.transaction.AbstractSynchronizationListener).afterCompletion(java.lang.Object) line: 217
org.eclipse.persistence.transaction.JTASynchronizationListener.afterCompletion(int) line: 79
weblogic.transaction.internal.ServerSCInfo.doAfterCompletion(javax.transaction.Synchronization, int, weblogic.security.acl.internal.AuthenticatedSubject, weblogic.security.acl.internal.AuthenticatedSubject, weblogic.invocation.ComponentInvocationContext) line: 1254
weblogic.transaction.internal.ServerSCInfo.callAfterCompletions(int, weblogic.transaction.internal.TransactionImpl) line: 1225
weblogic.transaction.internal.ServerTransactionImpl.callAfterCompletions() line: 3630
weblogic.transaction.internal.ServerTransactionImpl.afterCommittedStateHousekeeping() line: 3527
weblogic.transaction.internal.ServerTransactionImpl.setCommitted() line: 3573
weblogic.transaction.internal.ServerTransactionImpl.globalRetryCommit(int, int, int) line: 3297
weblogic.transaction.internal.ServerTransactionImpl.globalCommit(int) line: 3197
weblogic.transaction.internal.ServerTransactionImpl.internalCommit() line: 309
weblogic.transaction.internal.ServerTransactionImpl.commit() line: 257
weblogic.ejb.container.internal.StatelessLocalObject(weblogic.ejb.container.internal.BaseLocalObject).postInvoke1(int, weblogic.ejb.container.internal.InvocationWrapper, java.lang.Throwable) line: 316
weblogic.ejb.container.internal.StatelessLocalObject(weblogic.ejb.container.internal.BaseLocalObject).__WL_postInvokeTxRetry(weblogic.ejb.container.internal.InvocationWrapper, java.lang.Throwable) line: 195
weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(weblogic.ejb.container.interfaces.Invokable, weblogic.ejb.container.internal.BaseLocalObject, weblogic.ejb.container.internal.InvocationWrapper, java.lang.Object[], int) line: 46
wildfly.bug.onsuccess.facade.ModifyEntityAndFireEventFacade_uskw20_NoIntfViewImpl.modifyEntityAndFireEventB() line: not available
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 436
org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler<T>.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 127
org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance(org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance).invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 56
org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 67
org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 100
wildfly.bug.onsuccess.facade.ModifyEntityAndFireEventFacade$Proxy$_$$_Weld$EnterpriseProxy$.modifyEntityAndFireEventB() line: not available
entrypoint.web.SystemTestBean.fireSomeEntityChangeBEvent() line: 70
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
com.sun.el.util.ReflectionUtil.invokeMethod(javax.el.ELContext, java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: 181
com.sun.el.parser.AstValue.invoke(com.sun.el.lang.EvaluationContext, java.lang.Class[], java.lang.Object[]) line: 289
com.sun.el.MethodExpressionImpl.invoke(javax.el.ELContext, java.lang.Object[]) line: 304
org.jboss.weld.el.WeldMethodExpression(org.jboss.weld.util.el.ForwardingMethodExpression).invoke(javax.el.ELContext, java.lang.Object[]) line: 40
org.jboss.weld.el.WeldMethodExpression.invoke(javax.el.ELContext, java.lang.Object[]) line: 50
org.jboss.weld.el.WeldMethodExpression(org.jboss.weld.util.el.ForwardingMethodExpression).invoke(javax.el.ELContext, java.lang.Object[]) line: 40
org.jboss.weld.el.WeldMethodExpression.invoke(javax.el.ELContext, java.lang.Object[]) line: 50
javax.faces.event.MethodExpressionActionListener.processAction(javax.faces.event.ActionEvent) line: 149
javax.faces.event.ActionEvent.processListener(javax.faces.event.FacesListener) line: 88
org.primefaces.component.commandbutton.CommandButton(javax.faces.component.UIComponentBase).broadcast(javax.faces.event.FacesEvent) line: 814
org.primefaces.component.commandbutton.CommandButton(javax.faces.component.UICommand).broadcast(javax.faces.event.FacesEvent) line: 300
javax.faces.component.UIViewRoot.broadcastEvents(javax.faces.context.FacesContext, javax.faces.event.PhaseId) line: 790
javax.faces.component.UIViewRoot.processApplication(javax.faces.context.FacesContext) line: 1282
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(javax.faces.context.FacesContext) line: 81
com.sun.faces.lifecycle.InvokeApplicationPhase(com.sun.faces.lifecycle.Phase).doPhase(javax.faces.context.FacesContext, javax.faces.lifecycle.Lifecycle, java.util.ListIterator<javax.faces.event.PhaseListener>) line: 101
com.sun.faces.lifecycle.LifecycleImpl.execute(javax.faces.context.FacesContext) line: 198
org.apache.deltaspike.jsf.impl.listener.request.DeltaSpikeLifecycleWrapper.execute(javax.faces.context.FacesContext) line: 89
org.apache.deltaspike.jsf.impl.listener.request.JsfClientWindowAwareLifecycleWrapper(javax.faces.lifecycle.LifecycleWrapper).execute(javax.faces.context.FacesContext) line: 77
javax.faces.webapp.FacesServlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse) line: 650
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run() line: 286
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run() line: 260
-- ------------------------- -- -------------------------
-- MOMENT 3: Breakpoint on observer gets hit the server sesison cache already holds the changes
-- -------------------------
3. - On Success observer:
Daemon Thread [[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'] (Suspended (breakpoint at line 55 in wildfly.bug.onsuccess.facade.SomeEntityChangeEventObserverBFacade))
owns: weblogic.transaction.internal.ServerSCInfo (id=237)
wildfly.bug.onsuccess.facade.SomeEntityChangeEventObserverBFacade_y0uz1i_Impl(wildfly.bug.onsuccess.facade.SomeEntityChangeEventObserverBFacade).observeEvent(wildfly.bug.onsuccess.event.SomeEntityChangeBEvent) line: 55
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) line: 310
com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint() line: 182
com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed() line: 149
com.oracle.pitchfork.intercept.MethodInvocationInvocationContext.proceed() line: 101
inteceptor.FacadeInterceptor(inteceptor.GenericLoggingInterceptor).aroundInvoke(javax.interceptor.InvocationContext) line: 93
sun.reflect.GeneratedMethodAccessor402.invoke(java.lang.Object, java.lang.Object[]) line: not available
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
com.oracle.pitchfork.intercept.JeeInterceptorInterceptor.invoke(com.bea.core.repackaged.aopalliance.intercept.MethodInvocation) line: 94
com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed() line: 171
com.oracle.pitchfork.intercept.MethodInvocationInvocationContext.proceed() line: 101
com.oracle.pitchfork.intercept.JeeInterceptorInterceptor.invoke(com.bea.core.repackaged.aopalliance.intercept.MethodInvocation) line: 101
com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed() line: 171
com.oracle.pitchfork.intercept.MethodInvocationInvocationContext.proceed() line: 101
org.jboss.weld.ejb.SessionBeanInterceptor(org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor).aroundInvoke(javax.interceptor.InvocationContext) line: 64
org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(javax.interceptor.InvocationContext) line: 52
sun.reflect.GeneratedMethodAccessor144.invoke(java.lang.Object, java.lang.Object[]) line: not available
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
com.oracle.pitchfork.intercept.JeeInterceptorInterceptor.invoke(com.bea.core.repackaged.aopalliance.intercept.MethodInvocation) line: 94
com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed() line: 171
com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(com.bea.core.repackaged.aopalliance.intercept.MethodInvocation) line: 131
com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(com.bea.core.repackaged.aopalliance.intercept.MethodInvocation) line: 119
com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed() line: 171
com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopProxy.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) line: 215
com.sun.proxy.$Proxy368.observeEvent(wildfly.bug.onsuccess.event.SomeEntityChangeBEvent) line: not available
wildfly.bug.onsuccess.facade.SomeEntityChangeEventObserverBFacade_y0uz1i_NoIntfViewImpl.__WL_invoke(java.lang.Object, java.lang.Object[], int) line: not available
weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(weblogic.ejb.container.interfaces.Invokable, weblogic.ejb.container.internal.BaseLocalObject, weblogic.ejb.container.internal.InvocationWrapper, java.lang.Object[], int) line: 33
wildfly.bug.onsuccess.facade.SomeEntityChangeEventObserverBFacade_y0uz1i_NoIntfViewImpl.observeEvent(wildfly.bug.onsuccess.event.SomeEntityChangeBEvent) line: not available
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 436
org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler<T>.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 127
org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 56
org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 100
wildfly.bug.onsuccess.facade.SomeEntityChangeEventObserverBFacade$Proxy$_$$_Weld$EnterpriseProxy$.observeEvent(wildfly.bug.onsuccess.event.SomeEntityChangeBEvent) line: not available
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.weld.injection.VirtualMethodInjectionPoint<T,X>(org.jboss.weld.injection.StaticMethodInjectionPoint<T,X>).invoke(java.lang.Object, java.lang.Object[], java.lang.Class<? extends java.lang.RuntimeException>) line: 88
org.jboss.weld.injection.VirtualMethodInjectionPoint<T,X>(org.jboss.weld.injection.StaticMethodInjectionPoint<T,X>).invoke(java.lang.Object, java.lang.Object, org.jboss.weld.manager.BeanManagerImpl, javax.enterprise.context.spi.CreationalContext<?>, java.lang.Class<? extends java.lang.RuntimeException>) line: 78
org.jboss.weld.injection.MethodInvocationStrategy$SimpleMethodInvocationStrategy.invoke(java.lang.Object, org.jboss.weld.injection.MethodInjectionPoint<?,?>, T, org.jboss.weld.manager.BeanManagerImpl, javax.enterprise.context.spi.CreationalContext<?>) line: 129
org.jboss.weld.event.ObserverMethodImpl<T,X>.sendEvent(T, java.lang.Object, javax.enterprise.context.spi.CreationalContext<?>) line: 309
org.jboss.weld.event.ObserverMethodImpl<T,X>.sendEvent(T) line: 287
org.jboss.weld.event.ObserverMethodImpl<T,X>.notify(T) line: 265
org.jboss.weld.event.DeferredEventNotification$1.execute() line: 69
org.jboss.weld.event.DeferredEventNotification$1(org.jboss.weld.event.DeferredEventNotification$RunInRequest).run() line: 101
org.jboss.weld.event.DeferredEventNotification<T>.run() line: 75
org.jboss.weld.event.TransactionSynchronizedRunnable.afterCompletion(int) line: 54
weblogic.transaction.internal.ServerSCInfo.doAfterCompletion(javax.transaction.Synchronization, int, weblogic.security.acl.internal.AuthenticatedSubject, weblogic.security.acl.internal.AuthenticatedSubject, weblogic.invocation.ComponentInvocationContext) line: 1254
weblogic.transaction.internal.ServerSCInfo.callAfterCompletions(int, weblogic.transaction.internal.TransactionImpl) line: 1225
weblogic.transaction.internal.ServerTransactionImpl.callAfterCompletions() line: 3630
weblogic.transaction.internal.ServerTransactionImpl.afterCommittedStateHousekeeping() line: 3527
weblogic.transaction.internal.ServerTransactionImpl.setCommitted() line: 3573
weblogic.transaction.internal.ServerTransactionImpl.globalRetryCommit(int, int, int) line: 3297
weblogic.transaction.internal.ServerTransactionImpl.globalCommit(int) line: 3197
weblogic.transaction.internal.ServerTransactionImpl.internalCommit() line: 309
weblogic.transaction.internal.ServerTransactionImpl.commit() line: 257
weblogic.ejb.container.internal.StatelessLocalObject(weblogic.ejb.container.internal.BaseLocalObject).postInvoke1(int, weblogic.ejb.container.internal.InvocationWrapper, java.lang.Throwable) line: 316
weblogic.ejb.container.internal.StatelessLocalObject(weblogic.ejb.container.internal.BaseLocalObject).__WL_postInvokeTxRetry(weblogic.ejb.container.internal.InvocationWrapper, java.lang.Throwable) line: 195
weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(weblogic.ejb.container.interfaces.Invokable, weblogic.ejb.container.internal.BaseLocalObject, weblogic.ejb.container.internal.InvocationWrapper, java.lang.Object[], int) line: 46
wildfly.bug.onsuccess.facade.ModifyEntityAndFireEventFacade_uskw20_NoIntfViewImpl.modifyEntityAndFireEventB() line: not available
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 436
org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler<T>.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 127
org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance(org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance).invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 56
org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 67
org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 100
wildfly.bug.onsuccess.facade.ModifyEntityAndFireEventFacade$Proxy$_$$_Weld$EnterpriseProxy$.modifyEntityAndFireEventB() line: not available
entrypoint.web.SystemTestBean.fireSomeEntityChangeBEvent() line: 70
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
com.sun.el.util.ReflectionUtil.invokeMethod(javax.el.ELContext, java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: 181
com.sun.el.parser.AstValue.invoke(com.sun.el.lang.EvaluationContext, java.lang.Class[], java.lang.Object[]) line: 289
com.sun.el.MethodExpressionImpl.invoke(javax.el.ELContext, java.lang.Object[]) line: 304
org.jboss.weld.el.WeldMethodExpression(org.jboss.weld.util.el.ForwardingMethodExpression).invoke(javax.el.ELContext, java.lang.Object[]) line: 40
org.jboss.weld.el.WeldMethodExpression.invoke(javax.el.ELContext, java.lang.Object[]) line: 50
org.jboss.weld.el.WeldMethodExpression(org.jboss.weld.util.el.ForwardingMethodExpression).invoke(javax.el.ELContext, java.lang.Object[]) line: 40
org.jboss.weld.el.WeldMethodExpression.invoke(javax.el.ELContext, java.lang.Object[]) line: 50
javax.faces.event.MethodExpressionActionListener.processAction(javax.faces.event.ActionEvent) line: 149
javax.faces.event.ActionEvent.processListener(javax.faces.event.FacesListener) line: 88
org.primefaces.component.commandbutton.CommandButton(javax.faces.component.UIComponentBase).broadcast(javax.faces.event.FacesEvent) line: 814
org.primefaces.component.commandbutton.CommandButton(javax.faces.component.UICommand).broadcast(javax.faces.event.FacesEvent) line: 300
javax.faces.component.UIViewRoot.broadcastEvents(javax.faces.context.FacesContext, javax.faces.event.PhaseId) line: 790
javax.faces.component.UIViewRoot.processApplication(javax.faces.context.FacesContext) line: 1282
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(javax.faces.context.FacesContext) line: 81
com.sun.faces.lifecycle.InvokeApplicationPhase(com.sun.faces.lifecycle.Phase).doPhase(javax.faces.context.FacesContext, javax.faces.lifecycle.Lifecycle, java.util.ListIterator<javax.faces.event.PhaseListener>) line: 101
com.sun.faces.lifecycle.LifecycleImpl.execute(javax.faces.context.FacesContext) line: 198
org.apache.deltaspike.jsf.impl.listener.request.DeltaSpikeLifecycleWrapper.execute(javax.faces.context.FacesContext) line: 89
org.apache.deltaspike.jsf.impl.listener.request.JsfClientWindowAwareLifecycleWrapper(javax.faces.lifecycle.LifecycleWrapper).execute(javax.faces.context.FacesContext) line: 77
javax.faces.webapp.FacesServlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse) line: 650
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run() line: 286
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run() line: 260
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(javax.servlet.ServletRequest, javax.servlet.http.HttpServletRequest, weblogic.servlet.internal.ServletRequestImpl, javax.servlet.ServletResponse, javax.servlet.http.HttpServletResponse, javax.servlet.Servlet) line: 137
weblogic.servlet.internal.ServletStubImpl.execute(javax.servlet.ServletRequest, javax.servlet.ServletResponse, weblogic.servlet.internal.FilterChainImpl) line: 350
weblogic.servlet.internal.TailFilter.doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) line: 25
weblogic.servlet.internal.FilterChainImpl.doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse) line: 78
weblogic.servlet.internal.RequestEventsFilter.doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) line: 32
weblogic.servlet.internal.FilterChainImpl.doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse) line: 78
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(weblogic.servlet.internal.ServletStub, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) line: 3683
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run() line: 3649
weblogic.security.acl.internal.AuthenticatedSubject.doAs(weblogic.security.subject.AbstractSubject, java.security.PrivilegedAction) line: 326
weblogic.security.service.SecurityManager.runAsForUserCode(weblogic.security.acl.internal.AuthenticatedSubject, weblogic.security.acl.internal.AuthenticatedSubject, java.security.PrivilegedAction<T>) line: 197
weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(weblogic.security.acl.internal.AuthenticatedSubject, java.security.PrivilegedAction, weblogic.security.acl.internal.AuthenticatedSubject) line: 203
weblogic.servlet.provider.WlsSubjectHandle.run(java.security.PrivilegedAction) line: 71
weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(weblogic.servlet.internal.ServletInvocationContext, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, boolean, boolean, boolean) line: 2433
weblogic.servlet.internal.WebAppServletContext.securedExecute(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, boolean) line: 2281
weblogic.servlet.internal.WebAppServletContext.execute(weblogic.servlet.internal.ServletRequestImpl, weblogic.servlet.internal.ServletResponseImpl) line: 2259
weblogic.servlet.internal.ServletRequestImpl.runInternal() line: 1691
weblogic.servlet.internal.ServletRequestImpl.run() line: 1651
weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run() line: 270
weblogic.invocation.ComponentInvocationContextManager._runAs(weblogic.invocation.ComponentInvocationContext, java.lang.Runnable) line: 348
weblogic.invocation.ComponentInvocationContextManager.runAs(java.security.Principal, weblogic.invocation.ComponentInvocationContext, java.lang.Runnable) line: 333
weblogic.work.LivePartitionUtility.doRunWorkUnderContext(java.lang.Runnable, weblogic.invocation.ComponentInvocationContext) line: 54
weblogic.work.PartitionUtility.runWorkUnderContext(java.lang.Runnable, weblogic.invocation.ComponentInvocationContext) line: 41
weblogic.work.ServerWorkManagerImpl(weblogic.work.SelfTuningWorkManagerImpl).runWorkUnderContext(weblogic.work.ExecuteThread, weblogic.work.WorkAdapter) line: 640
weblogic.work.ExecuteThread.execute(weblogic.work.WorkAdapter) line: 406
weblogic.work.ExecuteThread.run() line: 346
{panel}
Now on Wildfly, the stack traces also follow the theory above. So the order by which our break points get hit is reversed.
1. The first break point that gets hit is the break point we put on success obversvation.
2. The second break point that gets hit is when eclipselink is doing the RepeatbleWriteUnit of work merge to parent.
3. I also add third stack trace that corresponds to the same break point on eclipselink getting hit a second time. This happens because we have two JTA transactions that commit. The original business transaction and the observer on success transaction.
So what went wrong is that our break point on point (2) was not hit before the break point on the success obverver.
Finally, since in these break points the arjuna code seems to be delegating to the container the respnsability of handling on succes:
com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.afterCompletion(int) line: 96
we can imagine that this code here is a generic piece of code invoking some command like invoation or subscriber like notification , and the problem would be the order by which the subscribers/commands are ordered in the loop.
Here are the stack traces for wildfly:
{panel}
WILDFLY:
-- -------------------------
-- MOMENT 1: clicking on the web page to trigger event B
-- -------------------------
-- -------------------------
-- MOMENT 2: The break point on the observers event gets hit (we have a bug our merge breakpoint should have been hit)
-- -------------------------
2. Then Wildfly calls the on success observer
Thread [default task-12] (Suspended (breakpoint at line 55 in wildfly.bug.onsuccess.facade.SomeEntityChangeEventObserverBFacade))
owns: java.lang.Object (id=511)
wildfly.bug.onsuccess.facade.SomeEntityChangeEventObserverBFacade.observeEvent(wildfly.bug.onsuccess.event.SomeEntityChangeBEvent) line: 55
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 52
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext$Invocation.proceed() line: 437
org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.delegateInterception(javax.interceptor.InvocationContext, javax.enterprise.inject.spi.InterceptionType, java.util.List<javax.enterprise.inject.spi.Interceptor<?>>, org.jboss.as.weld.ejb.WeldInterceptorInstances) line: 70
org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(javax.interceptor.InvocationContext, javax.enterprise.inject.spi.InterceptionType, org.jboss.as.weld.ejb.WeldInterceptorInstances, org.jboss.weld.ejb.spi.InterceptorBindings) line: 80
org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 93
org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(org.jboss.invocation.InterceptorContext) line: 63
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext$Invocation.proceed() line: 437
inteceptor.FacadeInterceptor(inteceptor.GenericLoggingInterceptor).aroundInvoke(javax.interceptor.InvocationContext) line: 68
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.as.ee.component.ManagedReferenceLifecycleMethodInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 89
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 43
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext$Invocation.proceed() line: 437
org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor(org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor).aroundInvoke(javax.interceptor.InvocationContext) line: 64
org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 83
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 45
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InitialInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 21
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ChainedInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 52
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.singleton.SingletonComponentInstanceAssociationInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 53
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(org.jboss.invocation.InterceptorContext, javax.transaction.TransactionManager, org.jboss.as.ejb3.component.EJBComponent) line: 275
org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(org.jboss.invocation.InterceptorContext, org.jboss.as.ejb3.component.EJBComponent, int) line: 344
org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 241
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 41
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 43
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 100
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext$Invocation.proceed() line: 437
org.jboss.as.ejb3.concurrency.ContainerManagedConcurrencyInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 110
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(org.jboss.invocation.InterceptorContext) line: 64
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 66
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 50
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 54
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 64
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext.run() line: 356
org.wildfly.security.manager.WildFlySecurityManager.doChecked(java.security.PrivilegedExceptionAction<T>) line: 636
org.jboss.invocation.AccessCheckingInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext.run() line: 356
org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 80
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ChainedInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.as.ee.component.ViewService$View.invoke(org.jboss.invocation.InterceptorContext) line: 195
org.jboss.as.ee.component.ViewDescription$1.processInvocation(org.jboss.invocation.InterceptorContext) line: 185
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ChainedInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.as.ee.component.ProxyInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) line: 73
wildfly.bug.onsuccess.facade.SomeEntityChangeEventObserverBFacade$$$view12.observeEvent(wildfly.bug.onsuccess.event.SomeEntityChangeBEvent) line: not available
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 436
org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler<T>.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 127
org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 56
org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 100
wildfly.bug.onsuccess.facade.SomeEntityChangeEventObserverBFacade$Proxy$_$$_Weld$EnterpriseProxy$.observeEvent(wildfly.bug.onsuccess.event.SomeEntityChangeBEvent) line: not available
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.weld.injection.VirtualMethodInjectionPoint<T,X>(org.jboss.weld.injection.StaticMethodInjectionPoint<T,X>).invoke(java.lang.Object, java.lang.Object[], java.lang.Class<? extends java.lang.RuntimeException>) line: 88
org.jboss.weld.injection.VirtualMethodInjectionPoint<T,X>(org.jboss.weld.injection.StaticMethodInjectionPoint<T,X>).invoke(java.lang.Object, java.lang.Object, org.jboss.weld.manager.BeanManagerImpl, javax.enterprise.context.spi.CreationalContext<?>, java.lang.Class<? extends java.lang.RuntimeException>) line: 78
org.jboss.weld.injection.MethodInvocationStrategy$SimpleMethodInvocationStrategy.invoke(java.lang.Object, org.jboss.weld.injection.MethodInjectionPoint<?,?>, T, org.jboss.weld.manager.BeanManagerImpl, javax.enterprise.context.spi.CreationalContext<?>) line: 129
org.jboss.weld.event.ObserverMethodImpl<T,X>.sendEvent(T, java.lang.Object, javax.enterprise.context.spi.CreationalContext<?>) line: 309
org.jboss.weld.event.ObserverMethodImpl<T,X>.sendEvent(T) line: 287
org.jboss.weld.event.ObserverMethodImpl<T,X>.notify(T) line: 265
org.jboss.weld.event.DeferredEventNotification$1.execute() line: 69
org.jboss.weld.event.DeferredEventNotification$1(org.jboss.weld.event.DeferredEventNotification$RunInRequest).run() line: 101
org.jboss.weld.event.DeferredEventNotification<T>.run() line: 75
org.jboss.weld.event.TransactionSynchronizedRunnable.afterCompletion(int) line: 54
com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.afterCompletion(int) line: 96
com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction(com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator).afterCompletion(int, boolean) line: 545
com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction(com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator).end(boolean) line: 101
com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction(com.arjuna.ats.arjuna.AtomicAction).commit(boolean) line: 162
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate() line: 1200
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple(com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction).commit() line: 126
com.arjuna.ats.jbossatx.jta.TransactionManagerDelegate(com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate).commit() line: 89
org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(javax.transaction.TransactionManager, javax.transaction.Transaction) line: 91
org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(org.jboss.invocation.InterceptorContext, javax.transaction.TransactionManager, org.jboss.as.ejb3.component.EJBComponent) line: 279
org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(org.jboss.invocation.InterceptorContext, org.jboss.as.ejb3.component.EJBComponent, int) line: 349
org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 241
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 41
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 43
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 100
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(org.jboss.invocation.InterceptorContext) line: 64
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 66
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 50
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 54
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 64
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext.run() line: 356
org.wildfly.security.manager.WildFlySecurityManager.doChecked(java.security.PrivilegedExceptionAction<T>) line: 636
org.jboss.invocation.AccessCheckingInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext.run() line: 356
org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 80
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ChainedInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.as.ee.component.ViewService$View.invoke(org.jboss.invocation.InterceptorContext) line: 195
org.jboss.as.ee.component.ViewDescription$1.processInvocation(org.jboss.invocation.InterceptorContext) line: 185
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ChainedInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.as.ee.component.ProxyInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) line: 73
wildfly.bug.onsuccess.facade.ModifyEntityAndFireEventFacade$$$view1.modifyEntityAndFireEventB() line: not available
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 436
org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler<T>.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 127
org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance(org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance).invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 56
org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 67
org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 100
wildfly.bug.onsuccess.facade.ModifyEntityAndFireEventFacade$Proxy$_$$_Weld$EnterpriseProxy$.modifyEntityAndFireEventB() line: not available
entrypoint.web.SystemTestBean.fireSomeEntityChangeBEvent() line: 70
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
com.sun.el.util.ReflectionUtil.invokeMethod(javax.el.ELContext, java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: 181
com.sun.el.parser.AstValue.invoke(com.sun.el.lang.EvaluationContext, java.lang.Class[], java.lang.Object[]) line: 289
com.sun.el.MethodExpressionImpl.invoke(javax.el.ELContext, java.lang.Object[]) line: 304
org.jboss.weld.el.WeldMethodExpression(org.jboss.weld.util.el.ForwardingMethodExpression).invoke(javax.el.ELContext, java.lang.Object[]) line: 40
org.jboss.weld.el.WeldMethodExpression.invoke(javax.el.ELContext, java.lang.Object[]) line: 50
org.jboss.weld.el.WeldMethodExpression(org.jboss.weld.util.el.ForwardingMethodExpression).invoke(javax.el.ELContext, java.lang.Object[]) line: 40
org.jboss.weld.el.WeldMethodExpression.invoke(javax.el.ELContext, java.lang.Object[]) line: 50
javax.faces.event.MethodExpressionActionListener.processAction(javax.faces.event.ActionEvent) line: 149
javax.faces.event.ActionEvent.processListener(javax.faces.event.FacesListener) line: 88
org.primefaces.component.commandbutton.CommandButton(javax.faces.component.UIComponentBase).broadcast(javax.faces.event.FacesEvent) line: 814
org.primefaces.component.commandbutton.CommandButton(javax.faces.component.UICommand).broadcast(javax.faces.event.FacesEvent) line: 300
javax.faces.component.UIViewRoot.broadcastEvents(javax.faces.context.FacesContext, javax.faces.event.PhaseId) line: 790
javax.faces.component.UIViewRoot.processApplication(javax.faces.context.FacesContext) line: 1282
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(javax.faces.context.FacesContext) line: 81
com.sun.faces.lifecycle.InvokeApplicationPhase(com.sun.faces.lifecycle.Phase).doPhase(javax.faces.context.FacesContext, javax.faces.lifecycle.Lifecycle, java.util.ListIterator<javax.faces.event.PhaseListener>) line: 101
com.sun.faces.lifecycle.LifecycleImpl.execute(javax.faces.context.FacesContext) line: 198
org.apache.deltaspike.jsf.impl.listener.request.DeltaSpikeLifecycleWrapper.execute(javax.faces.context.FacesContext) line: 89
org.apache.deltaspike.jsf.impl.listener.request.JsfClientWindowAwareLifecycleWrapper(javax.faces.lifecycle.LifecycleWrapper).execute(javax.faces.context.FacesContext) line: 77
javax.faces.webapp.FacesServlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse) line: 658
io.undertow.servlet.handlers.ServletHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 85
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 62
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 36
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 78
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 131
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 57
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler(io.undertow.security.handlers.AbstractConfidentialityHandler).handleRequest(io.undertow.server.HttpServerExchange) line: 46
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 64
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 60
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 77
io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 50
io.undertow.security.handlers.SecurityInitialHandler(io.undertow.security.handlers.AbstractSecurityContextAssociationHandler).handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 61
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(io.undertow.server.HttpServerExchange, io.undertow.servlet.handlers.ServletChain, io.undertow.servlet.handlers.ServletRequestContext, javax.servlet.ServletRequest, javax.servlet.ServletResponse) line: 284
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(io.undertow.server.HttpServerExchange, io.undertow.servlet.handlers.ServletRequestContext, io.undertow.servlet.handlers.ServletChain, javax.servlet.DispatcherType) line: 263
io.undertow.servlet.handlers.ServletInitialHandler.access$000(io.undertow.servlet.handlers.ServletInitialHandler, io.undertow.server.HttpServerExchange, io.undertow.servlet.handlers.ServletRequestContext, io.undertow.servlet.handlers.ServletChain, javax.servlet.DispatcherType) line: 81
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(io.undertow.server.HttpServerExchange) line: 174
io.undertow.server.Connectors.executeRootHandler(io.undertow.server.HttpHandler, io.undertow.server.HttpServerExchange) line: 202
io.undertow.server.HttpServerExchange$1.run() line: 793
org.xnio.XnioWorker$TaskPool(java.util.concurrent.ThreadPoolExecutor).runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) line: 1142
java.util.concurrent.ThreadPoolExecutor$Worker.run() line: 617
java.lang.Thread.run() line: 745
-- -------------------------
-- MOMENT 3: The breakpoint on eclipselink gets hit (one of the two JTA transactions is getting merged to the server session cahce)
-- -------------------------
3. Then Wildfly invokes the mrege changes into parent for one of the two transactions:
Thread [default task-12] (Suspended (breakpoint at line 371 in org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork))
owns: java.lang.Object (id=624)
owns: java.lang.Object (id=511)
org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.mergeChangesIntoParent() line: 371
org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork(org.eclipse.persistence.internal.sessions.UnitOfWorkImpl).mergeClonesAfterCompletion() line: 3412
org.eclipse.persistence.transaction.JTASynchronizationListener(org.eclipse.persistence.transaction.AbstractSynchronizationListener).afterCompletion(java.lang.Object) line: 217
org.eclipse.persistence.transaction.JTASynchronizationListener.afterCompletion(int) line: 79
com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.afterCompletion(int) line: 96
NOTE:
Without knowing the code that SynchronizationImple.afterCompletion(int) line: 96 has
it would appear that the code might be a FOR loop over some sort afterCompletionSubscriber.
And the bug would be the order by which the subscribers get executed.
namely, it would appear that we are invoking the publish after compliton to CDI EJB observers before
the JTA synchronization to the cache.
com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction(com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator).afterCompletion(int, boolean) line: 545
com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction(com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator).end(boolean) line: 101
com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction(com.arjuna.ats.arjuna.AtomicAction).commit(boolean) line: 162
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate() line: 1200
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple(com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction).commit() line: 126
com.arjuna.ats.jbossatx.jta.TransactionManagerDelegate(com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate).commit() line: 89
org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(javax.transaction.TransactionManager, javax.transaction.Transaction) line: 91
org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(org.jboss.invocation.InterceptorContext, javax.transaction.TransactionManager, org.jboss.as.ejb3.component.EJBComponent) line: 279
org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(org.jboss.invocation.InterceptorContext, org.jboss.as.ejb3.component.EJBComponent, int) line: 344
org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 241
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 41
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 43
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 100
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext$Invocation.proceed() line: 437
org.jboss.as.ejb3.concurrency.ContainerManagedConcurrencyInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 110
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(org.jboss.invocation.InterceptorContext) line: 64
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 66
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 50
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 54
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 64
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext.run() line: 356
org.wildfly.security.manager.WildFlySecurityManager.doChecked(java.security.PrivilegedExceptionAction<T>) line: 636
org.jboss.invocation.AccessCheckingInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext.run() line: 356
org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 80
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ChainedInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.as.ee.component.ViewService$View.invoke(org.jboss.invocation.InterceptorContext) line: 195
org.jboss.as.ee.component.ViewDescription$1.processInvocation(org.jboss.invocation.InterceptorContext) line: 185
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ChainedInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.as.ee.component.ProxyInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) line: 73
wildfly.bug.onsuccess.facade.SomeEntityChangeEventObserverBFacade$$$view12.observeEvent(wildfly.bug.onsuccess.event.SomeEntityChangeBEvent) line: not available
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 436
org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler<T>.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 127
org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 56
org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 100
wildfly.bug.onsuccess.facade.SomeEntityChangeEventObserverBFacade$Proxy$_$$_Weld$EnterpriseProxy$.observeEvent(wildfly.bug.onsuccess.event.SomeEntityChangeBEvent) line: not available
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.weld.injection.VirtualMethodInjectionPoint<T,X>(org.jboss.weld.injection.StaticMethodInjectionPoint<T,X>).invoke(java.lang.Object, java.lang.Object[], java.lang.Class<? extends java.lang.RuntimeException>) line: 88
org.jboss.weld.injection.VirtualMethodInjectionPoint<T,X>(org.jboss.weld.injection.StaticMethodInjectionPoint<T,X>).invoke(java.lang.Object, java.lang.Object, org.jboss.weld.manager.BeanManagerImpl, javax.enterprise.context.spi.CreationalContext<?>, java.lang.Class<? extends java.lang.RuntimeException>) line: 78
org.jboss.weld.injection.MethodInvocationStrategy$SimpleMethodInvocationStrategy.invoke(java.lang.Object, org.jboss.weld.injection.MethodInjectionPoint<?,?>, T, org.jboss.weld.manager.BeanManagerImpl, javax.enterprise.context.spi.CreationalContext<?>) line: 129
org.jboss.weld.event.ObserverMethodImpl<T,X>.sendEvent(T, java.lang.Object, javax.enterprise.context.spi.CreationalContext<?>) line: 309
org.jboss.weld.event.ObserverMethodImpl<T,X>.sendEvent(T) line: 287
org.jboss.weld.event.ObserverMethodImpl<T,X>.notify(T) line: 265
org.jboss.weld.event.DeferredEventNotification$1.execute() line: 69
org.jboss.weld.event.DeferredEventNotification$1(org.jboss.weld.event.DeferredEventNotification$RunInRequest).run() line: 101
org.jboss.weld.event.DeferredEventNotification<T>.run() line: 75
org.jboss.weld.event.TransactionSynchronizedRunnable.afterCompletion(int) line: 54
com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.afterCompletion(int) line: 96
com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction(com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator).afterCompletion(int, boolean) line: 545
com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction(com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator).end(boolean) line: 101
com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction(com.arjuna.ats.arjuna.AtomicAction).commit(boolean) line: 162
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate() line: 1200
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple(com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction).commit() line: 126
com.arjuna.ats.jbossatx.jta.TransactionManagerDelegate(com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate).commit() line: 89
org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(javax.transaction.TransactionManager, javax.transaction.Transaction) line: 91
org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(org.jboss.invocation.InterceptorContext, javax.transaction.TransactionManager, org.jboss.as.ejb3.component.EJBComponent) line: 279
org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(org.jboss.invocation.InterceptorContext, org.jboss.as.ejb3.component.EJBComponent, int) line: 349
org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 241
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 41
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 43
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 100
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(org.jboss.invocation.InterceptorContext) line: 64
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 66
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 50
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 54
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 64
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext.run() line: 356
org.wildfly.security.manager.WildFlySecurityManager.doChecked(java.security.PrivilegedExceptionAction<T>) line: 636
org.jboss.invocation.AccessCheckingInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext.run() line: 356
org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 80
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ChainedInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.as.ee.component.ViewService$View.invoke(org.jboss.invocation.InterceptorContext) line: 195
org.jboss.as.ee.component.ViewDescription$1.processInvocation(org.jboss.invocation.InterceptorContext) line: 185
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ChainedInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.as.ee.component.ProxyInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) line: 73
wildfly.bug.onsuccess.facade.ModifyEntityAndFireEventFacade$$$view1.modifyEntityAndFireEventB() line: not available
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 436
org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler<T>.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 127
org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance(org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance).invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 56
org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 67
org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 100
wildfly.bug.onsuccess.facade.ModifyEntityAndFireEventFacade$Proxy$_$$_Weld$EnterpriseProxy$.modifyEntityAndFireEventB() line: not available
entrypoint.web.SystemTestBean.fireSomeEntityChangeBEvent() line: 70
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
com.sun.el.util.ReflectionUtil.invokeMethod(javax.el.ELContext, java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: 181
com.sun.el.parser.AstValue.invoke(com.sun.el.lang.EvaluationContext, java.lang.Class[], java.lang.Object[]) line: 289
com.sun.el.MethodExpressionImpl.invoke(javax.el.ELContext, java.lang.Object[]) line: 304
org.jboss.weld.el.WeldMethodExpression(org.jboss.weld.util.el.ForwardingMethodExpression).invoke(javax.el.ELContext, java.lang.Object[]) line: 40
org.jboss.weld.el.WeldMethodExpression.invoke(javax.el.ELContext, java.lang.Object[]) line: 50
org.jboss.weld.el.WeldMethodExpression(org.jboss.weld.util.el.ForwardingMethodExpression).invoke(javax.el.ELContext, java.lang.Object[]) line: 40
org.jboss.weld.el.WeldMethodExpression.invoke(javax.el.ELContext, java.lang.Object[]) line: 50
javax.faces.event.MethodExpressionActionListener.processAction(javax.faces.event.ActionEvent) line: 149
javax.faces.event.ActionEvent.processListener(javax.faces.event.FacesListener) line: 88
org.primefaces.component.commandbutton.CommandButton(javax.faces.component.UIComponentBase).broadcast(javax.faces.event.FacesEvent) line: 814
org.primefaces.component.commandbutton.CommandButton(javax.faces.component.UICommand).broadcast(javax.faces.event.FacesEvent) line: 300
javax.faces.component.UIViewRoot.broadcastEvents(javax.faces.context.FacesContext, javax.faces.event.PhaseId) line: 790
javax.faces.component.UIViewRoot.processApplication(javax.faces.context.FacesContext) line: 1282
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(javax.faces.context.FacesContext) line: 81
com.sun.faces.lifecycle.InvokeApplicationPhase(com.sun.faces.lifecycle.Phase).doPhase(javax.faces.context.FacesContext, javax.faces.lifecycle.Lifecycle, java.util.ListIterator<javax.faces.event.PhaseListener>) line: 101
com.sun.faces.lifecycle.LifecycleImpl.execute(javax.faces.context.FacesContext) line: 198
org.apache.deltaspike.jsf.impl.listener.request.DeltaSpikeLifecycleWrapper.execute(javax.faces.context.FacesContext) line: 89
org.apache.deltaspike.jsf.impl.listener.request.JsfClientWindowAwareLifecycleWrapper(javax.faces.lifecycle.LifecycleWrapper).execute(javax.faces.context.FacesContext) line: 77
javax.faces.webapp.FacesServlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse) line: 658
io.undertow.servlet.handlers.ServletHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 85
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 62
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 36
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 78
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 131
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 57
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler(io.undertow.security.handlers.AbstractConfidentialityHandler).handleRequest(io.undertow.server.HttpServerExchange) line: 46
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 64
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 60
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 77
io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 50
io.undertow.security.handlers.SecurityInitialHandler(io.undertow.security.handlers.AbstractSecurityContextAssociationHandler).handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 61
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(io.undertow.server.HttpServerExchange, io.undertow.servlet.handlers.ServletChain, io.undertow.servlet.handlers.ServletRequestContext, javax.servlet.ServletRequest, javax.servlet.ServletResponse) line: 284
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(io.undertow.server.HttpServerExchange, io.undertow.servlet.handlers.ServletRequestContext, io.undertow.servlet.handlers.ServletChain, javax.servlet.DispatcherType) line: 263
io.undertow.servlet.handlers.ServletInitialHandler.access$000(io.undertow.servlet.handlers.ServletInitialHandler, io.undertow.server.HttpServerExchange, io.undertow.servlet.handlers.ServletRequestContext, io.undertow.servlet.handlers.ServletChain, javax.servlet.DispatcherType) line: 81
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(io.undertow.server.HttpServerExchange) line: 174
io.undertow.server.Connectors.executeRootHandler(io.undertow.server.HttpHandler, io.undertow.server.HttpServerExchange) line: 202
io.undertow.server.HttpServerExchange$1.run() line: 793
org.xnio.XnioWorker$TaskPool(java.util.concurrent.ThreadPoolExecutor).runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) line: 1142
java.util.concurrent.ThreadPoolExecutor$Worker.run() line: 617
java.lang.Thread.run() line: 745
4. Finally it merges changes into parent for the second transaction
Thread [default task-12] (Suspended (breakpoint at line 371 in org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork))
owns: java.lang.Object (id=511)
org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.mergeChangesIntoParent() line: 371
org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork(org.eclipse.persistence.internal.sessions.UnitOfWorkImpl).mergeClonesAfterCompletion() line: 3412
org.eclipse.persistence.transaction.JTASynchronizationListener(org.eclipse.persistence.transaction.AbstractSynchronizationListener).afterCompletion(java.lang.Object) line: 217
org.eclipse.persistence.transaction.JTASynchronizationListener.afterCompletion(int) line: 79
com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.afterCompletion(int) line: 96
com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction(com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator).afterCompletion(int, boolean) line: 545
com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction(com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator).end(boolean) line: 101
com.arjuna.ats.internal.jta.transaction.arjunacore.AtomicAction(com.arjuna.ats.arjuna.AtomicAction).commit(boolean) line: 162
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate() line: 1200
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple(com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction).commit() line: 126
com.arjuna.ats.jbossatx.jta.TransactionManagerDelegate(com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate).commit() line: 89
org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(javax.transaction.TransactionManager, javax.transaction.Transaction) line: 91
org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(org.jboss.invocation.InterceptorContext, javax.transaction.TransactionManager, org.jboss.as.ejb3.component.EJBComponent) line: 279
org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(org.jboss.invocation.InterceptorContext, org.jboss.as.ejb3.component.EJBComponent, int) line: 349
org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 241
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 41
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 43
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 100
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(org.jboss.invocation.InterceptorContext) line: 64
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 66
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 50
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 54
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 64
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext.run() line: 356
org.wildfly.security.manager.WildFlySecurityManager.doChecked(java.security.PrivilegedExceptionAction<T>) line: 636
org.jboss.invocation.AccessCheckingInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.InterceptorContext.run() line: 356
org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 80
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ChainedInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.as.ee.component.ViewService$View.invoke(org.jboss.invocation.InterceptorContext) line: 195
org.jboss.as.ee.component.ViewDescription$1.processInvocation(org.jboss.invocation.InterceptorContext) line: 185
org.jboss.invocation.InterceptorContext.proceed() line: 340
org.jboss.invocation.ChainedInterceptor.processInvocation(org.jboss.invocation.InterceptorContext) line: 61
org.jboss.as.ee.component.ProxyInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) line: 73
wildfly.bug.onsuccess.facade.ModifyEntityAndFireEventFacade$$$view1.modifyEntityAndFireEventB() line: not available
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 436
org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler<T>.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 127
org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance(org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance).invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 56
org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object...) line: 67
org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[]) line: 100
wildfly.bug.onsuccess.facade.ModifyEntityAndFireEventFacade$Proxy$_$$_Weld$EnterpriseProxy$.modifyEntityAndFireEventB() line: not available
entrypoint.web.SystemTestBean.fireSomeEntityChangeBEvent() line: 70
sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method]
sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 62
sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 43
java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 498
com.sun.el.util.ReflectionUtil.invokeMethod(javax.el.ELContext, java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: 181
com.sun.el.parser.AstValue.invoke(com.sun.el.lang.EvaluationContext, java.lang.Class[], java.lang.Object[]) line: 289
com.sun.el.MethodExpressionImpl.invoke(javax.el.ELContext, java.lang.Object[]) line: 304
org.jboss.weld.el.WeldMethodExpression(org.jboss.weld.util.el.ForwardingMethodExpression).invoke(javax.el.ELContext, java.lang.Object[]) line: 40
org.jboss.weld.el.WeldMethodExpression.invoke(javax.el.ELContext, java.lang.Object[]) line: 50
org.jboss.weld.el.WeldMethodExpression(org.jboss.weld.util.el.ForwardingMethodExpression).invoke(javax.el.ELContext, java.lang.Object[]) line: 40
org.jboss.weld.el.WeldMethodExpression.invoke(javax.el.ELContext, java.lang.Object[]) line: 50
javax.faces.event.MethodExpressionActionListener.processAction(javax.faces.event.ActionEvent) line: 149
javax.faces.event.ActionEvent.processListener(javax.faces.event.FacesListener) line: 88
org.primefaces.component.commandbutton.CommandButton(javax.faces.component.UIComponentBase).broadcast(javax.faces.event.FacesEvent) line: 814
org.primefaces.component.commandbutton.CommandButton(javax.faces.component.UICommand).broadcast(javax.faces.event.FacesEvent) line: 300
javax.faces.component.UIViewRoot.broadcastEvents(javax.faces.context.FacesContext, javax.faces.event.PhaseId) line: 790
javax.faces.component.UIViewRoot.processApplication(javax.faces.context.FacesContext) line: 1282
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(javax.faces.context.FacesContext) line: 81
com.sun.faces.lifecycle.InvokeApplicationPhase(com.sun.faces.lifecycle.Phase).doPhase(javax.faces.context.FacesContext, javax.faces.lifecycle.Lifecycle, java.util.ListIterator<javax.faces.event.PhaseListener>) line: 101
com.sun.faces.lifecycle.LifecycleImpl.execute(javax.faces.context.FacesContext) line: 198
org.apache.deltaspike.jsf.impl.listener.request.DeltaSpikeLifecycleWrapper.execute(javax.faces.context.FacesContext) line: 89
org.apache.deltaspike.jsf.impl.listener.request.JsfClientWindowAwareLifecycleWrapper(javax.faces.lifecycle.LifecycleWrapper).execute(javax.faces.context.FacesContext) line: 77
javax.faces.webapp.FacesServlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse) line: 658
io.undertow.servlet.handlers.ServletHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 85
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 62
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 36
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 78
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 131
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 57
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler(io.undertow.security.handlers.AbstractConfidentialityHandler).handleRequest(io.undertow.server.HttpServerExchange) line: 46
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 64
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 60
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 77
io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 50
io.undertow.security.handlers.SecurityInitialHandler(io.undertow.security.handlers.AbstractSecurityContextAssociationHandler).handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 61
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.server.handlers.PredicateHandler.handleRequest(io.undertow.server.HttpServerExchange) line: 43
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(io.undertow.server.HttpServerExchange, io.undertow.servlet.handlers.ServletChain, io.undertow.servlet.handlers.ServletRequestContext, javax.servlet.ServletRequest, javax.servlet.ServletResponse) line: 284
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(io.undertow.server.HttpServerExchange, io.undertow.servlet.handlers.ServletRequestContext, io.undertow.servlet.handlers.ServletChain, javax.servlet.DispatcherType) line: 263
io.undertow.servlet.handlers.ServletInitialHandler.access$000(io.undertow.servlet.handlers.ServletInitialHandler, io.undertow.server.HttpServerExchange, io.undertow.servlet.handlers.ServletRequestContext, io.undertow.servlet.handlers.ServletChain, javax.servlet.DispatcherType) line: 81
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(io.undertow.server.HttpServerExchange) line: 174
io.undertow.server.Connectors.executeRootHandler(io.undertow.server.HttpHandler, io.undertow.server.HttpServerExchange) line: 202
io.undertow.server.HttpServerExchange$1.run() line: 793
org.xnio.XnioWorker$TaskPool(java.util.concurrent.ThreadPoolExecutor).runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) line: 1142
java.util.concurrent.ThreadPoolExecutor$Worker.run() line: 617
java.lang.Thread.run() line: 745
{panel}
> Wildfly 10 with eclipselink Onscucess observer gets stale entity
> ----------------------------------------------------------------
>
> Key: WFLY-8954
> URL: https://issues.jboss.org/browse/WFLY-8954
> Project: WildFly
> Issue Type: Bug
> Components: JPA / Hibernate
> Affects Versions: 10.0.0.Final
> Reporter: Nuno Godinho de Matos
> Assignee: Scott Marlow
>
> Hi,
> In widlfly there seems to be an important issue concerning CDI events and observing these events during onsuccess. At least while using eclipselink.
> When using wildfly 10.0.0.Final together with eclipselink, if an application modifies an entity A, fires an event stating entity A has been modified, and an observer consumes this event during transaction success.
> Then the observer will be working with stale entities that do not reflect the modifications done to the entity.
> A sample application for this issue is available in:
> https://github.com/99sono/wildfly10-observe-on-success-stale-entity
> The widlfly configuration xml for the sample application, is available in the application itself, as can be seen in the readme documentation.
> Many thanks for taking a look.
> Kindest regards.
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)
More information about the jboss-jira
mailing list