@Override public void configure(final Env env, final Config conf, final Binder binder) { Key<DataSource> dskey = Key.get(DataSource.class, Names.named(name)); Supplier<NoSuchElementException> noSuchElement = () -> new NoSuchElementException( "DataSource missing: " + dskey); HikariDataSource ds = (HikariDataSource) env.get(dskey).orElseThrow(noSuchElement); Configuration jooqconf = new DefaultConfiguration(); ConnectionProvider dscp = new DataSourceConnectionProvider(ds); jooqconf.set(JDBCUtils.dialect(env.get(Key.get(String.class, Names.named(name + ".url"))) .orElseThrow(noSuchElement))); jooqconf.set(dscp); jooqconf.set(new DefaultTransactionProvider(dscp)); if (callback != null) { callback.accept(jooqconf, conf); } ServiceKey serviceKey = env.serviceKey(); serviceKey.generate(Configuration.class, name, k -> binder.bind(k).toInstance(jooqconf)); Provider<DSLContext> dsl = () -> DSL.using(jooqconf); serviceKey.generate(DSLContext.class, name, k -> binder.bind(k).toProvider(dsl)); } }
@Override public final TransactionProvider transactionProvider() { // [#3229] If transactions are used in client code, the default behaviour // is assumed automatically, for convenience. if (transactionProvider instanceof NoTransactionProvider) { return new DefaultTransactionProvider(connectionProvider); } return transactionProvider; }
/** * @param nested Whether nested transactions via {@link Savepoint}s are * supported. */ public ThreadLocalTransactionProvider(ConnectionProvider connectionProvider, boolean nested) { this.localConnectionProvider = new ThreadLocalConnectionProvider(connectionProvider); this.delegateTransactionProvider = new DefaultTransactionProvider(localConnectionProvider, nested); this.localConfigurations = new ThreadLocal<Deque<Configuration>>(); this.localTxConnection = new ThreadLocal<Connection>(); }