2 Replies Latest reply on Jun 29, 2006 1:00 AM by smajima

    HELP rollback doesn't work

    smajima

      I try to rollback so that I write small program to check it.
      But it doesn't work. The data is stored in DB. Seam is 1.0.0.CR3, JBOSS is 4.0.4.GA and MySQL 4.0.16.

      I find the word rollback in server.log but it doesn't roll back.

      Any message and advice is helpful.

      put the lines below in faces-config.xml

      <lifcycle>
       <phase-listner>org.jboss.seam.jsf.SeamExtendedManagedPersistencePhaseListner
       </phase-linstner>
      </lifecycle>
      

      and
      <filter>
       <filter-name>Seam Exception Filter</filter-name>
       <filter-class>org.jboss.seam.servlet.SeamExceptionFilter</filter-class>
      </filter>
      
      <filter-mapping>
       <filter-name>Seam Exception Filter</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping>
      


      in web.xml

      code is
      package transaction.action;
      
      import javax.annotation.Resource;
      import javax.ejb.SessionContext;
      import javax.ejb.Stateless;
      import javax.ejb.TransactionAttribute;
      import javax.ejb.TransactionAttributeType;
      import javax.persistence.EntityManager;
      import javax.persistence.PersistenceContext;
      
      import org.jboss.seam.annotations.Name;
      
      import transaction.entity.Customer;
      
      @Stateless
      @Name("saveDataAction")
      public class SaveDataAction implements SaveData {
      
       @PersistenceContext
       EntityManager em;
      
       @Resource
       SessionContext ctx;
      
       @TransactionAttribute(TransactionAttributeType.REQUIRED)
       public void storeData() {
       Customer customer = new Customer();
       int value = (int)(100 * Math.random());
       customer.setFirstName("SUSUMU" + String.valueOf(value));
       customer.setLastName("MAJIMA" + String.valueOf(value));
      
       em.persist(customer);
      
       ctx.setRollbackOnly();
      
       }
      
      }
      


      server.log is

      2006-06-29 09:10:41,422 DEBUG [org.hibernate.impl.SessionImpl] opened session at timestamp: 4716707189825536
      2006-06-29 09:10:41,422 DEBUG [org.hibernate.jdbc.JDBCContext] TransactionFactory reported no active transaction; Synchronization not registered
      2006-06-29 09:10:41,422 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl] Looking for a JTA transaction to join
      2006-06-29 09:10:41,437 DEBUG [org.hibernate.jdbc.JDBCContext] successfully registered Synchronization
      2006-06-29 09:10:41,437 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl] Looking for a JTA transaction to join
      2006-06-29 09:10:41,437 DEBUG [org.hibernate.ejb.AbstractEntityManagerImpl] Transaction already joined
      2006-06-29 09:10:41,796 DEBUG [org.hibernate.event.def.AbstractSaveEventListener] executing identity-insert immediately
      2006-06-29 09:10:41,796 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
      2006-06-29 09:10:41,796 DEBUG [org.hibernate.jdbc.ConnectionManager] opening JDBC connection
      2006-06-29 09:10:41,796 DEBUG [org.hibernate.SQL] insert into CUSTOMER (FIRSTNAME, LASTNAME) values (?, ?)
      2006-06-29 09:10:41,827 DEBUG [org.hibernate.id.IdentifierGeneratorFactory] Natively generated identity: 27
      2006-06-29 09:10:41,827 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
      2006-06-29 09:10:41,827 DEBUG [org.hibernate.jdbc.ConnectionManager] aggressively releasing JDBC connection
      2006-06-29 09:10:41,827 DEBUG [org.hibernate.jdbc.ConnectionManager] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
      2006-06-29 09:10:41,858 DEBUG [org.jboss.seam.util.Naming] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
      2006-06-29 09:10:41,858 DEBUG [org.jboss.seam.util.Naming] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
      2006-06-29 09:10:41,858 DEBUG [org.jboss.seam.jsf.SeamExtendedManagedPersistencePhaseListener] rolling back transaction after phase: INVOKE_APPLICATION(5)
      2006-06-29 09:10:41,858 DEBUG [org.jboss.seam.util.Naming] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
      2006-06-29 09:10:41,874 DEBUG [org.hibernate.jdbc.JDBCContext] TransactionFactory reported no active transaction; Synchronization not registered
      2006-06-29 09:10:41,874 DEBUG [org.hibernate.jdbc.JDBCContext] TransactionFactory reported no active transaction; Synchronization not registered
      2006-06-29 09:10:41,874 DEBUG [org.hibernate.jdbc.JDBCContext] TransactionFactory reported no active transaction; Synchronization not registered
      2006-06-29 09:10:41,874 DEBUG [org.jboss.ejb3.entity.ManagedEntityManagerFactory] ************** closing entity managersession **************
      2006-06-29 09:10:41,874 DEBUG [org.hibernate.jdbc.JDBCContext] TransactionFactory reported no active transaction; Synchronization not registered
      2006-06-29 09:10:41,874 DEBUG [org.jboss.seam.util.Naming] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
      2006-06-29 09:10:41,874 DEBUG [org.jboss.seam.util.Naming] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
      2006-06-29 09:10:41,874 DEBUG [org.jboss.seam.jsf.SeamExtendedManagedPersistencePhaseListener] beginning transaction prior to phase: RENDER_RESPONSE(6)
      2006-06-29 09:10:41,874 DEBUG [org.jboss.seam.util.Naming] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
      2006-06-29 09:10:41,874 DEBUG [org.jboss.seam.Component] instantiating Seam component: facesMessages
      2006-06-29 09:10:41,874 DEBUG [org.jboss.seam.core.Manager] Discarding conversation state: 2
      2006-06-29 09:10:41,874 DEBUG [org.jboss.seam.contexts.Lifecycle] flushing page context
      2006-06-29 09:10:41,889 DEBUG [org.jboss.seam.util.Naming] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
      2006-06-29 09:10:41,889 DEBUG [org.jboss.seam.jsf.SeamExtendedManagedPersistencePhaseListener] committing transaction after phase: RENDER_RESPONSE(6)
      2006-06-29 09:10:41,889 DEBUG [org.jboss.seam.util.Naming] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
      2006-06-29 09:10:41,889 DEBUG [org.jboss.seam.contexts.Lifecycle] After render response, destroying contexts
      2006-06-29 09:10:41,889 DEBUG [org.jboss.seam.contexts.Lifecycle] destroying event context
      2006-06-29 09:10:41,889 DEBUG [org.jboss.seam.contexts.Contexts] destroying: org.jboss.seam.core.manager
      2006-06-29 09:10:41,889 DEBUG [org.jboss.seam.contexts.Lifecycle] destroying conversation context
      2006-06-29 09:10:41,889 DEBUG [org.jboss.seam.contexts.Contexts] destroying: facesMessages
      2006-06-29 09:10:41,889 DEBUG [org.jboss.seam.contexts.Lifecycle] flushing server-side conversation context
      2006-06-29 09:10:41,889 DEBUG [org.jboss.seam.contexts.Lifecycle] <<< End web request
      2006-06-29 09:10:41,889 DEBUG [org.jboss.seam.util.Naming] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}

      Thanks in advance

      Susumu


        • 1. Re: HELP rollback doesn't work

          I doubt your problem is version related, but I am curious why people are still using CR3 when GA 1.0.1 is out.

          More likely the table type you are selecting in MySQL. If I remember correctly I had this problem before I switched to PostgreSQL.

          MyISAM which is the default table type does not support transactions. It took quite a while for me to figure this out. Use one of these BDB, Gemini, and InnoDB.

          I just upgrade and it was fairly painless.

          I just had to take out a few config parameter from the web.xml and put them is the components.xml.

          And clean up a few stateless bean that had @Create, @Remove, or @Destroy annotations.

          CR3 was ok with this, but I got a clear error message on startup and fixed these easily.

          • 2. Re: HELP rollback doesn't work
            smajima

            Thanks a lot, Jason.

            I changed table type to InnoDB. Rollback did work.

            Susumu