Applied Transactional on a view action will cause excption...
hantsy Oct 26, 2011 10:53 AMI want to load Message via viewAction and ...update the view Status of the message, so I added a Transacational on the load method.
@Named("messageAction") @RequestScoped public class MessageAction { private static final Logger log = LoggerFactory .getLogger(MessageAction.class); @Inject EntityManager em; @Inject @Authenticated UserAccount currentUser; private Long messageId; private Message currentMessage; public Long getMessageId() { return messageId; } public void setMessageId(Long messageId) { this.messageId = messageId; } public Message getCurrentMessage() { return currentMessage; } public void setCurrentMessage(Message currentMessage) { this.currentMessage = currentMessage; } @Transactional public void load() { if (log.isDebugEnabled()) { log.debug("call load..."); } this.currentMessage = em.find(Message.class, this.messageId); this.currentMessage.addReadStatus(currentUser, new MessageReadStatus( this.currentMessage, currentUser, new Date())); this.currentMessage = em.merge(this.currentMessage); } }
It will throw exception.
java.lang.IllegalStateException: Could not commit transaction at org.jboss.seam.faces.transaction.TransactionPhaseListener.commitOrRollback(TransactionPhaseListener.java:137) at org.jboss.seam.faces.transaction.TransactionPhaseListener.commitOrRollback(TransactionPhaseListener.java:116) at org.jboss.seam.faces.transaction.TransactionPhaseListener.handleTransactionsAfterPhase(TransactionPhaseListener.java:94) at org.jboss.seam.faces.transaction.TransactionPhaseListener.afterPhase(TransactionPhaseListener.java:71) at org.jboss.seam.faces.event.DelegatingPhaseListener.afterPhase(DelegatingPhaseListener.java:51) at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) at org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:65) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) at org.jboss.solder.servlet.event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:74) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:118) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:139) at org.jboss.as.web.NamingValve.invoke(NamingValve.java:57) at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:49) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:154) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:952) at java.lang.Thread.run(Thread.java:662) Caused by: javax.transaction.RollbackException: Could not commit transaction. at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1171) at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:119) at org.jboss.seam.transaction.UTTransaction.commit(UTTransaction.java:61) at org.jboss.seam.transaction.DefaultSeamTransaction.commit(DefaultSeamTransaction.java:91) at org.jboss.seam.faces.transaction.TransactionPhaseListener.commitOrRollback(TransactionPhaseListener.java:124) ... 35 more Caused by: javax.persistence.PersistenceException: error during managed flush at org.hibernate.ejb.AbstractEntityManagerImpl$CallbackExceptionMapperImpl.mapManagedFlushFailure(AbstractEntityManagerImpl.java:1459) at org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorImpl.beforeCompletion(SynchronizationCallbackCoordinatorImpl.java:109) at org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization.beforeCompletion(RegisteredSynchronization.java:54) at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:97) at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:274) at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:94) at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:159) at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1159) ... 39 more Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [com.telopsys.siorc.model.Message] during update time for groups [javax.validation.groups.Default, ] List of constraint violations:[ ConstraintViolationImpl{interpolatedMessage='不能为空', propertyPath=messageId, rootBeanClass=class com.telopsys.siorc.model.Message, messageTemplate='{org.hibernate.validator.constraints.NotEmpty.message}'} ] at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:158) at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreUpdate(BeanValidationEventListener.java:101) at org.hibernate.action.internal.EntityUpdateAction.preUpdate(EntityUpdateAction.java:200) at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:88) at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:273) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:265) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:187) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:336) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1073) at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:318) at org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorImpl.beforeCompletion(SynchronizationCallbackCoordinatorImpl.java:104) ... 45 more