Clover coverage report -
Coverage timestamp: Thu Jul 5 2007 20:02:32 EDT
file stats: LOC: 95   Methods: 6
NCLOC: 68   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
PojoTxSynchronizationHandler.java 100% 85.7% 100% 89.7%
coverage coverage
 1    /*
 2    * JBoss, Home of Professional Open Source
 3    *
 4    * Distributable under LGPL license.
 5    * See terms of license at gnu.org.
 6    */
 7   
 8    package org.jboss.cache.pojo.interceptors;
 9   
 10    import org.apache.commons.logging.Log;
 11    import org.apache.commons.logging.LogFactory;
 12    import org.jboss.cache.pojo.PojoCacheException;
 13    import org.jboss.cache.pojo.util.MethodCall;
 14   
 15    import javax.transaction.Status;
 16    import javax.transaction.Synchronization;
 17    import java.util.ArrayList;
 18    import java.util.List;
 19   
 20    /**
 21    * Handling the rollback operation for PojoCache level, specifically interceptor add/remove, etc.
 22    *
 23    * @author Ben Wang
 24    * @version $Id: PojoTxSynchronizationHandler.java,v 1.1 2007/05/30 06:08:02 jgreene Exp $
 25    */
 26   
 27    class PojoTxSynchronizationHandler implements Synchronization
 28    {
 29    private static Log log = LogFactory.getLog(PojoTxSynchronizationHandler.class.getName());
 30    private List undoList_ = new ArrayList();
 31   
 32  3208 PojoTxSynchronizationHandler()
 33    {
 34    }
 35   
 36  3165 public void beforeCompletion()
 37    {
 38    // Not interested
 39    }
 40   
 41  3208 public void afterCompletion(int status)
 42    {
 43  3208 try
 44    {
 45  3208 switch (status)
 46    {
 47  3155 case Status.STATUS_COMMITTED:
 48  3155 break;
 49  10 case Status.STATUS_MARKED_ROLLBACK:
 50  43 case Status.STATUS_ROLLEDBACK:
 51  53 log.debug("Running Pojo rollback phase");
 52  53 runRollbackPhase();
 53  53 log.debug("Finished rollback phase");
 54  53 break;
 55   
 56  0 default:
 57  0 throw new IllegalStateException("illegal status: " + status);
 58    }
 59    }
 60    finally
 61    {
 62  3208 resetUndoOp();
 63    }
 64    }
 65   
 66  53 private void runRollbackPhase()
 67    {
 68    // Rollback the pojo interceptor add/remove
 69  53 for (int i = (undoList_.size() - 1); i >= 0; i--)
 70    {
 71  158 MethodCall mc = (MethodCall) undoList_.get(i);
 72  158 try
 73    {
 74  158 mc.invoke();
 75    }
 76    catch (Throwable t)
 77    {
 78  0 throw new PojoCacheException(
 79    "PojoTxSynchronizationHandler.runRollbackPhase(): error: " + t, t);
 80    }
 81    }
 82    }
 83   
 84  15675 public void addToList(MethodCall mc)
 85    {
 86  15675 undoList_.add(mc);
 87    }
 88   
 89  3208 public void resetUndoOp()
 90    {
 91  3208 undoList_.clear();
 92  3208 PojoTxUndoSynchronizationInterceptor.reset();
 93    }
 94    }
 95