Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2006, Red Hat Middleware LLC, and individual contributors
   * as indicated by the @author tags.
   * See the copyright.txt in the distribution for a
   * full listing of individual contributors.
   * This copyrighted material is made available to anyone wishing to use,
   * modify, copy, or redistribute it subject to the terms and conditions
   * of the GNU Lesser General Public License, v. 2.1.
  * This program is distributed in the hope that it will be useful, but WITHOUT A
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  * You should have received a copy of the GNU Lesser General Public License,
  * v.2.1 along with this distribution; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  * MA  02110-1301, USA.
  *
  * (C) 2005-2006,
  * @author JBoss Inc.
  */
 /*
  * Copyright (C) 1999-2001 by HP Bluestone Software, Inc. All rights Reserved.
  *
  * HP Arjuna Labs,
  * Newcastle upon Tyne,
  * Tyne and Wear,
  * UK.
  *
  * $Id: AtomicActionRecoveryModule.java 2342 2006-03-30 13:06:17Z  $
  */
 
 package com.arjuna.ats.internal.arjuna.recovery ;
 
 
This class is a plug-in module for the recovery manager. It is responsible for recovering failed AtomicAction transactions.
 
 
 public class AtomicActionRecoveryModule implements RecoveryModule
 {
    {
        if (..isDebugEnabled()) {
            ..debug("AtomicActionRecoveryModule created");
        }
 
       if ( == null)
       {
           = StoreManager.getRecoveryStore();
       }
 
    }

   
This is called periodically by the RecoveryManager
 
    public void periodicWorkFirstPass()
    {
       // Transaction type
       boolean AtomicActions = false ;
 
       // uids per transaction type
       InputObjectState aa_uids = new InputObjectState() ;
 
       try
       {
 	  if (..isDebugEnabled()) {
           ..debug("AtomicActionRecoveryModule first pass");
       }
 
 	  AtomicActions = .allObjUidsaa_uids );
 
       }
       catch ( ObjectStoreException ex ) {
       }
 
       if ( AtomicActions )
       {
           = processTransactionsaa_uids ) ;
      }
   }
   public void periodicWorkSecondPass()
   {
       if (..isDebugEnabled()) {
           ..debug("AtomicActionRecoveryModule second pass");
       }
       processTransactionsStatus() ;
   }
    protected AtomicActionRecoveryModule (String type)
    {
       if (..isDebugEnabled()) {
           ..debug("AtomicActionRecoveryModule created");
       }
      if ( == null)
      {
          = StoreManager.getRecoveryStore();
      }
       = type;
    }
   private void doRecoverTransactionUid recoverUid )
   {
      boolean commitThisTransaction = true ;
      // Retrieve the transaction status from its original process.
      int theStatus = .getTransactionStatusrecoverUid ) ;
      boolean inFlight = isTransactionInMidFlighttheStatus ) ;
      String Status = ActionStatus.stringFormtheStatus ) ;
      if (..isDebugEnabled()) {
          ..debug("transaction type is " +  + " uid is " +
                  recoverUid.toString() + "\n ActionStatus is " + Status +
                  " in flight is " + inFlight);
      }
      if ( ! inFlight )
      {
         try
         {
            RecoverAtomicAction rcvAtomicAction =
               new RecoverAtomicActionrecoverUidtheStatus ) ;
            rcvAtomicAction.replayPhase2() ;
         }
         catch ( Exception ex ) {
             ..warn_recovery_AtomicActionRecoveryModule_2(recoverUidex);
         }
      }
   }
   private boolean isTransactionInMidFlightint status )
   {
      boolean inFlight = false ;
      switch ( status )
      {
         // these states can only come from a process that is still alive
         case .    :
         case . :
         case .  :
         case . :
         case .   :
         case .   :
            inFlight = true ;
            break ;
         // the transaction is apparently still there, but has completed its
         // phase2. should be safe to redo it.
         case .  :
         case .   :
         case .    :
         case .   :
         case .    :
         case . :
            inFlight = false ;
            break ;
         // this shouldn't happen
         case . :
         default:
            inFlight = false ;
      }
      return inFlight ;
   }
   {
      Vector uidVector = new Vector() ;
      if (..isDebugEnabled()) {
          ..debug("processing " + 
                  + " transactions");
      }
      Uid theUid = null;
      boolean moreUids = true ;
      while (moreUids)
      {
         try
         {
             theUid = UidHelper.unpackFrom(uids);
            if (theUid.equals( Uid.nullUid() ))
            {
               moreUids = false;
            }
            else
            {
               Uid newUid = new UidtheUid ) ;
	       if (..isDebugEnabled()) {
               ..debug("found transaction " + newUid);
           }
               uidVector.addElementnewUid ) ;
            }
         }
         catch ( Exception ex )
         {
            moreUids = false;
         }
      }
      return uidVector ;
   }
   private void processTransactionsStatus()
   {
      // Process the Vector of transaction Uids
      Enumeration transactionUidEnum = .elements() ;
      while ( transactionUidEnum.hasMoreElements() )
      {
         Uid currentUid = (UidtransactionUidEnum.nextElement();
         try
         {
            if ( .currentStatecurrentUid ) != . )
            {
               doRecoverTransactioncurrentUid ) ;
            }
         }
         catch ( ObjectStoreException ex )
         {
         }
      }
   }
   // 'type' within the Object Store for AtomicActions.
   private String _transactionType = new AtomicAction().type() ;
   // Array of transactions found in the object store of the
   // AtomicAction type.
   private Vector _transactionUidVector = null ;
   // Reference to the Object Store.
   private static RecoveryStore _recoveryStore = null ;
   // This object manages the interface to all TransactionStatusManagers
   // processes(JVMs) on this system/node.
New to GrepCode? Check out our FAQ X