Skip to content

Commit 86aaddf

Browse files
authored
Merge pull request #13 from adrienlauer/morphia-business-upgrade
Upgrade morphia to 1.5.8, really streams results from db
2 parents c1490a8 + aac978f commit 86aaddf

34 files changed

+196
-103
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
# Version 3.1.0 (2020-01-31)
2+
3+
* [new] Morphia repository now has the ability to stream results from the database as consumed (using a cursor instead of a list behind the scenes).
4+
* [chg] Update the Morphia module to work with business framework 4.3.0+.
5+
* [chg] Updated Morphia to 1.5.8 (its package has changed to `dev.morphia`, update project code accordingly if necessary).
6+
17
# Version 3.0.2 (2019-01-10)
28

39
* [fix] Fix issue #11: an exception occurred at startup because the way of accessing the ValidationFactory changed.

core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<groupId>org.seedstack.addons.mongodb</groupId>
1616
<artifactId>mongodb</artifactId>
17-
<version>3.0.2-SNAPSHOT</version>
17+
<version>3.1.0-SNAPSHOT</version>
1818
</parent>
1919

2020
<artifactId>mongodb-core</artifactId>

core/src/main/java/org/seedstack/mongodb/internal/AbstractMongoDbManager.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,17 @@
1212
import com.mongodb.AuthenticationMechanism;
1313
import com.mongodb.MongoCredential;
1414
import com.mongodb.ServerAddress;
15-
import org.seedstack.coffig.Coffig;
16-
import org.seedstack.mongodb.MongoDbConfig;
17-
import org.seedstack.seed.SeedException;
18-
import org.slf4j.Logger;
19-
import org.slf4j.LoggerFactory;
20-
2115
import java.lang.reflect.ParameterizedType;
2216
import java.lang.reflect.Type;
2317
import java.util.ArrayList;
2418
import java.util.HashMap;
2519
import java.util.List;
2620
import java.util.Map;
21+
import org.seedstack.coffig.Coffig;
22+
import org.seedstack.mongodb.MongoDbConfig;
23+
import org.seedstack.seed.SeedException;
24+
import org.slf4j.Logger;
25+
import org.slf4j.LoggerFactory;
2726

2827
abstract class AbstractMongoDbManager<C, D> implements MongoDbManager {
2928
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractMongoDbManager.class);

core/src/main/java/org/seedstack/mongodb/internal/SyncMongoDbManager.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* License, v. 2.0. If a copy of the MPL was not distributed with this
66
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
77
*/
8+
89
package org.seedstack.mongodb.internal;
910

1011
import com.mongodb.MongoClient;
@@ -13,13 +14,12 @@
1314
import com.mongodb.MongoCredential;
1415
import com.mongodb.ServerAddress;
1516
import com.mongodb.client.MongoDatabase;
17+
import java.util.List;
1618
import org.seedstack.coffig.BuilderSupplier;
1719
import org.seedstack.coffig.Coffig;
1820
import org.seedstack.mongodb.MongoDbConfig;
1921
import org.seedstack.seed.SeedException;
2022

