Skip to content

Commit 965c72e

Browse files
committed
Let ebean module support multiple named dataSources fix #771
1 parent 74e5823 commit 965c72e

File tree

3 files changed

+72
-12
lines changed

3 files changed

+72
-12
lines changed

jooby-ebean/src/main/java/org/jooby/ebean/Ebeanby.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,26 @@
1818
*/
1919
package org.jooby.ebean;
2020

21+
import java.util.Arrays;
22+
import java.util.HashSet;
23+
import java.util.Properties;
24+
import java.util.Set;
25+
import java.util.function.Consumer;
26+
27+
import org.jooby.Env;
28+
import org.jooby.Env.ServiceKey;
29+
import org.jooby.internal.ebean.EbeanEnhancer;
30+
import org.jooby.internal.ebean.EbeanManaged;
31+
import org.jooby.jdbc.Jdbc;
32+
2133
import com.google.inject.Binder;
34+
import com.google.inject.Key;
2235
import com.typesafe.config.Config;
2336
import com.typesafe.config.ConfigFactory;
37+
2438
import io.ebean.EbeanServer;
2539
import io.ebean.config.ContainerConfig;
2640
import io.ebean.config.ServerConfig;
27-
import org.jooby.Env;
28-
import org.jooby.internal.ebean.EbeanEnhancer;
29-
import org.jooby.internal.ebean.EbeanManaged;
30-
import org.jooby.jdbc.Jdbc;
31-
32-
import java.util.Arrays;
33-
import java.util.HashSet;
34-
import java.util.Properties;
35-
import java.util.Set;
3641

3742
/**
3843
* <h1>ebean module</h1>
@@ -218,8 +223,14 @@ public void configure(final Env env, final Config conf, final Binder binder) {
218223
EbeanManaged server = new EbeanManaged(conf, config);
219224
env.onStart(server::start);
220225
env.onStop(server::stop);
221-
env.serviceKey().generate(EbeanServer.class, name,
222-
k -> binder.bind(k).toProvider(server).asEagerSingleton());
226+
/** Bind db key: */
227+
Consumer<Key<EbeanServer>> provider = k -> binder.bind(k).toProvider(server)
228+
.asEagerSingleton();
229+
ServiceKey keys = env.serviceKey();
230+
if (!name.equals(dbref)) {
231+
keys.generate(EbeanServer.class, dbref, provider);
232+
}
233+
keys.generate(EbeanServer.class, name, provider);
223234
});
224235
}
225236

jooby-ebean/src/test/java/org/jooby/ebean/EbeanbyTest.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,55 @@ public void configure() throws Exception {
9191
});
9292
}
9393

94+
@SuppressWarnings("unchecked")
95+
@Test
96+
public void configureWith2Names() throws Exception {
97+
new MockUnit(Env.class, Binder.class)
98+
.expect(props("com.ibm.db2.jcc.DB2SimpleDataSource", "jdbc:db2://127.0.0.1/mydb",
99+
"db2.mydb", null, "", false))
100+
.expect(hikariConfig())
101+
.expect(hikariDataSource())
102+
.expect(serviceKey("mydb"))
103+
.expect(containerConfig)
104+
.expect(unit -> {
105+
ServerConfig serverConfig = unit.mockConstructor(ServerConfig.class);
106+
107+
serverConfig.setName("mydb");
108+
serverConfig.addPackage("my.model");
109+
serverConfig.setContainerConfig(unit.get(ContainerConfig.class));
110+
serverConfig.setDataSource(isA(DataSource.class));
111+
serverConfig.loadFromProperties(isA(Properties.class));
112+
serverConfig.setDefaultServer(true);
113+
serverConfig.setRegister(true);
114+
115+
unit.registerMock(ServerConfig.class, serverConfig);
116+
})
117+
.expect(enhancer("my.model"))
118+
.expect(ebeanProperties())
119+
.expect(unit -> {
120+
Binder binder = unit.get(Binder.class);
121+
122+
ScopedBindingBuilder sbbES = unit.mock(ScopedBindingBuilder.class);
123+
sbbES.asEagerSingleton();
124+
sbbES.asEagerSingleton();
125+
sbbES.asEagerSingleton();
126+
127+
LinkedBindingBuilder<EbeanServer> lbbES = unit.mock(LinkedBindingBuilder.class);
128+
expect(lbbES.toProvider(isA(EbeanManaged.class))).andReturn(sbbES).times(3);
129+
130+
expect(binder.bind(Key.get(EbeanServer.class))).andReturn(lbbES);
131+
expect(binder.bind(Key.get(EbeanServer.class, Names.named("db")))).andReturn(lbbES);
132+
expect(binder.bind(Key.get(EbeanServer.class, Names.named("mydb")))).andReturn(lbbES);
133+
})
134+
.expect(onStop)
135+
.run(unit -> {
136+
new Ebeanby("db")
137+
.configure(unit.get(Env.class), config()
138+
.withValue("db", ConfigValueFactory.fromAnyRef("jdbc:db2://127.0.0.1/mydb")),
139+
unit.get(Binder.class));
140+
});
141+
}
142+
94143
@Test
95144
public void configureWithPackages() throws Exception {
96145
new MockUnit(Env.class, Binder.class)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ public class Jdbc implements Jooby.Module {
261261
@SuppressWarnings("rawtypes")
262262
private final List<BiConsumer> callback = new ArrayList<>();
263263

264-
private final String dbref;
264+
protected final String dbref;
265265

266266
protected Optional<String> dbtype;
267267

0 commit comments

Comments
 (0)