class TransactionContext {

  public void start() throws TransactionFailureException {
    currentTx = txClient.startShort();
    for (TransactionAware txAware : txAwares) {
      try {
        txAware.startTx(currentTx);
      } catch (Throwable e) {
        String message = String.format("Unable to start transaction-aware '%s' for transaction %d. ",
                                       txAware.getTransactionAwareName(), currentTx.getTransactionId());
        LOG.warn(message, e);
        txClient.abort(currentTx);
        throw new TransactionFailureException(message, e);
      }
    }
  }

  public  TransactionContext(TransactionSystemClient txClient, TransactionAware... txAwares);
  public  TransactionContext(TransactionSystemClient txClient, Iterable<TransactionAware> txAwares);

}