Skip to content
This repository was archived by the owner on Mar 3, 2026. It is now read-only.

Commit 3441486

Browse files
committed
jdbc: decouple jdbi module fix jooby-project#875
1 parent ca07f9e commit 3441486

3 files changed

Lines changed: 102 additions & 52 deletions

File tree

modules/jooby-jdbc/src/main/java/org/jooby/jdbc/Jdbc.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,8 @@
210210
import com.google.common.base.Splitter;
211211
import com.google.common.base.Strings;
212212
import com.google.inject.Binder;
213+
import com.google.inject.Key;
214+
import com.google.inject.name.Names;
213215
import com.typesafe.config.Config;
214216
import com.typesafe.config.ConfigFactory;
215217
import com.typesafe.config.ConfigObject;
@@ -402,7 +404,7 @@
402404
* @author edgar
403405
* @since 0.1.0
404406
*/
405-
public class Jdbc implements Jooby.Module {
407+
public final class Jdbc implements Jooby.Module {
406408

407409
static final Function<Throwable, Void> CCE = x -> {
408410
if (x instanceof ClassCastException) {
@@ -542,6 +544,7 @@ public void configure(final Env env, final Config config, final Binder binder) {
542544
callback(hikariConf, config);
543545
HikariDataSource ds = new HikariDataSource(hikariConf);
544546

547+
// bind datasource using dbkey and dbname
545548
if (!dbkey.equals(dbname)) {
546549
env.serviceKey().generate(DataSource.class, dbkey, k -> {
547550
binder.bind(k).toInstance(ds);
@@ -553,6 +556,10 @@ public void configure(final Env env, final Config config, final Binder binder) {
553556
env.set(k, ds);
554557
});
555558

559+
// db type
560+
env.set(Key.get(String.class, Names.named(dbkey + ".dbtype")), dbtype.orElse("unknown"));
561+
562+
// cleanup everything
556563
env.onStop(ds::close);
557564
}
558565

modules/jooby-jdbc/src/test/java/org/jooby/jdbc/JdbcTest.java

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@
77
import com.typesafe.config.Config;
88
import com.typesafe.config.ConfigFactory;
99
import com.typesafe.config.ConfigValueFactory;
10+
1011
import static com.typesafe.config.ConfigValueFactory.fromAnyRef;
12+
1113
import com.zaxxer.hikari.HikariConfig;
1214
import com.zaxxer.hikari.HikariDataSource;
15+
1316
import static org.easymock.EasyMock.expect;
17+
1418
import org.jooby.Env;
1519
import org.jooby.test.MockUnit;
1620
import org.jooby.test.MockUnit.Block;
@@ -70,7 +74,7 @@ public void memdb() throws Exception {
7074
"sa", "", false))
7175
.expect(hikariConfig())
7276
.expect(hikariDataSource())
73-
.expect(serviceKey("db"))
77+
.expect(serviceKey("db", "h2"))
7478
.expect(serviceKey("123"))
7579
.expect(onStop)
7680
.run(unit -> {
@@ -93,7 +97,7 @@ public void fsdb() throws Exception {
9397
"sa", "", false))
9498
.expect(hikariConfig())
9599
.expect(hikariDataSource())
96-
.expect(serviceKey("db"))
100+
.expect(serviceKey("db", "h2"))
97101
.expect(serviceKey("jdbctest"))
98102
.expect(onStop)
99103
.expect(unit -> {
@@ -138,7 +142,7 @@ public void dbWithCallback() throws Exception {
138142
.expect(hikariConfig())
139143
.expect(hikariDataSource())
140144
.expect(serviceKey("jdbctest"))
141-
.expect(serviceKey("db"))
145+
.expect(serviceKey("db", "h2"))
142146
.expect(onStop)
143147
.expect(unit -> {
144148
HikariConfig h = unit.get(HikariConfig.class);
@@ -172,7 +176,7 @@ public void databaseWithCredentials() throws Exception {
172176
.expect(mysql)
173177
.expect(hikariConfig())
174178
.expect(hikariDataSource())
175-
.expect(serviceKey("db"))
179+
.expect(serviceKey("db", "mysql"))
176180
.expect(onStop)
177181
.run(unit -> {
178182
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -195,7 +199,7 @@ public void derby() throws Exception {
195199
.expect(hikariConfig())
196200
.expect(hikariDataSource())
197201
.expect(serviceKey("testdb"))
198-
.expect(serviceKey("db"))
202+
.expect(serviceKey("db", "derby"))
199203
.expect(onStop)
200204
.run(unit -> {
201205
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -223,7 +227,7 @@ public void connectionString() throws Exception {
223227
expect(hconf.getDataSourceProperties()).andReturn(props);
224228
})
225229
.expect(hikariDataSource())
226-
.expect(serviceKey("testdb"))
230+
.expect(serviceKey("testdb", "derby"))
227231
.expect(onStop)
228232
.run(unit -> {
229233
new Jdbc("jdbc:derby:testdb").configure(unit.get(Env.class), config,
@@ -248,7 +252,7 @@ public void db2() throws Exception {
248252
.expect(hikariConfig())
249253
.expect(hikariDataSource())
250254
.expect(serviceKey("SAMPLE"))
251-
.expect(serviceKey("db"))
255+
.expect(serviceKey("db", "db2"))
252256
.expect(onStop)
253257
.run(unit -> {
254258
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -272,7 +276,7 @@ public void hsql() throws Exception {
272276
.expect(hikariConfig())
273277
.expect(hikariDataSource())
274278
.expect(serviceKey("file"))
275-
.expect(serviceKey("db"))
279+
.expect(serviceKey("db", "hsqldb"))
276280
.expect(onStop)
277281
.run(unit -> {
278282
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -295,7 +299,7 @@ public void mariadb() throws Exception {
295299
"mariadb.db", null, "", false))
296300
.expect(hikariConfig())
297301
.expect(hikariDataSource())
298-
.expect(serviceKey("db"))
302+
.expect(serviceKey("db", "mariadb"))
299303
.expect(onStop)
300304
.run(unit -> {
301305
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -320,7 +324,7 @@ public void mysql() throws Exception {
320324
.expect(mysql)
321325
.expect(hikariConfig())
322326
.expect(hikariDataSource())
323-
.expect(serviceKey("db"))
327+
.expect(serviceKey("db", "mysql"))
324328
.expect(onStop)
325329
.run(unit -> {
326330
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -352,7 +356,7 @@ public void dbspecific() throws Exception {
352356
})
353357
.expect(hikariConfig())
354358
.expect(hikariDataSource())
355-
.expect(serviceKey("db"))
359+
.expect(serviceKey("db", "mysql"))
356360
.expect(onStop)
357361
.run(unit -> {
358362
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -390,7 +394,7 @@ public void setHikariOptions() throws Exception {
390394
.expect(hikariConfig())
391395
.expect(hikariDataSource())
392396
.expect(serviceKey("jdbctest"))
393-
.expect(serviceKey("db"))
397+
.expect(serviceKey("db", "h2"))
394398
.expect(onStop)
395399
.run(unit -> {
396400
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -419,7 +423,7 @@ public void overrideDataSource() throws Exception {
419423
.expect(hikariConfig())
420424
.expect(hikariDataSource())
421425
.expect(serviceKey("jdbctest"))
422-
.expect(serviceKey("db"))
426+
.expect(serviceKey("db", "h2"))
423427
.expect(onStop)
424428
.run(unit -> {
425429
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -452,7 +456,7 @@ public void twoDatabases() throws Exception {
452456
.expect(hikariConfig())
453457
.expect(hikariDataSource())
454458
.expect(serviceKey("audit"))
455-
.expect(serviceKey("db.audit"))
459+
.expect(serviceKey("db.audit", "h2"))
456460
.expect(onStop)
457461
.run(unit -> {
458462
new Jdbc("db.audit").configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -479,7 +483,7 @@ public void sqlserver() throws Exception {
479483
.expect(hikariConfig())
480484
.expect(hikariDataSource())
481485
.expect(serviceKey("AdventureWorks"))
482-
.expect(serviceKey("db"))
486+
.expect(serviceKey("db", "sqlserver"))
483487
.expect(onStop)
484488
.run(unit -> {
485489
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -504,7 +508,7 @@ public void oracle() throws Exception {
504508
.expect(hikariConfig())
505509
.expect(hikariDataSource())
506510
.expect(serviceKey("orcl"))
507-
.expect(serviceKey("db"))
511+
.expect(serviceKey("db", "oracle"))
508512
.expect(onStop)
509513
.run(unit -> {
510514
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -529,7 +533,7 @@ public void pgsql() throws Exception {
529533
.expect(hikariConfig())
530534
.expect(hikariDataSource())
531535
.expect(serviceKey("database"))
532-
.expect(serviceKey("db"))
536+
.expect(serviceKey("db", "pgsql"))
533537
.expect(onStop)
534538
.run(unit -> {
535539
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -553,7 +557,7 @@ public void postgresql() throws Exception {
553557
.expect(hikariConfig())
554558
.expect(hikariDataSource())
555559
.expect(serviceKey("database"))
556-
.expect(serviceKey("db"))
560+
.expect(serviceKey("db", "postgresql"))
557561
.expect(onStop)
558562
.run(unit -> {
559563
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -577,7 +581,7 @@ public void sybase() throws Exception {
577581
.expect(hikariConfig())
578582
.expect(hikariDataSource())
579583
.expect(serviceKey("database"))
580-
.expect(serviceKey("db"))
584+
.expect(serviceKey("db", "sybase"))
581585
.expect(onStop)
582586
.run(unit -> {
583587
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -601,7 +605,7 @@ public void firebirdsql() throws Exception {
601605
.expect(hikariConfig())
602606
.expect(hikariDataSource())
603607
.expect(serviceKey("mydb"))
604-
.expect(serviceKey("db"))
608+
.expect(serviceKey("db", "firebirdsql"))
605609
.expect(onStop)
606610
.run(unit -> {
607611
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -625,7 +629,7 @@ public void sqlite() throws Exception {
625629
.expect(hikariConfig())
626630
.expect(hikariDataSource())
627631
.expect(serviceKey("testdb"))
628-
.expect(serviceKey("db"))
632+
.expect(serviceKey("db", "sqlite"))
629633
.expect(onStop)
630634
.run(unit -> {
631635
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
@@ -651,15 +655,19 @@ public void unknownDb() throws Exception {
651655
.expect(hikariConfig())
652656
.expect(hikariDataSource())
653657
.expect(serviceKey("testdb"))
654-
.expect(serviceKey("db"))
658+
.expect(serviceKey("db", "custom"))
655659
.expect(onStop)
656660
.run(unit -> {
657661
new Jdbc().configure(unit.get(Env.class), dbconf, unit.get(Binder.class));
658662
});
659663
}
660664

661-
@SuppressWarnings("unchecked")
662665
private Block serviceKey(final String db) {
666+
return serviceKey(db, null);
667+
}
668+
669+
@SuppressWarnings("unchecked")
670+
private Block serviceKey(final String db, String dbtype) {
663671
return unit -> {
664672
Env env = unit.get(Env.class);
665673
expect(env.serviceKey()).andReturn(new Env.ServiceKey());
@@ -672,7 +680,11 @@ private Block serviceKey(final String db) {
672680
expect(binder.bind(Key.get(DataSource.class))).andReturn(binding);
673681
expect(binder.bind(Key.get(DataSource.class, Names.named(db)))).andReturn(binding);
674682
expect(env.set(Key.get(DataSource.class), unit.get(HikariDataSource.class))).andReturn(env);
675-
expect(env.set(Key.get(DataSource.class, Names.named(db)), unit.get(HikariDataSource.class))).andReturn(env);
683+
expect(env.set(Key.get(DataSource.class, Names.named(db)), unit.get(HikariDataSource.class)))
684+
.andReturn(env);
685+
if (dbtype != null) {
686+
expect(env.set(Key.get(String.class, Names.named(db + ".dbtype")), dbtype)).andReturn(env);
687+
}
676688
};
677689
}
678690

0 commit comments

Comments
 (0)