Skip to content

Commit 777f6d9

Browse files
committed
Fix aliases when injecting morphia datastores
1 parent 674af06 commit 777f6d9

File tree

13 files changed

+91
-175
lines changed

13 files changed

+91
-175
lines changed

CHANGELOG.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
# Version 1.1.0 (?)
22

3-
* [new] Add Bean Validation support to Morphia (at pre-persist)
4-
* [new] Add `exists()` and `count()` in `BaseMorphiaRepository`
5-
* [chg] Update for SeedStack 16.4
6-
* [brk] remove `do*()` methods in `BaseMorphiaRepository`
3+
* [new] Add Bean Validation support to Morphia (at pre-persist).
4+
* [new] Add `exists()` and `count()` in `BaseMorphiaRepository`.
5+
* [chg] Update for SeedStack 16.4.
6+
* [brk] Remove `do*()` methods in `BaseMorphiaRepository`.
7+
* [fix] Correctly take MongoDb database aliases into account when injecting Morphia data stores.
78

89
# Version 1.0.1 (2016-02-09)
910

core/src/it/resources/META-INF/configuration/org.seedstack.mongo.props renamed to core/src/it/resources/META-INF/configuration/seed.props

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
77
#
88

9+
[org.seedstack.seed.logs]
10+
level = WARN
11+
912
[org.seedstack.mongodb]
1013
clients = client1, client2, client3
1114

core/src/it/resources/logback-test.xml

Lines changed: 0 additions & 20 deletions
This file was deleted.

morphia/src/it/java/org/seedstack/mongodb/morphia/MongoDbIT.java

Lines changed: 0 additions & 57 deletions
This file was deleted.