21-
import java.util.List;
22-
2323
class SyncMongoDbManager extends AbstractMongoDbManager<MongoClient, MongoDatabase> {
2424
@Override
2525
protected MongoClient doCreateClient(String clientName, MongoDbConfig.ClientConfig clientConfig, Coffig coffig) {
@@ -41,7 +41,8 @@ protected void doClose(MongoClient client) {
4141
client.close();
4242
}
4343

44-
private MongoClient createMongoClient(String clientName, MongoDbConfig.ClientConfig clientConfig, MongoClientOptions mongoClientOptions) {
44+
private MongoClient createMongoClient(String clientName, MongoDbConfig.ClientConfig clientConfig,
45+
MongoClientOptions mongoClientOptions) {
4546
List<ServerAddress> serverAddresses = buildServerAddresses(clientName, clientConfig.getHosts());
4647

4748
if (serverAddresses.isEmpty()) {

morphia/pom.xml

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<groupId>org.seedstack.addons.mongodb</groupId>
1616
<artifactId>mongodb</artifactId>
17-
<version>3.0.2-SNAPSHOT</version>
17+
<version>3.1.0-SNAPSHOT</version>
1818
</parent>
1919

2020
<artifactId>mongodb-morphia</artifactId>
@@ -36,13 +36,24 @@
3636
<optional>true</optional>
3737
</dependency>
3838
<dependency>
39-
<groupId>org.mongodb.morphia</groupId>
40-
<artifactId>morphia</artifactId>
39+
<groupId>dev.morphia.morphia</groupId>
40+
<artifactId>core</artifactId>
4141
<version>${morphia.version}</version>
42+
<exclusions>
43+
<exclusion>
44+
<groupId>org.mongodb</groupId>
45+
<artifactId>mongo-java-driver</artifactId>
46+
</exclusion>
47+
</exclusions>
48+
</dependency>
49+
<dependency>
50+
<groupId>org.mongodb</groupId>
51+
<artifactId>mongo-java-driver</artifactId>
52+
<version>${mongodb.version}</version>
4253
</dependency>
4354
<dependency>
44-
<groupId>org.mongodb.morphia</groupId>
45-
<artifactId>morphia-logging-slf4j</artifactId>
55+
<groupId>dev.morphia.morphia</groupId>
56+
<artifactId>logging-slf4j</artifactId>
4657
<version>${morphia.version}</version>
4758
<exclusions>
4859
<exclusion>
@@ -51,6 +62,12 @@
5162
</exclusion>
5263
</exclusions>
5364
</dependency>
65+
<dependency>
66+
<groupId>javax.validation</groupId>
67+
<artifactId>validation-api</artifactId>
68+
<version>${javax.validation.version}</version>
69+
<scope>provided</scope>
70+
</dependency>
5471

5572
<dependency>
5673
<groupId>org.seedstack.seed</groupId>
@@ -73,7 +90,7 @@
7390
<dependency>
7491
<groupId>org.hibernate</groupId>
7592
<artifactId>hibernate-validator</artifactId>
76-
<version>6.0.13.Final</version>
93+
<version>5.4.3.Final</version>
7794
<scope>test</scope>
7895
</dependency>
7996
<dependency>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
2+
#-------------------------------------------------------------------------------
3+
# Already used licenses in project :
4+
# - Apache 2
5+
# - BSD
6+
# - CDDL
7+
# - IGNORED_LICENSE
8+
# - LGPL 3.0
9+
# - MIT License
10+
# - MPL 2.0
11+
# - Public Domain
12+
# - The MIT License (MIT)
13+
# - WTFPL
14+
#-------------------------------------------------------------------------------
15+
# Please fill the missing licenses for dependencies :
16+
#
17+
#
18+
#Fri Jan 31 12:24:04 CET 2020
19+
dev.morphia.morphia--core--1.5.8=Apache 2
20+
dev.morphia.morphia--logging-slf4j--1.5.8=Apache 2

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

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,28 @@
55
* License, v. 2.0. If a copy of the MPL was not distributed with this
66
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
77
*/
8+
89
package org.seedstack.mongodb.morphia;
910

1011
import static com.google.common.base.Preconditions.checkArgument;
11-
12+
import static java.util.Spliterators.spliteratorUnknownSize;
13+
14+
import com.mongodb.DBCollection;
15+
import dev.morphia.Datastore;
16+
import dev.morphia.query.CountOptions;
17+
import dev.morphia.query.CriteriaContainer;
18+
import dev.morphia.query.FindOptions;
19+
import dev.morphia.query.Query;
20+
import dev.morphia.query.Sort;
21+
import dev.morphia.query.internal.MorphiaCursor;
1222
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
1323
import java.util.ArrayList;
1424
import java.util.List;
1525
import java.util.Optional;
26+
import java.util.Spliterator;
1627
import java.util.stream.Stream;
28+
import java.util.stream.StreamSupport;
1729
import javax.inject.Inject;
18-
import org.mongodb.morphia.Datastore;
19-
import org.mongodb.morphia.mapping.Mapper;
20-
import org.mongodb.morphia.query.CountOptions;
21-
import org.mongodb.morphia.query.CriteriaContainer;
22-
import org.mongodb.morphia.query.FindOptions;
23-
import org.mongodb.morphia.query.Query;
24-
import org.mongodb.morphia.query.Sort;
2530
import org.seedstack.business.domain.AggregateExistsException;
2631
import org.seedstack.business.domain.AggregateNotFoundException;
2732
import org.seedstack.business.domain.AggregateRoot;
@@ -42,6 +47,7 @@
4247
* @param <ID> Identifier class.
4348
*/
4449
public abstract class BaseMorphiaRepository<A extends AggregateRoot<ID>, ID> extends BaseRepository<A, ID> {
50+
public static final String ID_KEY = "_id";
4551
private Datastore datastore;
4652
private SpecificationTranslator<MorphiaTranslationContext, CriteriaContainer> specificationTranslator;
4753

@@ -77,12 +83,14 @@ public void add(A aggregate) throws AggregateExistsException {
7783

7884
@Override
7985
public Stream<A> get(Specification<A> specification, Option... options) {
80-
return buildQuery(specification, options).asList(buildFindOptions(options)).stream();
86+
final MorphiaCursor<A> cursor = buildQuery(specification, options).find(buildFindOptions(options));
87+
return StreamSupport.stream(spliteratorUnknownSize(cursor, Spliterator.ORDERED), false)
88+
.onClose(cursor::close);
8189
}
8290

8391
@Override
8492
public Optional<A> get(ID id) {
85-
return Optional.ofNullable(datastore.get(getAggregateRootClass(), id));
93+
return Optional.ofNullable(datastore.createQuery(getAggregateRootClass()).first());
8694
}
8795

8896
@Override
@@ -92,7 +100,7 @@ public boolean contains(Specification<A> specification) {
92100

93101
@Override
94102
public boolean contains(ID id) {
95-
return datastore.find(getAggregateRootClass()).filter(Mapper.ID_KEY, id).count(new CountOptions().limit(1)) > 0;
103+
return datastore.find(getAggregateRootClass()).filter(ID_KEY, id).count(new CountOptions().limit(1)) > 0;
96104
}
97105

98106
@Override
@@ -102,7 +110,7 @@ public long count(Specification<A> specification) {
102110

103111
@Override
104112
public long size() {
105-
return datastore.getCount(getAggregateRootClass());
113+
return datastore.createQuery(getAggregateRootClass()).count();
106114
}
107115

108116
@Override
@@ -112,7 +120,9 @@ public long remove(Specification<A> specification) throws AggregateNotFoundExcep
112120

113121
@Override
114122
public void remove(ID id) throws AggregateNotFoundException {
115-
checkExactlyOneAggregateRemoved(datastore.delete(getAggregateRootClass(), id).getN(), id);
123+
checkExactlyOneAggregateRemoved(
124+
datastore.delete(datastore.find(getAggregateRootClass()).filter(ID_KEY, id)).getN(),
125+
id);
116126
}
117127

118128
private void checkExactlyOneAggregateRemoved(int n, ID id) {
@@ -143,8 +153,9 @@ public A addOrUpdate(A aggregate) {
143153

144154
@Override
145155
public void clear() {
146-
datastore.getCollection(getAggregateRootClass()).drop();
147-
datastore.getCollection(getAggregateRootClass()).dropIndexes();
156+
DBCollection collection = datastore.getCollection(getAggregateRootClass());
157+
collection.drop();
158+
collection.dropIndexes();
148159
}
149160

150161
private Query<A> buildQuery(Specification<A> specification, Option... options) {
@@ -187,7 +198,7 @@ private void applyLimit(FindOptions findOptions, LimitOption limitOption) {
187198
findOptions.limit((int) limit);
188199
}
189200

190-
private void applySort(Query query, SortOption sortOption) {
201+
private void applySort(Query<?> query, SortOption sortOption) {
191202
List<Sort> sorts = new ArrayList<>();
192203
for (SortOption.SortedAttribute sortedAttribute : sortOption.getSortedAttributes()) {
193204
switch (sortedAttribute.getDirection()) {
@@ -202,6 +213,6 @@ private void applySort(Query query, SortOption sortOption) {
202213
"Unsupported sort direction " + sortedAttribute.getDirection());
203214
}
204215
}
205-
query.order(sorts.toArray(new Sort[sorts.size()]));
216+
query.order(sorts.toArray(new Sort[0]));
206217
}
207218
}

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,22 @@
55
* License, v. 2.0. If a copy of the MPL was not distributed with this
66
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
77
*/
8+
89
package org.seedstack.mongodb.morphia.internal;
910

11+
import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.createDatastoreAnnotation;
12+
import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.getMongoClientConfig;
13+
1014
import com.google.inject.Injector;
1115
import com.google.inject.Key;
1216
import com.google.inject.name.Names;
1317
import com.mongodb.MongoClient;
14-
import org.mongodb.morphia.Datastore;
15-
import org.mongodb.morphia.Morphia;
18+
import dev.morphia.Datastore;
19+
import dev.morphia.Morphia;
20+
import javax.inject.Inject;
1621
import org.seedstack.mongodb.morphia.MorphiaDatastore;
1722
import org.seedstack.seed.Application;
1823

19-
import javax.inject.Inject;
20-
21-
import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.createDatastoreAnnotation;
22-
import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.getMongoClientConfig;
23-
2424
public class DatastoreFactory {
2525
private final Application application;
2626
private final Injector injector;
@@ -46,7 +46,7 @@ public Datastore createDatastore(String clientName, String dbName) {
4646
dbName
4747
)
4848
);
49-
datastore.ensureIndexes(true);
49+
datastore.ensureIndexes();
5050
datastore.ensureCaps();
5151
return datastore;
5252
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
package org.seedstack.mongodb.morphia.internal;
99

1010
import com.google.inject.Provider;
11-
import org.mongodb.morphia.Datastore;
11+
import dev.morphia.Datastore;
1212
import org.seedstack.mongodb.morphia.MorphiaDatastore;
1313

1414
import javax.inject.Inject;

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
import com.google.inject.Key;
1616
import com.google.inject.Scopes;
1717
import java.util.Collection;
18-
import org.mongodb.morphia.Datastore;
19-
import org.mongodb.morphia.Morphia;
18+
import java.util.Collection;
19+
import dev.morphia.Datastore;
20+
import dev.morphia.Morphia;
2021
import org.seedstack.mongodb.morphia.MorphiaDatastore;
21-
2222
class MorphiaModule extends AbstractModule {
2323
private final Collection<MorphiaDatastore> morphiaDatastoresAnnotation;
2424
private final Morphia morphia;

0 commit comments

Comments
 (0)