Essential ATG Dynamo Training - Got atg Certified Relationship Management Developer?
This is not an official ATG site: ATG, Dynamo, Scenario Server and Personalization Server are trademarks or registered trademarks of Art Technology Group
Articles Exercises Resources Links Search

Example for Transaction Demarcation and Batching

package imagescript.atg.db;

import atg.repository.*;
import atg.dtm.*;

import javax.transaction.*;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.ArrayList;

/**
 * @copyright Copyright (c) 2001
 * @company Art Technology Group
 * @author Stuart Jones
 * @version 1.0 ATG Training Supplemental Files
 */

// Just a place holder for your work
class Change
{
  public Change() {}
}


public class TransactionDemo extends atg.nucleus.GenericService
{

  public TransactionDemo()
  {
  }

  TransactionManager mTransactionManager;

  public void setTransactionManager(TransactionManager pTransactionManager)
    {mTransactionManager = pTransactionManager;}

  public TransactionManager getTransactionManager()
    {return mTransactionManager;}

 int getBatchSize()
 {
   return 100;// Whatever you want
 }

 // Returns false on error
 boolean processChange(Change c)
 {
    boolean bResult = false;


    try
    {
      // Do database interaction
      //...
      //...

      // if we get here we are ok
       bResult = true;
    }
    catch(Exception e)
    {
      error(e);
    }
    return bResult;
 }


  int processChanges(ArrayList changes)
  {
    // initialize
    int numProcessed = 0;
    int numCommited = 0;
    int batchSize = getBatchSize();

    TransactionDemarcation td = new TransactionDemarcation();
    TransactionManager mgr = getTransactionManager();

    try
      {
        td.begin(mgr);

        // process each change
        for (Iterator i = changes.iterator(); i.hasNext(); )
          {
            Change c = (Change)i.next();

            // process the change
            if(!processChange(c))
            {
                rollback();
                return numCommited;
            }

            // commit the batch as appropriate
            numProcessed++;
            if (batchSize > 0 && numProcessed % batchSize == 0)
              {
                td.end();
                numCommited = numProcessed;
                td.begin(mgr);
              }
          }
      }
    catch (TransactionDemarcationException tde)
      {
        error(tde);
        rollback();
      }
    finally
      {
        try
          {
            td.end();
            numCommited = numProcessed;
          }
        catch (TransactionDemarcationException tde)
          {
            error(tde);
            rollback();
          }
      }

    return numCommited;
  }

  //-------------------------------------
  /**
   * Mark the current transaction to be rolled
   * back, logging any checked exceptions
   **/
  void rollback()
  {
    if (isLoggingDebug())
      logDebug("rollback()");

    try
      {
        TransactionManager mgr = getTransactionManager();
        if (mgr != null)
          mgr.setRollbackOnly();
      }
    catch (SystemException se)
      {
        error(se);
      }
  }


  private final void error(Throwable pThrowable)
  {
    if (isLoggingError())
      logError(pThrowable);
  }
}


Technical Training Advertise your Training Programs for Free! Los Angeles Web Design Shopping Cart Software  Form a Corporation