1 2 Previous Next 24 Replies Latest reply: Apr 13, 2012 9:57 AM by Pierpaolo Piccoli Go to original post RSS
  • 15. Re: Seam Transaction is not active: tx=TransactionImple
    Stuart Douglas Master

    oops, stuffed the formatting:






    If you are using EJB3 and mark your class or method @TransactionAttribute(REQUIRES_NEW) then the transaction and persistence context shouldn't be propagated to method calls on this object. However as the Seam-managed persistence context is propagated to any component within the conversation, it will be propagated to methods marked REQUIRES_NEW. Therefore, if you mark a method REQUIRES_NEW then you should access the entity manager using @PersistenceContext.
  • 16. Re: Seam Transaction is not active: tx=TransactionImple
    Arbi Sookazian Master

    Ok, thx for clarifying, I didn't know that.  Every time you turn around there's just one more rule to remember in Seam!


    So that explains why GKing used @PersistenceContext instead of @In here:


    @Stateful
    @Scope(SESSION)
    @Name("bookingList")
    @Restrict("#{identity.loggedIn}")
    @TransactionAttribute(REQUIRES_NEW)
    public class BookingListAction implements BookingList, Serializable
    {
       private static final long serialVersionUID = 1L;
       
       @PersistenceContext
       private EntityManager em;
       
       @In
       private User user;
       
       @DataModel
       private List<Booking> bookings;
       @DataModelSelection 
       private Booking booking;
       
       @Logger 
       private Log log;
       
       @Factory
       @Observer("bookingConfirmed")
       public void getBookings()
       {
          bookings = em.createQuery("select b from Booking b where b.user.username = :username order by b.checkinDate")
                .setParameter("username", user.getUsername())
                .getResultList();
       }
       
       public void cancel()
       {
          log.info("Cancel booking: #{bookingList.booking.id} for #{user.username}");
          Booking cancelled = em.find(Booking.class, booking.getId());
          if (cancelled!=null) em.remove( cancelled );
          getBookings();
          FacesMessages.instance().add("Booking cancelled for confirmation number #0", booking.getId());
       }
       
       public Booking getBooking()
       {
          return booking;
       }
       
       @Remove
       public void destroy() {}
    }



    And so is that why he used @PersistenceContext exclusively for all SFSBs in that app?


    And that would be probably the only scenario where you would not use @In to inject EntityManager in a Seam app?

  • 17. Re: Seam Transaction is not active: tx=TransactionImple
    Arbi Sookazian Master

    Now that I thought about it, this part is worrysome:



    However as the Seam-managed persistence context is propagated to any component
    within the conversation, it will be propagated to methods marked REQUIRES_NEW.

    Wouldn't it be better if there was a deployment exception or runtime warning or error in this case?  Or does Seam just ignore the TransactionAttributeType completely and treat it as REQUIRED?

  • 18. Re: Seam Transaction is not active: tx=TransactionImple
    Felipe Jaekel Newbie
    <blockquote>
    _Jubril Oyesiji wrote on May 01, 2009 21:24:_<br/>

    I keep getting the following exception when attempting to retrieve data from my Database


    `15:17:30,007 WARN  [JDBCExceptionReporter] SQL Error: 0, SQLState: null
    15:17:30,007 ERROR [JDBCExceptionReporter] Transaction is not active: tx=TransactionImple < ac, BasicAction: -3f57f10b:911:49fb4a4b:3e status: ActionStatus.ABORT_ONLY >; - nested throwable: (javax.resource.ResourceException: Transaction is not active: tx=TransactionImple < ac, BasicAction: -3f57f10b:911:49fb4a4b:3e status: ActionStatus.ABORT_ONLY >)`

    </blockquote>

    I'm using Seam 2.2 with MySQL + JTA, but no EJB, and getting this exception too.

    I've even tried to add @TransactionAttribute(REQUIRES_NEW).

    Any ideas?

    Thanks for any help,
    Felipe
  • 19. Re: Seam Transaction is not active: tx=TransactionImple
    Yan L Newbie

    Hi,


    The answer is in the first reply. You are using a transaction for too long. How long is your treatment ?
    If you read JSR 220 (http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html) you can see that a transaction will never live forever :




    Chapter Timer Service : Transaction
    An enterprise bean typically creates a timer within the scope of a transaction. If the transaction is then
    rolled back, the timer creation is rolled back.

    An enterprise bean typically cancels a timer within a transaction. If the transaction is rolled back, the
    container rescinds the timer cancellation.

    The timeout callback method is typically has transaction attribute REQUIRED or REQUIRES NEW
    (Required or RequiresNew if the deployment descriptor is used to specify the transaction
    attribute). If the transaction is rolled back, the container retries the timeout.


    When you use @TransactionAttribute(REQUIRES NEW) wihtin another transaction the original transaction waits untill the new transaction ends. So if your new transaction lives more than 5 minutes (the default timeout of JBoss) you will have a transaction timeout. If you were using EJB you could managed transaction demarcation with the TransactionAttribute so that your transaction would never live more than 5 minutes.


    The other choice is to extend timeout...

  • 20. Re: Seam Transaction is not active: tx=TransactionImple
    forge yan Newbie

    Today ,I have this problem too.I do this to fix the problem.
    Drop the table ,and Create the table again
    !

  • 21. Re: Seam Transaction is not active: tx=TransactionImple
    Bill Evans Newbie
    Interesting, though not very enlightening thread.  In our system, needless to say, we have the same problem.  However, in my case I have some idea how to recreate:


    1) Issue a set of queries that I know are going to take more than 5 minutes, all within one transaction.  The point at which the query set hangs will be copying to a MySQL TMP data set.

    2) Try to cancel the set of queries:  This is effectively initiated via org.hibernate.Session.cancelQuery method call.

    3) Transaction finally aborts and when it does throws the JDBCExceptionReporter Transaction is not active.

    4) Thereafter, later queries sometimes fail with same error but mostly they work.  Interestingly, the value of BasicAction in the exception is always the same.



    So, my theory is that step 3 somehow renders some re-usable transaction object damaged in some way. Some flag that leaves it in ActionStatus.ABORT_ONLY maybe?  Then it when it gets re-used again it causes the same exception.

    Any comments?


  • 22. Re: Seam Transaction is not active: tx=TransactionImple
    Murali Kumar Newbie

    Anybody solveed this error. Please folks help me to resolve this.

  • 23. Re: Seam Transaction is not active: tx=TransactionImple
    Diego Borda Newbie

    In my experience this is not a hibernate, jboss or MySQL exception (although in some cases it might be, I don't know). This happens to me whenever I have a NullPointerException somewhere in a transaction. My guess would be that the NullPointerException throws the transaction into a not active state.


    I usually print out a couple of method calls and find my NullPointerException.


    Hope this helps someone


    BTW this works for me in SEAM 2.2.0.GA, JBOSS 5.1 and MySQL 5.5.8

  • 24. Re: Seam Transaction is not active: tx=TransactionImple
    Pierpaolo Piccoli Newbie

    I solved by replacing the tag <h: commandLink> with <s: link > in xhtml page

    Don't know why, maybe a phase problem...

     


1 2 Previous Next