morphia/src/it/java/org/seedstack/mongodb/morphia/MorphiaIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
public class MorphiaIT extends AbstractSeedIT {
2424
@Inject
25-
@MorphiaDatastore(clientName = "client1", dbName = "db1")
25+
@MorphiaDatastore(clientName = "client1", dbName = "db")
2626
private Datastore datastore;
2727

2828
@Test

morphia/src/it/resources/META-INF/configuration/org.seedstack.mongo.props renamed to morphia/src/it/resources/META-INF/configuration/seed.props

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,26 @@
66
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
77
#
88

9+
[org.seedstack.seed.logs]
10+
level = WARN
11+
912
[org.seedstack.mongodb]
10-
clients = client1, client2, client3
13+
clients = client1, client2
1114

1215
[org.seedstack.mongodb.client.client1]
1316
hosts = localhost
1417
option.connectionsPerHost = 50
1518
databases = db1
19+
alias.db1 = db
1620

1721
[org.seedstack.mongodb.client.client2]
18-
async = true
1922
hosts = localhost
20-
setting.connectionPool.maxSize = 50
21-
databases = db2
22-
23-
[org.seedstack.mongodb.client.client3]
2423
async = true
25-
hosts = localhost
2624
databases = db2
27-
alias.db2 = db3
28-
2925

3026
[org.seedstack.mongodb.morphia.fixtures.user.*]
3127
morphia.clientName = client1
32-
morphia.dbName = db1
28+
morphia.dbName = db
3329

3430
[org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy1]
3531
morphia.dbName = db4

morphia/src/it/resources/logback-test.xml

Lines changed: 0 additions & 20 deletions
This file was deleted.

morphia/src/main/java/org/seedstack/mongodb/morphia/BaseMorphiaRepository.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,9 @@
77
*/
88
package org.seedstack.mongodb.morphia;
99

10-
import com.google.inject.Inject;
11-
import com.google.inject.Injector;
12-
import com.google.inject.Key;
1310
import org.mongodb.morphia.Datastore;
1411
import org.seedstack.business.domain.AggregateRoot;
1512
import org.seedstack.business.domain.BaseRepository;
16-
import org.seedstack.mongodb.morphia.internal.MorphiaUtils;
17-
import org.seedstack.seed.Application;
1813

1914
/**
2015
* This class can serve as a base class for Morphia repositories. It provides methods for common CRUD operations as
@@ -25,7 +20,7 @@
2520
2621
*/
2722
public abstract class BaseMorphiaRepository<A extends AggregateRoot<K>, K> extends BaseRepository<A, K> {
28-
private Datastore datastore;
23+
private final Datastore datastore;
2924

3025
/**
3126
* Provides access to the Morphia data store for implementing custom data access methods.
@@ -36,16 +31,9 @@ protected Datastore getDatastore() {
3631
return datastore;
3732
}
3833

39-
public BaseMorphiaRepository() {
40-
}
41-
42-
public BaseMorphiaRepository(Class<A> aggregateRootClass, Class<K> kClass) {
34+
public BaseMorphiaRepository(Class<A> aggregateRootClass, Class<K> kClass, Datastore datastore) {
4335
super(aggregateRootClass, kClass);
44-
}
45-
46-
@Inject
47-
private void initDatastore(Application application, Injector injector) {
48-
datastore = injector.getInstance(Key.get(Datastore.class, MorphiaUtils.getMongoDatastore(application, getAggregateRootClass())));
36+
this.datastore = datastore;
4937
}
5038

5139
@Override

morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreProvider.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
*/
88
package org.seedstack.mongodb.morphia.internal;
99

10-
import com.google.inject.Inject;
1110
import com.google.inject.Injector;
1211
import com.google.inject.Key;
1312
import com.google.inject.Provider;
@@ -18,34 +17,35 @@
1817
import org.seedstack.mongodb.morphia.MorphiaDatastore;
1918
import org.seedstack.seed.Application;
2019

20+
import javax.inject.Inject;
21+
2122
/**
2223
2324
*/
2425
class DatastoreProvider implements Provider<Datastore> {
25-
26+
private final MorphiaDatastore morphiaDatastore;
27+
private final Morphia morphia;
2628
@Inject
2729
private Injector injector;
28-
2930
@Inject
3031
private Application application;
3132

32-
private Class<?> mappedclass;
33-
34-
private MorphiaDatastore morphiaDatastore;
35-
36-
private final Morphia morphia;
37-
38-
@Override
39-
public Datastore get() {
40-
MongoClient mongoClient = injector
41-
.getInstance(Key.get(MongoClient.class, Names.named(morphiaDatastore.clientName())));
42-
return morphia.createDatastore(mongoClient, morphiaDatastore.dbName());
43-
}
44-
45-
public DatastoreProvider(MorphiaDatastore morphiaDatastore, Morphia morphia) {
33+
DatastoreProvider(MorphiaDatastore morphiaDatastore, Morphia morphia) {
4634
super();
4735
this.morphiaDatastore = morphiaDatastore;
4836
this.morphia = morphia;
4937
}
5038

39+
@Override
40+
public Datastore get() {
41+
String resolvedDbName = MorphiaUtils.resolveDatabaseAlias(
42+
MorphiaUtils.getMongoClientConfiguration(application.getConfiguration(), morphiaDatastore.clientName()),
43+
morphiaDatastore.dbName()
44+
);
45+
46+
return morphia.createDatastore(
47+
injector.getInstance(Key.get(MongoClient.class, Names.named(morphiaDatastore.clientName()))),
48+
resolvedDbName
49+
);
50+
}
5151
}

morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DefaultMorphiaRepository.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
*/
88
package org.seedstack.mongodb.morphia.internal;
99

10+
import com.google.inject.Injector;
11+
import com.google.inject.Key;
1012
import com.google.inject.assistedinject.Assisted;
13+
import org.mongodb.morphia.Datastore;
1114
import org.seedstack.business.domain.AggregateRoot;
1215
import org.seedstack.business.spi.GenericImplementation;
1316
import org.seedstack.mongodb.morphia.BaseMorphiaRepository;
1417
import org.seedstack.mongodb.morphia.Morphia;
15-
import org.seedstack.seed.core.utils.SeedCheckUtils;
18+
import org.seedstack.seed.Application;
1619

1720
import javax.inject.Inject;
1821

@@ -39,10 +42,16 @@ public class DefaultMorphiaRepository<AGGREGATE extends AggregateRoot<KEY>, KEY>
3942
* Constructs a DefaultMongodbRepository.
4043
*
4144
* @param genericClasses the resolved generics for the aggregate root class and the key class
45+
* @param application injected implementation of {@link Application}
46+
* @param injector injector Guice injector.
4247
*/
4348
@SuppressWarnings("unchecked")
4449
@Inject
45-
public DefaultMorphiaRepository(@Assisted Object[] genericClasses) {
46-
super((Class) genericClasses.clone()[0], (Class) genericClasses.clone()[0]);
50+
public DefaultMorphiaRepository(@Assisted Object[] genericClasses, Application application, Injector injector) {
51+
super(
52+
(Class) genericClasses.clone()[0],
53+
(Class) genericClasses.clone()[0],
54+
injector.getInstance(Key.get(Datastore.class, MorphiaUtils.getMongoDatastore(application, (Class) genericClasses.clone()[0])))
55+
);
4756
}
4857
}

0 commit comments

Comments
 (0)