public default <E extends Exception, T> T withTransaction(String description,
			ExceptionalSupplier<T, E> supplier) throws E {
		T t = null;
		boolean success = false;
		int id = startTransaction(description);
		try {
			t = supplier.get();
			success = true;
		}
		finally {
			endTransaction(id, success);
		}
		return t;
	}
Calls the given supplier inside of a transaction.  Use this method in place of the more
verbose try/catch/finally semantics.
<pre>
program.withTransaction("My Description", () -> {
	// ... Do something
	return result;
});
</pre>
<p>
If you do not need to supply a result, then use 
{@link #withTransaction(String, ExceptionalCallback)} instead.

@param <E> the exception that may be thrown from this method 
@param <T> the type of result returned by the supplier
@param description brief description of transaction
@param supplier the supplier that will be called inside of a transaction
@return the result returned by the supplier
@throws E any exception that may be thrown in the given callback
Ghidra/Framework/Project/src/main/java/ghidra/framework/model/DomainObject.java