Package org.jboss.test.jbossts.taskdefs

Source Code of org.jboss.test.jbossts.taskdefs.TransactionLog

/*
* JBoss, Home of Professional Open Source
* Copyright 2008, 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) 2008,
* @author JBoss Inc.
*/
package org.jboss.test.jbossts.taskdefs;

import com.arjuna.ats.arjuna.common.Uid;
import com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean;
import com.arjuna.ats.arjuna.common.arjPropertyManager;
import com.arjuna.ats.arjuna.exceptions.ObjectStoreException;
import com.arjuna.ats.arjuna.objectstore.RecoveryStore;
import com.arjuna.ats.arjuna.objectstore.StoreManager;
import com.arjuna.ats.arjuna.state.InputObjectState;
import com.arjuna.ats.arjuna.AtomicAction;
import com.arjuna.ats.internal.arjuna.common.UidHelper;

import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Collection;

/**
* Utility class for interaction with a transaction log
*/
public class TransactionLog
{
   /**
    * Default object type for store operations
    */
   public static final String DEFAULT_OBJECT_TYPE = "StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction";

   private RecoveryStore store;

   public TransactionLog(String storeDir, String impleType)
   {
      init(storeDir, impleType);
   }

   private void init(String storeDir, String impleType)
   {
    ObjectStoreEnvironmentBean objectStoreEnvironmentBean = arjPropertyManager.getObjectStoreEnvironmentBean();
    objectStoreEnvironmentBean.setObjectStoreDir(storeDir);

        if (impleType != null)
        {
            try
            {
                Class c = Class.forName(impleType);
                Constructor constructor = c.getConstructor(new Class[] {ObjectStoreEnvironmentBean.class});
               
                store = (RecoveryStore) constructor.newInstance(new Object[] {objectStoreEnvironmentBean});
            }
            catch (final Throwable ex)
            {
                ex.printStackTrace();
            }
        }
        else
            store = StoreManager.getRecoveryStore();
   }

   /**
    * Remove any committed objects from the storer
    * @param objectType the type of objects that should be removed
    * @return the number of objects that were purged
    * @throws ObjectStoreException the store implementation was unable to remove a committed object
    */
   public int clearXids(String objectType) throws ObjectStoreException
   {
      Collection<Uid> uids = getIds(objectType);

      for (Uid uid : uids)
         store.remove_committed(uid, objectType);

      return uids.size();
   }

   public Collection<Uid> getIds(String objectType) throws ObjectStoreException
   {
      return getIds(null, objectType);
   }

   /**
    * Get a list object ids for a given object type
    *
    * @param ids holder for the returned uids
    * @param objectType The type of object to search in the store for
    * @return all objects of the given type
    * @throws ObjectStoreException the store implementation was unable retrieve all types of objects
    */
   public Collection<Uid> getIds(Collection<Uid> ids, String objectType) throws ObjectStoreException
   {
      if (ids == null)
         ids = new ArrayList<Uid> ();


      InputObjectState types = new InputObjectState();

      if (store.allTypes(types))
      {
         String theName;

         try
         {
            boolean endOfList = false;

            while (!endOfList)
            {
               theName = types.unpackString();

               if (theName.compareTo("") == 0)
                  endOfList = true;
               else
               {
                  if (objectType != null && !theName.matches(objectType))
                     continue;

                  InputObjectState uids = new InputObjectState();

                  if (store.allObjUids(theName, uids))
                  {

                      Uid theUid;

                      try
                      {
                          boolean endOfUids = false;

                          while (!endOfUids)
                          {
                              theUid = UidHelper.unpackFrom(uids);

                              if (theUid.equals(Uid.nullUid()))
                                  endOfUids = true;
                              else
                                  ids.add(theUid);
                          }
                      }
                      catch (Exception e)
                      {
                          // end of uids!
                      }
                  }
               }
            }
         }
         catch (Exception e)
         {
            System.err.println(e);

            // end of list!
         }
      }

      return ids;
   }

   public int getStatus(Uid uid)
   {
      AtomicAction action = new AtomicAction(uid);

      action.activate();

      return action.status();
   }
}
TOP

Related Classes of org.jboss.test.jbossts.taskdefs.TransactionLog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.