public final void transactionCommit() throws RemoteException
  {
    synchronized(transactions)
    {
      if (!this.inTransaction())
      {
        Logger.debug("[commit] transaction commit without begin or transaction allready commited, skipping");
        return;
      }

      checkConnection();

      Transaction tr = getTransaction();
      if (tr == null)
      {
        Logger.debug("[commit] commit called, but no transaction found");
        return;
      }
      
      tr.count--;
      Logger.debug("[commit] transaction count: " + tr.count);

      if (tr.count > 0)
        return;

      try {
        Logger.debug("[commit] transaction commit");
        getConnection().commit();
        
        // Transaktion ist durch. Egal, ob das Ojekt gerade erstellt wurde oder
        // schon existierte. Jetzt ist es auf jeden Fall nicht mehr frisch.
        this.created = false;
      }
      catch (SQLException se)
      {
        try {
          getConnection().rollback();
          throw new RemoteException("commit failed, rollback successful",se);
        }
        catch (SQLException se2)
        {
          throw new RemoteException("commit failed, rollback failed",se2);
        }
      }
    }
  }