package org.jacorb.demo.bank.transaction.implicit;
import org.omg.CORBA.*;
import org.omg.CORBA.ORBPackage.*;
import org.omg.CosTransactions.*;
import org.omg.CosNaming.*;
import java.io.*;
public class BankImpl
extends TheBankPOA
{
private ORB orb;
private org.omg.PortableServer.POA poa;
private org.omg.CosTransactions.Current ts_current = null;
public BankImpl( ORB orb, org.omg.PortableServer.POA poa )
{
this.orb = orb;
this.poa = poa;
try
{
ts_current = org.omg.CosTransactions.CurrentHelper.narrow(
orb.resolve_initial_references("TransactionCurrent"));
}
catch (Exception e)
{
e.printStackTrace();
}
}
public Account open(String name, float initial_deposit)
{
try
{
AccountImpl acc = new AccountImpl(orb, name, initial_deposit);
org.omg.CORBA.Object o = poa.servant_to_reference(acc);
return acc._this(orb);
}
catch( Exception e )
{
e.printStackTrace();
throw new org.omg.CORBA.UNKNOWN();
}
}
public void transfer( Account source, Account destination, float amount )
throws InsufficientFunds, TransferFailed
{
try
{
// start a new transaction
System.err.println("begin transaction");
// obtain control object
//control = transactionFactory.create(20);
ts_current.set_timeout(20);
ts_current.begin();
source.debit( amount );
System.err.println("debited");
destination.credit( amount );
System.err.println("credited");
// commit the transaction
System.err.println("commit transaction");
//control.get_terminator().commit( true );
ts_current.commit(true);
System.err.println("transaction comitted");
}
catch( InsufficientFunds isf )
{
System.err.println("insufficient funds - rollback transaction: " + isf );
try
{
//control.get_terminator().rollback();
ts_current.rollback();
}
catch( org.omg.CosTransactions.NoTransaction nt )
{
System.err.println("No transaction - give up: " + nt );
System.exit( 1 );
}
throw( isf );
}
catch( UserException ue )
{
System.err.println("user exception - rollback transaction: " + ue );
try
{
//control.get_terminator().rollback();
ts_current.rollback();
}
catch( org.omg.CosTransactions.NoTransaction nt )
{
System.err.println("No transaction - give up: " + nt );
System.exit( 1 );
}
throw new TransferFailed();
}
catch( SystemException se )
{
System.err.println("system exception - rollback transaction: " + se );
try
{
//control.get_terminator().rollback();
ts_current.rollback();
}
catch( org.omg.CosTransactions.NoTransaction nt )
{
System.err.println("No transaction - give up: " + nt );
System.exit( 1 );
}
throw( se );
}
}
}