-
1. Re: javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress in Java EE 5 with Seam-managed transactions and persistence context
hermida.leandro.hermida.gmail.com Oct 9, 2008 6:00 PM (in response to hermida.leandro.hermida.gmail.com)Hello again - just re-reading the Seam references docs carefully and I still don't know what I am doing wrong.
As the docs state if I use an EJB container-managed persistence context (and use @PersistenceContext EntityManager entityManager) the transaction transparently starts and ends around the session bean method call (e.g. registerAction.register())
But if I upgrade my persistence context to Seam-managed as I did above (and use @In EntityManager entityManager) it doesn't seem to do anything no by default transparently? What am I missing?
leandro
-
2. Re: javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress in Java EE 5 with Seam-managed transactions and persistence context
hermida.leandro.hermida.gmail.com Oct 9, 2008 11:04 PM (in response to hermida.leandro.hermida.gmail.com)Hi again everyone,
My central question which I don't think the docs answer is:
Does Seam-managed transactions + SMPC in a Java EE 5 environment transparently start and end transactions by default around the session bean method call like the default behavior in CMPC?
Or do I need to specify things manually?
thanks for any help,
leandro
-
3. Re: javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress in Java EE 5 with Seam-managed transactions and persistence context
hermida.leandro.hermida.gmail.com Oct 10, 2008 11:01 AM (in response to hermida.leandro.hermida.gmail.com)Anyone have any insight on this? I am doing everything by the book and I keep getting:
javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progressanyone... anyone? Bueller? Bueller? :0)
leandro
-
4. Re: javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress in Java EE 5 with Seam-managed transactions and persistence context
gjeudy Oct 10, 2008 2:54 PM (in response to hermida.leandro.hermida.gmail.com)Leandro,
Seam managed transactions always creates 2 transactions per request:
use two transactions per request; the first spans the beginning of the update model values phase until the end of the invoke application phase; the second spans the render response phase
Your session bean if it executes between these phases should always have an active transaction available thanks for Seam.
Can I see the code of RegisterAction ? Please explain when register action is invoked when the No Tx exception is thrown.
-
5. Re: javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress in Java EE 5 with Seam-managed transactions and persistence context
hermida.leandro.hermida.gmail.com Oct 10, 2008 4:02 PM (in response to hermida.leandro.hermida.gmail.com)Hi,
Thanks very much for the help I am completely stuck on this one...
As you have seen in my other post (here) I have a DAO layer using the Generic DAO pattern where I use SMPC in this layer. If I use the DAO layer in my JSF action session bean as shown below:
@Stateless @Name("registerAction") @Scope(ScopeType.PAGE) public class RegisterActionImpl implements RegisterAction { private User registerUser; @In private UserDAO userDAO; public User getRegisterUser() { if (registerUser == null) registerUser = new User(); return registerUser; } public void setRegisterUser(User registerUser) { this.registerUser = registerUser; } public String register() { try { User existingUser = userDAO.findByUsername(registerUser.getUsername()); FacesMessages.instance().add("Username #{registerUser.username} already exists"); return null; } catch (Exception ex) { if (ex instanceof NoResultException) { userDAO.create(registerUser); <-------------- error occurring here! return "/registered.xhtml"; } else { FacesMessages.instance().add("Persistence error: " + ex.getMessage()); return null; } } } }
I get the following error stack trace on form submission (it's very long...):
15:44:36,456 ERROR [application] javax.ejb.EJBTransactionRolledbackException: Error performing 'org.sysfusion.core.session.RegisterAction.register()' --> javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress javax.faces.el.EvaluationException: javax.ejb.EJBTransactionRolledbackException: Error performing 'org.sysfusion.core.session.RegisterAction.register()' --> javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) at javax.faces.component.UICommand.broadcast(UICommand.java:387) at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321) at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296) at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253) at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:44) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:38) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90) 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.web.RedirectFilter.doFilter(RedirectFilter.java:45) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:150) at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267) at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:379) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:506) at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56) 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 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) at java.lang.Thread.run(Thread.java:595) Caused by: javax.ejb.EJBTransactionRolledbackException: Error performing 'org.sysfusion.core.session.RegisterAction.register()' --> javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress at org.jboss.ejb3.tx.Ejb3TxPolicy.handleInCallerTx(Ejb3TxPolicy.java:87) at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:130) at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77) at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:240) at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:210) at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:84) at $Proxy139.register(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.seam.util.Reflections.invoke(Reflections.java:22) at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:31) at org.jboss.seam.intercept.ClientSideInterceptor$1.proceed(ClientSideInterceptor.java:76) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107) at org.jboss.seam.intercept.ClientSideInterceptor.invoke(ClientSideInterceptor.java:54) at org.javassist.tmp.java.lang.Object_$$_javassist_3.register(Object_$$_javassist_3.java) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:329) at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:342) at org.jboss.el.parser.AstPropertySuffix.invoke(AstPropertySuffix.java:58) at org.jboss.el.parser.AstValue.invoke(AstValue.java:96) at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68) at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) ... 51 more Caused by: net.sf.fuge.GenericException: Error performing 'org.sysfusion.core.session.RegisterAction.register()' --> javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress at org.sysfusion.core.session.RegisterActionImpl.register(RegisterActionImpl.java:113) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166) at org.jboss.seam.intercept.EJBInvocationContext.proceed(EJBInvocationContext.java:44) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:77) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.persistence.EntityManagerProxyInterceptor.aroundInvoke(EntityManagerProxyInterceptor.java:29) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.persistence.HibernateSessionProxyInterceptor.aroundInvoke(HibernateSessionProxyInterceptor.java:31) 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.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:50) at sun.reflect.GeneratedMethodAccessor120.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118) at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126) ... 90 more Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:293) at org.jboss.seam.persistence.EntityManagerProxy.flush(EntityManagerProxy.java:92) at net.sf.fuge.GenericDAOSeamJPAImpl.create(GenericDAOSeamJPAImpl.java:69) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166) at org.jboss.seam.intercept.EJBInvocationContext.proceed(EJBInvocationContext.java:44) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:77) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.persistence.EntityManagerProxyInterceptor.aroundInvoke(EntityManagerProxyInterceptor.java:29) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.persistence.HibernateSessionProxyInterceptor.aroundInvoke(HibernateSessionProxyInterceptor.java:31) 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.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:50) at sun.reflect.GeneratedMethodAccessor120.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118) at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126) at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77) at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:240) at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:210) at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:84) at $Proxy132.create(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.seam.util.Reflections.invoke(Reflections.java:22) at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:31) at org.jboss.seam.intercept.ClientSideInterceptor$1.proceed(ClientSideInterceptor.java:76) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107) at org.jboss.seam.intercept.ClientSideInterceptor.invoke(ClientSideInterceptor.java:54) at org.javassist.tmp.java.lang.Object_$$_javassist_4.create(Object_$$_javassist_4.java) at org.sysfusion.core.session.RegisterActionImpl.register(RegisterActionImpl.java:104) ... 121 more
So from the stack trace what looks the most interesting is at the root cause:
Caused by: javax.persistence.TransactionRequiredException: no transaction is in progress at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:293) at org.jboss.seam.persistence.EntityManagerProxy.flush(EntityManagerProxy.java:92) at net.sf.fuge.GenericDAOSeamJPAImpl.create(GenericDAOSeamJPAImpl.java:69) ...
which is the entityManager.flush() method in my Generic DAO layer in GenericDAOSeamJPAImpl.java. Here is the code:
public abstract class GenericDAOSeamJPAImpl<T, ID extends Serializable> implements GenericDAO<T, ID> { private Class<T> entityClass; @In protected javax.persistence.EntityManager entityManager; ... /** * @see net.sf.fuge.GenericDAO#create(T) */ @SuppressWarnings( { "unchecked" }) public T create(final T entity) throws IllegalArgumentException, GenericException { if (entity == null) { throw new IllegalArgumentException(entityClass.getSimpleName() + ".create - 'entity' cannot be null"); } try { entityManager.persist(entity); entityManager.flush(); <------- root error occurring here!!! return entity; } catch (Exception ex) { throw new GenericException(ex); } } ... }
I believe I have a pretty standard DAO layer so what am I doing wrong?
leandro
-
6. Re: javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress in Java EE 5 with Seam-managed transactions and persistence context
hermida.leandro.hermida.gmail.com Oct 10, 2008 4:10 PM (in response to hermida.leandro.hermida.gmail.com)Sorry forgot something that you might find important. The error line in my console just after the whole error stack trace above:
15:56:42,776 ERROR [lifecycle] JSF1054: (Phase ID: INVOKE_APPLICATION 5, View ID: /userRegister.xhtml) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@58b942f7]
-
7. Re: javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress in Java EE 5 with Seam-managed transactions and persistence context
gjeudy Oct 10, 2008 4:40 PM (in response to hermida.leandro.hermida.gmail.com)The error you are hitting is I think due to EJB3 exception handling.
You are catching a NoResultException which is a runtime exception. By default EJB3 handles RuntimeException as system exception which means unrecoverable. The EJB3 container will rollback any active transaction if it sees a RuntimeException thrown out of an EJB3 business method.
What you want to do is wrap the NoResultException and rethrow it as a checked exception. Checked exceptions are treated as ApplicationException and by default the EJB3 container doesnt rollback the transaction but will let the caller handle the exception as it is considered recoverable.
-
8. Re: javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress in Java EE 5 with Seam-managed transactions and persistence context
hermida.leandro.hermida.gmail.com Oct 10, 2008 5:41 PM (in response to hermida.leandro.hermida.gmail.com)Hi,
Gosh I wouldn't have ever seen that... for quite a few of my queries I use getSingleResult() underneath which can return NoResultException and I was expecting that but I was catching it and throwing my checked GenericException(ex) which accidentally extends from RuntimeException so that wasn't helping.
public User findByUsername(final String username) throws GenericException { try { javax.persistence.Query queryObject = entityManager.createNamedQuery("User.findByUsername"); queryObject.setParameter("username", username); Object result = queryObject.getSingleResult(); return (User) result; } catch (Exception ex) { throw new GenericException(ex); } }
By changing my thrown GenericException to extend from Exception instead then it doesn't silently rollback the transaction!
Do you have any advice on Exception design with respect to the Generic DAO pattern I mentioned and in the JSF session beans? It what I am doing (in my DAOs and SBs) orthodox?
thanks a lot!
leandro
-
9. Re: javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress in Java EE 5 with Seam-managed transactions and persistence context
gjeudy Oct 10, 2008 5:52 PM (in response to hermida.leandro.hermida.gmail.com)Exceptions shouldnt be used for workflow control, they should only be used to handle exceptional conditions. If you expect this findByUsername method to fail to find a user on normal workflow condition then my advice is not to use exceptions.
What you could do is swallow the NoResultException and return null from findByUserName. The caller would know that if no user name is found (null returned) it has to create a new user.
-
10. Re: javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress in Java EE 5 with Seam-managed transactions and persistence context
egoosen Jan 9, 2009 8:06 AM (in response to hermida.leandro.hermida.gmail.com)Hi,
I read your other post:
Generic DAO pattern with Seam-managed transactions and SMPC doesn't work...but from this thread it appears that you managed to get it working.
I'm also trying to implement the Generic DAO pattern using SMPC, but I'm getting a ClassCastException here:
public BaseJPADAO() {
this.type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}It appears that I'm not the only one experiencing this problem:
See this threadHere's my code:
public interface BaseDAO<T extends Serializable, PK extends Serializable> {
}public class BaseJPADAO<T extends BaseEntity, PK extends Serializable> implements BaseDAO<T, PK> {
}public interface TblUserDAO extends BaseDAO<TblUser, Integer> {
}public class TblUserJPADAO extends BaseJPADAO<TblUser, Integer> implements TblUserDAO {
}Any help/advice/suggestions?
Regards,
Enrico -
11. Re: javax.ejb.EJBTransactionRolledbackException: javax.persistence.TransactionRequiredException: no transaction is in progress in Java EE 5 with Seam-managed transactions and persistence context
jkronegg Jan 23, 2009 5:58 PM (in response to hermida.leandro.hermida.gmail.com)You should annotate your method by using @Transactional to tell Seam to start a new transaction when calling the method.