code: static <V> V execute(Tenant tenant, Supplier<V> supplier) {
          startTenantFlow();
          try {
              getThreadLocalInstance().setTenant(tenant);
              return supplier.get();
          } finally {
              endTenantFlow();
          }
      }
docs: This method will execute {@code supplier.getValue()} method on behalf of the specified tenant and
  will return the result of the called supplier.
  
  @param tenant   the tenant
  @param supplier an instance on which {@code getValue()} method will be executed
  @param <V>      return value type can be {@link java.lang.Void}
  @return the result of {@code supplier.getValue()} execution