[jboss-dev-forums] [Design of JBossCache] - WARN message if tx is not ACTIVE or PREPARING

bstansberry@jboss.com do-not-reply at jboss.com
Tue Feb 20 17:37:44 EST 2007


CacheImpl.getCurrentTransaction() logs a WARN if it finds a tx associated with the thread that isn't ACTIVE or PREPARING.

Found at least one use case where this isn't valid.  If a user does some sort of bulk update operation on entities (e.g. 'delete from Customer customer where customer.credit < :creditScore'), as part of afterCompletion() processing Hibernate removes all instances of the entity class.  In this case the tx is Status.COMMITTED, leading to a spurious WARN.

Ways to deal with this:

1) Work around the Hibernate usage.  In the integration code, these calls go through one method; here we check for a COMMITTED tx and suspend it before calling into JBC (not sure if you can suspend a committed tx).  Ugly.

2) Don't warn if the tx is COMMITTED; getCurrentTransaction() just returns null.  If a user wants to invoke on the cache as part of afterCompletion() work, there's nothing inherently wrong with that; it just means the call will not be associated with the tx.

3) Get out of the business of this WARN altogether.  If a user wants to invoke on the cache as part of a rollback, let them.  (I think this deserves the WARN, but I throw it out for completeness.)

My vote's for #2.  Thoughts?

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4019576#4019576

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4019576



More information about the jboss-dev-forums mailing list