public T execute() throws SQLException {
		Connection conn = null;
		SQLException toThrow = null;
		T back = null;
		
		try {
			conn = factory.getConnection();
			
			conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
			conn.setAutoCommit(false);
			
			back = Transaction.this.run();
			
			conn.commit();
		} catch (SQLException e) {
			if (conn != null) {
				try {conn.rollback();
				} catch (SQLException e1) { /* toHandle */ }
			}
			
			toThrow = e;
		} finally {
			if (conn == null) { return null; }
			
			try {
				conn.setAutoCommit(true);
				
				conn.close();
			} catch (SQLException e) {
			}
		}
		
		if (toThrow != null) { throw toThrow; }
		
		return back;
	}