docs: protected void configure(final DBI dbi, final PooledDataSourceFactory configuration) {
          final String driverClazz = configuration.getDriverClass();
  
          dbi.registerArgumentFactory(new GuavaOptionalArgumentFactory(driverClazz));
          dbi.registerArgumentFactory(new OptionalArgumentFactory(driverClazz));
          dbi.registerArgumentFactory(new OptionalDoubleArgumentFactory());
          dbi.registerArgumentFactory(new OptionalIntArgumentFactory());
          dbi.registerArgumentFactory(new OptionalLongArgumentFactory());
          dbi.registerColumnMapper(new OptionalDoubleMapper());
          dbi.registerColumnMapper(new OptionalIntMapper());
          dbi.registerColumnMapper(new OptionalLongMapper());
          dbi.registerContainerFactory(new ImmutableListContainerFactory());
          dbi.registerContainerFactory(new ImmutableSetContainerFactory());
          dbi.registerContainerFactory(new GuavaOptionalContainerFactory());
          dbi.registerContainerFactory(new OptionalContainerFactory());
  
          final Optional<TimeZone> timeZone = databaseTimeZone();
          dbi.registerArgumentFactory(new JodaDateTimeArgumentFactory(timeZone));
          dbi.registerArgumentFactory(new LocalDateArgumentFactory());
          dbi.registerArgumentFactory(new LocalDateTimeArgumentFactory());
          dbi.registerArgumentFactory(new InstantArgumentFactory(timeZone));
          dbi.registerArgumentFactory(new OffsetDateTimeArgumentFactory(timeZone));
          dbi.registerArgumentFactory(new ZonedDateTimeArgumentFactory(timeZone));
  
          // Should be registered after GuavaOptionalArgumentFactory to be
          // processed first
          dbi.registerArgumentFactory(new GuavaOptionalJodaTimeArgumentFactory(timeZone));
          dbi.registerArgumentFactory(new GuavaOptionalLocalDateArgumentFactory());
          dbi.registerArgumentFactory(new GuavaOptionalLocalDateTimeArgumentFactory());
          dbi.registerArgumentFactory(new GuavaOptionalInstantArgumentFactory(timeZone));
          dbi.registerArgumentFactory(new GuavaOptionalOffsetTimeArgumentFactory(timeZone));
          dbi.registerArgumentFactory(new GuavaOptionalZonedTimeArgumentFactory(timeZone));
  
          // Should be registered after OptionalArgumentFactory to be processed
          // first
          dbi.registerArgumentFactory(new OptionalJodaTimeArgumentFactory(timeZone));
          dbi.registerArgumentFactory(new OptionalLocalDateArgumentFactory());
          dbi.registerArgumentFactory(new OptionalLocalDateTimeArgumentFactory());
          dbi.registerArgumentFactory(new OptionalInstantArgumentFactory(timeZone));
          dbi.registerArgumentFactory(new OptionalOffsetDateTimeArgumentFactory(timeZone));
          dbi.registerArgumentFactory(new OptionalZonedDateTimeArgumentFactory(timeZone));
  
          dbi.registerColumnMapper(new JodaDateTimeMapper(timeZone));
          dbi.registerColumnMapper(new LocalDateMapper());
          dbi.registerColumnMapper(new LocalDateTimeMapper());
          dbi.registerColumnMapper(new InstantMapper(timeZone));
          dbi.registerColumnMapper(new OffsetDateTimeMapper(timeZone));
          dbi.registerColumnMapper(new ZonedDateTimeMapper(timeZone));
      }