public ExecSessionInternal build() {
            if (transactionTime == null) {
                transactionTime = Instant.now();
            }
            if (this.embulkSystemProperties == null) {
                logger.warn("EmbulkSystemProperties is not set when building ExecSessionInternal, then set to empty. "
                            + "Use ExecSessionInternal.Builder#setEmbulkSystemProperties.");
                this.embulkSystemProperties = EmbulkSystemProperties.of(new Properties());
            }
            if (this.modelManager == null) {
                throw new IllegalStateException("ModelManager is not set in ExecSessionInternal.");
            }
            return new ExecSessionInternal(
                    this.transactionTime,
                    this.embulkSystemProperties,
                    this.bufferAllocator,
                    this.tempFileSpaceAllocator,
                    this.guessExecutor,
                    this.builtinPluginSourceBuilder.build(),
                    this.modelManager);
        }
Provides access inside Embulk through a transactional session.

<p>It is internal implementation of {@link ExecSession} although some methods, such as {@code newPlugin}, are to be
removed from {@link ExecSession} soon during Embulk v0.10 when {@link ExecSession} moves to {@code embulk-spi} from
{@code embulk-core}. Even after the removal, they stay in this {@link ExecSessionInternal} to be called through
{@link ExecInternal}.
embulk-core/src/main/java/org/embulk/spi/ExecSessionInternal.java