package net.ftlines.blog.cdidemo.web; import java.io.Serializable; import javax.enterprise.context.Conversation; import javax.enterprise.context.ConversationScoped; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import javax.persistence.FlushModeType; @ConversationScoped public class UserAction implements Serializable { @Inject Conversation conversation; @Inject EntityManager em; public UserAction begin() { if (conversation.isTransient()) { conversation.begin(); } if (em.getTransaction().isActive()) { em.getTransaction().commit(); } em.setFlushMode(FlushModeType.COMMIT); return this; } public UserAction apply() { EntityTransaction txn = em.getTransaction(); txn.begin(); try { em.flush(); } catch (RuntimeException e) { txn.rollback(); throw e; } txn.commit(); return this; } public UserAction undo() { em.clear(); return this; } }