[jbossseam-issues] [JBoss JIRA] Updated: (JBSEAM-3151) SpringTransaction : error when using events.raiseTransactionSuccessEvent

Michael Youngstrom (JIRA) jira-events at lists.jboss.org
Wed Jul 9 10:52:26 EDT 2008


     [ http://jira.jboss.com/jira/browse/JBSEAM-3151?page=all ]

Michael Youngstrom updated JBSEAM-3151:
---------------------------------------

    Fix Version/s: 2.1.0.BETA1

> SpringTransaction : error when using events.raiseTransactionSuccessEvent
> ------------------------------------------------------------------------
>
>                 Key: JBSEAM-3151
>                 URL: http://jira.jboss.com/jira/browse/JBSEAM-3151
>             Project: Seam
>          Issue Type: Bug
>          Components: Spring
>    Affects Versions: 2.0.2.SP1
>            Reporter: Gonzalez Adrian
>         Assigned To: Michael Youngstrom
>             Fix For: 2.1.0.BETA1
>
>         Attachments: SpringTransaction.java
>
>
> This issue happens when using the patch http://jira.jboss.com/jira/browse/JBSEAM-2662.
> Spring/Jta Status code are converted fine, but I run now in a bug whenever I call events.raiseTransactionSuccessEvent when using Spring transactionManager.
> To reproduce it, just run spring sample and change in HotelBookingAction the line events.raiseEvent("bookingConfirmed") with events.raiseTransactionSuccessEvent("bookingConfirmed").
> You'll have the following stackTrace [1] when you confirm a booking.
> This is because it's buggy to call data access code in Spring TransactionSynchronization.afterCompletion().
> Quote from Spring javadoc (http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/transaction/support/TransactionSynchronization.html) :
> NOTE: The transaction will have been committed already, but the transactional resources might still be active and accessible. As a consequence,
> any data access code triggered at this point will still "participate" in the original transaction,
> allowing to perform some cleanup (with no commit following anymore!), unless it explicitly declares that it needs to run in a separate transaction.
> Hence: Use PROPAGATION_REQUIRES_NEW for any transactional operation that is called from here.
> I've modified Seam's SpringTransaction synchronization logic to correct this issue.
> Instead of using Spring extension points (TransactionSynchronization), I've just replicated UTTransaction logic (just using
> seam's Synchronizations).
> [1]
> [07/07/08 11:34:03:468 CEST] 00000026 SystemOut O ERROR [TransactionSynchronizationUtils ] user= - TransactionSynchronization.afterCompletion threw exception
> org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.IllegalStateException: Already value [org.springframework.orm.jpa.EntityManagerHolder at 4c464c46] for key [org.jboss.seam.ioc.spring.SeamManagedEntityManagerFactoryBean at 16e616e6] bound to thread [WebContainer : 0]
> Caused by:
> java.lang.IllegalStateException: Already value [org.springframework.orm.jpa.EntityManagerHolder at 4c464c46] for key [org.jboss.seam.ioc.spring.SeamManagedEntityManagerFactoryBean at 16e616e6] bound to thread [WebContainer : 0]
> at org.springframework.transaction.support.TransactionSynchronizationManager.bindResource(TransactionSynchronizationManager.java:163)
> at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:359)
> at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:350)
> at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:262)
> at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:102)
> at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
> at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:630)
> at org.jboss.seam.example.spring.BookingService$$EnhancerByCGLIB$$df01af10.findBookingsByUsername(<generated>)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:618)
> at org.jboss.seam.util.Reflections.invoke(Reflections.java:21)
> at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:31)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
> at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:31)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
> at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:42)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
> at org.jboss.seam.async.AsynchronousInterceptor.aroundInvoke(AsynchronousInterceptor.java:50)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
> at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
> at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:166)
> at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:102)
> at org.jboss.seam.example.spring.BookingService_$$_javassist_3.findBookingsByUsername(BookingService_$$_javassist_3.java)
> at org.jboss.seam.example.spring.BookingListAction.getBookings(Unknown Source)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:618)
> at org.jboss.seam.util.Reflections.invoke(Reflections.java:21)
> at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:31)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
> at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:31)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
> at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:46)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
> at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:42)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
> at org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke(SynchronizationInterceptor.java:32)
> at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
> at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
> at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:166)
> at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:102)
> at org.jboss.seam.example.spring.BookingListAction_$$_javassist_4.getBookings(BookingListAction_$$_javassist_4.java)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:618)
> at org.jboss.seam.util.Reflections.invoke(Reflections.java:21)
> at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:125)
> at org.jboss.seam.Component.callComponentMethod(Component.java:2092)
> at org.jboss.seam.core.Events.raiseEvent(Events.java:84)
> at org.jboss.seam.async.AsynchronousEvent.call(AsynchronousEvent.java:27)
> at org.jboss.seam.async.Asynchronous.executeInContexts(Asynchronous.java:76)
> at org.jboss.seam.async.Asynchronous.execute(Asynchronous.java:45)
> at org.jboss.seam.async.TransactionSuccessEvent.afterCompletion(TransactionSuccessEvent.java:24)
> at Rev7677SpringTransaction$JtaSpringSynchronizationAdapter.afterCompletion(Unknown Source)
> at org.springframework.transaction.support.TransactionSynchronizationUtils.invokeAfterCompletion(TransactionSynchronizationUtils.java:133)
> at org.springframework.transaction.support.AbstractPlatformTransactionManager.invokeAfterCompletion(AbstractPlatformTransactionManager.java:904)
> at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCompletion(AbstractPlatformTransactionManager.java:879)
> at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:707)
> at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)
> at Rev7677SpringTransaction.commit(Unknown Source)
> at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:603)
> at org.jboss.seam.jsf.SeamPhaseListener.handleTransactionsAfterPhase(SeamPhaseListener.java:341)
> at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:241)
> at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:192)
> at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:280)
> at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
> at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:989)
> at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:930)
> at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
> at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
> at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
> at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
> at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
> at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
> at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
> at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:766)
> at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:674)
> at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:498)
> at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:464)
> at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:90)
> at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:744)
> at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1455)
> at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:113)
> at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:454)
> at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:383)
> at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
> at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
> at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
> at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
> at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
> at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195)
> at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743)
> at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list