/*
 * 
 * Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * The contents of this file are subject to the Sun Community Source
 * License v3.0/Jini Technology Specific Attachment v 1.0 (the
 * "License"). You may not use this file except in compliance with the
 * License. You may obtain a copy of the License at
 * http://wwws.sun.com/software/jini/licensing/SCSL3_JiniTSA1.html.
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 * the License for the specific language governing rights and limitations
 * under the License.
 * 
 * The Reference Code is Jini Technology Core Platform code, v2.0. The
 * Developer of the Reference Code is Sun Microsystems, Inc.
 * 
 * Contributor(s): Sun Microsystems, Inc.
 * 
 * The contents of this file comply with the Jini Technology Core
 * Platform Compatibility Kit, v2.0A.
 * 
 * Tester(s): Sun Microsystems, Inc.
 * 
 * Test Platform(s):
 * Java 2 SDK, Standard Edition, Version 1.4.2_03 for Solaris(TM)SPARC/x86
 * Java 2 SDK, Standard Edition, Version 1.4.2_03 for Linux (Intel x86)
 * Java 2 SDK, Standard Edition, Version 1.4.2_03 for Windows (Intel Platform)
 * 
 */
package com.sun.jini.outrigger;

/**
 * This interface is implemented by objects that represent operations
 * undertaken under a transaction.  These objects are governed by
 * a <code>TransactableMgr</code> object that manages the overall
 * transaction's state in this space.  The set of <code>Transactable</code>
 * objects managed by a <code>TransactableMgr</code> object constitute
 * the set of operations made under the transaction.
 *
 * @author Sun Microsystems, Inc.
 *
 * @see TransactableMgr
 */
interface Transactable
    extends net.jini.core.transaction.server.TransactionConstants
{
    /**
     * Prepare to commit this object's part of the transaction.  Return
     * the prepare's status.
     *
     * @see TransactableMgr#prepare
     */
    int prepare(TransactableMgr mgr, OutriggerServerImpl space);

    /**
     * Commit this object's part of the transaction.  The
     * <code>space</code> is the <code>OutriggerServerImpl</code> on
     * which the operation happens -- some commit operations have
     * space-wide side effects (for example, a commit of a
     * <code>write</code> operation can cause event notifications for
     * clients registered under the transaction's parent).
     */
    void commit(TransactableMgr mgr, OutriggerServerImpl space);

    /**
     * Abort this object's part of the transaction.
     */
    void abort(TransactableMgr mgr, OutriggerServerImpl space);
}
