Package com.arjuna.mwlabs.wst.at.participants

Source Code of com.arjuna.mwlabs.wst.at.participants.VolatileTwoPhaseCommitParticipant

/*
* 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) 2002, 2003, 2004,
*
* Arjuna Technologies Limited,
* Newcastle upon Tyne,
* Tyne and Wear,
* UK.
*
* $Id: VolatileTwoPhaseCommitParticipant.java,v 1.1.2.2 2004/08/09 12:34:24 nmcl Exp $
*/

package com.arjuna.mwlabs.wst.at.participants;

import com.arjuna.wst.Volatile2PCParticipant;

import com.arjuna.mw.wscf.model.twophase.common.*;
import com.arjuna.mw.wscf.model.twophase.participants.*;
import com.arjuna.mw.wscf.model.twophase.exceptions.*;

import com.arjuna.mw.wscf.exceptions.*;

import com.arjuna.mw.wsas.exceptions.SystemException;
import com.arjuna.mw.wsas.exceptions.WrongStateException;

/**
* @author Mark Little (mark.little@arjuna.com)
* @version $Id: VolatileTwoPhaseCommitParticipant.java,v 1.1.2.2 2004/08/09
*          12:34:24 nmcl Exp $
* @since 1.0.
*/

public class VolatileTwoPhaseCommitParticipant implements Synchronization
{

  public VolatileTwoPhaseCommitParticipant (Volatile2PCParticipant resource)
  {
    _resource = resource;
  }

  /**
   * The transaction that the instance is enrolled with is about to commit.
   *
   * @exception SystemException
   *                Thrown if any error occurs. This will cause the
   *                transaction to roll back.
   */

  public void beforeCompletion () throws SystemException
  {
    try
    {
      if (_resource != null)
      {
        // com.arjuna.mw.wst.vote.Vote vt = _resource.prepare();
        com.arjuna.wst.Vote vt = _resource.prepare();

        if (vt instanceof com.arjuna.wst.ReadOnly)
          _readonly = true;
        else
        {
          if (vt instanceof com.arjuna.wst.Prepared)
          {
            // do nothing
          }
          else
            throw new SystemException();
        }
      }
      else
        throw new SystemException();
    }
    catch (SystemException ex)
    {
      throw ex;
    }
    catch (Exception ex)
    {
      throw new SystemException(ex.toString());
    }
  }

  /**
   * The transaction that the instance is enrolled with has completed and the
   * state in which is completed is passed as a parameter.
   *
   * @param CompletionStatus
   *            cs The state in which the transaction completed.
   *
   * @exception SystemException
   *                Thrown if any error occurs. This has no affect on the
   *                outcome of the transaction.
   */

  public void afterCompletion (int status) throws SystemException
  {
    if (!_readonly)
    {
      try
      {
        switch (status)
        {
        case CoordinationResult.CONFIRMED:
          confirm();
          break;
        default:
          cancel();
          break;
        }
      }
      catch (SystemException ex)
      {
        throw ex;
      }
      catch (Exception ex)
      {
        throw new SystemException(ex.toString());
      }
    }
  }

  private final void confirm () throws InvalidParticipantException,
      WrongStateException, HeuristicHazardException,
      HeuristicMixedException, HeuristicCancelException, SystemException
  {
    if (_resource != null)
    {
      try
      {
        _resource.commit();
      }
      // catch (com.arjuna.mw.wst.exceptions.WrongStateException ex)
      catch (com.arjuna.wst.WrongStateException ex)
      {
        throw new WrongStateException(ex.toString());
      }
      /*
       * catch (com.arjuna.mw.wst.exceptions.HeuristicHazardException ex) {
       * throw new HeuristicHazardException(ex.toString()); } catch
       * (com.arjuna.mw.wst.exceptions.HeuristicMixedException ex) { throw
       * new HeuristicMixedException(ex.toString()); } catch
       * (com.arjuna.mw.wst.exceptions.HeuristicRollbackException ex) {
       * throw new HeuristicCancelException(ex.toString()); }
       */
      // catch (com.arjuna.mw.wst.exceptions.SystemException ex)
      catch (com.arjuna.wst.SystemException ex)
      {
        throw new SystemException(ex.toString());
      }
    }
    else
      throw new InvalidParticipantException();
  }

  private final void cancel () throws InvalidParticipantException,
      WrongStateException, HeuristicHazardException,
      HeuristicMixedException, HeuristicConfirmException, SystemException
  {
    if (_resource != null)
    {
      try
      {
        _resource.rollback();
      }
      // catch (com.arjuna.mw.wst.exceptions.WrongStateException ex)
      catch (com.arjuna.wst.WrongStateException ex)
      {
        throw new WrongStateException(ex.toString());
      }
      /*
       * catch (com.arjuna.mw.wst.exceptions.HeuristicHazardException ex) {
       * throw new HeuristicHazardException(ex.toString()); } catch
       * (com.arjuna.mw.wst.exceptions.HeuristicMixedException ex) { throw
       * new HeuristicMixedException(ex.toString()); } catch
       * (com.arjuna.mw.wst.exceptions.HeuristicCommitException ex) {
       * throw new HeuristicConfirmException(ex.toString()); }
       */
      // catch (com.arjuna.mw.wst.exceptions.SystemException ex)
      catch (com.arjuna.wst.SystemException ex)
      {
        throw new SystemException(ex.toString());
      }
    }
    else
      throw new InvalidParticipantException();
  }

  private Volatile2PCParticipant _resource = null;

  private boolean _readonly = false;

}
TOP

Related Classes of com.arjuna.mwlabs.wst.at.participants.VolatileTwoPhaseCommitParticipant

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.