.
*/
/** ***********************************************************
*
*
* PURPOSE:
*
*
* COMMENTS:
*
*
*********************************************************** */
package rasj.odmg;
import org.odmg.*;
import rasj.*;
import rasj.global.*;
import rasj.clientcommhttp.*;
/**
* This class implements the ODMG Transaction interface.
*
* @version 1.0 (07-Apr-2000)
*
* @author Peter Zoller
*/
public class RasTransaction implements Transaction
{
/**
* This variable holds a reference to the RasODMGImplementation object which created
* this RasDatabase object
*/
//private RasODMGImplementation rasImplementation=null;
private RasImplementationInterface rasImplementation=null;
/**
* local state keeper whether TA is open;
* serves to optimize OQL queries: special method isOpenLocally() does not require server calls
*/
private boolean isOpenTA = false;
public RasTransaction(RasImplementationInterface imp)
{
rasImplementation=imp;
isOpenTA = false; // local state keeper, maintained by TA methods
}
/**
* Not implemented yet.
*/
public void join()
{
Debug.talkCritical( "RasTransaction::join: not yet implemented." );
throw new NotImplementedException();
}
/**
* Not implemented yet.
*/
public void leave()
{
Debug.talkCritical( "RasTransaction::leave: not yet implemented." );
throw new NotImplementedException();
}
/**
* Begin a transaction.
*/
public void begin()
{
rasImplementation.beginTA();
isOpenTA = true; // TA is considered open if everything went fine.
}
/**
* Returns TRUE if a transaction is currently open.
*/
public boolean isOpen()
{
boolean result = rasImplementation.isOpenTA();
Debug.talkVerbose( "RasTransaction::isOpen: result=" + result );
return result;
}
/**
* Returns TRUE if a transaction is supposed to be open as seen from client side.
* This is an optimization to save one server call within query execution,
* it is NOT an official interface method.
*/
public boolean isOpenLocally()
{
boolean result = isOpenTA;
Debug.talkVerbose( "RasTransaction::isOpenLocally: result=" + result );
return result;
}
/**
* Commit a transaction.
*/
public void commit()
{
isOpenTA = false; // if commit fails something went wrong, so consider TA closed anyway
rasImplementation.commitTA();
}
/**
* Abort a transaction.
*/
public void abort()
{
isOpenTA = false; // if abort tails something went wrong, so consider TA closed anyway
rasImplementation.abortTA();
}
/**
* Not implemented yet.
*/
public void checkpoint()
{
Debug.talkCritical( "RasTransaction::checkpoint: not yet implemented." );
throw new NotImplementedException();
}
/**
* Not implemented yet.
*/
public void lock(Object obj, int mode) throws LockNotGrantedException
{
Debug.talkCritical( "RasTransaction::lock: not yet implemented." );
throw new NotImplementedException();
}
/**
* Not implemented yet.
*/
public boolean tryLock(Object obj, int mode)
{
Debug.talkCritical( "RasTransaction::tryLock: not yet implemented." );
throw new NotImplementedException();
}
/**
* Returns the errorStatus.
*/
public String getErrorStatus()
{
String result = rasImplementation.getErrorStatus();
Debug.talkSparse( "RasTransaction::getErrorStatus: status=" + result );
return result;
}
} // RasTransaction