Skip to content

Commit

Permalink
Merge pull request #13 from adrienlauer/morphia-business-upgrade
Browse files Browse the repository at this point in the history
Upgrade morphia to 1.5.8, really streams results from db
  • Loading branch information
adrienlauer authored Jan 31, 2020
2 parents c1490a8 + aac978f commit 86aaddf
Show file tree
Hide file tree
Showing 34 changed files with 196 additions and 103 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
# Version 3.1.0 (2020-01-31)

* [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).
* [chg] Update the Morphia module to work with business framework 4.3.0+.
* [chg] Updated Morphia to 1.5.8 (its package has changed to `dev.morphia`, update project code accordingly if necessary).

# Version 3.0.2 (2019-01-10)

* [fix] Fix issue #11: an exception occurred at startup because the way of accessing the ValidationFactory changed.
Expand Down
2 changes: 1 addition & 1 deletion core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<parent>
<groupId>org.seedstack.addons.mongodb</groupId>
<artifactId>mongodb</artifactId>
<version>3.0.2-SNAPSHOT</version>
<version>3.1.0-SNAPSHOT</version>
</parent>

<artifactId>mongodb-core</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,17 @@
import com.mongodb.AuthenticationMechanism;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.seedstack.coffig.Coffig;
import org.seedstack.mongodb.MongoDbConfig;
import org.seedstack.seed.SeedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.seedstack.coffig.Coffig;
import org.seedstack.mongodb.MongoDbConfig;
import org.seedstack.seed.SeedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

abstract class AbstractMongoDbManager<C, D> implements MongoDbManager {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractMongoDbManager.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

package org.seedstack.mongodb.internal;

import com.mongodb.MongoClient;
Expand All @@ -13,13 +14,12 @@
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;
import java.util.List;
import org.seedstack.coffig.BuilderSupplier;
import org.seedstack.coffig.Coffig;
import org.seedstack.mongodb.MongoDbConfig;
import org.seedstack.seed.SeedException;

import java.util.List;

class SyncMongoDbManager extends AbstractMongoDbManager<MongoClient, MongoDatabase> {
@Override
protected MongoClient doCreateClient(String clientName, MongoDbConfig.ClientConfig clientConfig, Coffig coffig) {
Expand All @@ -41,7 +41,8 @@ protected void doClose(MongoClient client) {
client.close();
}

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

if (serverAddresses.isEmpty()) {
Expand Down
29 changes: 23 additions & 6 deletions morphia/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<parent>
<groupId>org.seedstack.addons.mongodb</groupId>
<artifactId>mongodb</artifactId>
<version>3.0.2-SNAPSHOT</version>
<version>3.1.0-SNAPSHOT</version>
</parent>

<artifactId>mongodb-morphia</artifactId>
Expand All @@ -36,13 +36,24 @@
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mongodb.morphia</groupId>
<artifactId>morphia</artifactId>
<groupId>dev.morphia.morphia</groupId>
<artifactId>core</artifactId>
<version>${morphia.version}</version>
<exclusions>
<exclusion>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>${mongodb.version}</version>
</dependency>
<dependency>
<groupId>org.mongodb.morphia</groupId>
<artifactId>morphia-logging-slf4j</artifactId>
<groupId>dev.morphia.morphia</groupId>
<artifactId>logging-slf4j</artifactId>
<version>${morphia.version}</version>
<exclusions>
<exclusion>
Expand All @@ -51,6 +62,12 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${javax.validation.version}</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.seedstack.seed</groupId>
Expand All @@ -73,7 +90,7 @@
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
<version>5.4.3.Final</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
20 changes: 20 additions & 0 deletions morphia/src/license/THIRD-PARTY.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
#-------------------------------------------------------------------------------
# Already used licenses in project :
# - Apache 2
# - BSD
# - CDDL
# - IGNORED_LICENSE
# - LGPL 3.0
# - MIT License
# - MPL 2.0
# - Public Domain
# - The MIT License (MIT)
# - WTFPL
#-------------------------------------------------------------------------------
# Please fill the missing licenses for dependencies :
#
#
#Fri Jan 31 12:24:04 CET 2020
dev.morphia.morphia--core--1.5.8=Apache 2
dev.morphia.morphia--logging-slf4j--1.5.8=Apache 2
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,28 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

package org.seedstack.mongodb.morphia;

import static com.google.common.base.Preconditions.checkArgument;

import static java.util.Spliterators.spliteratorUnknownSize;

import com.mongodb.DBCollection;
import dev.morphia.Datastore;
import dev.morphia.query.CountOptions;
import dev.morphia.query.CriteriaContainer;
import dev.morphia.query.FindOptions;
import dev.morphia.query.Query;
import dev.morphia.query.Sort;
import dev.morphia.query.internal.MorphiaCursor;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Spliterator;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import javax.inject.Inject;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.mapping.Mapper;
import org.mongodb.morphia.query.CountOptions;
import org.mongodb.morphia.query.CriteriaContainer;
import org.mongodb.morphia.query.FindOptions;
import org.mongodb.morphia.query.Query;
import org.mongodb.morphia.query.Sort;
import org.seedstack.business.domain.AggregateExistsException;
import org.seedstack.business.domain.AggregateNotFoundException;
import org.seedstack.business.domain.AggregateRoot;
Expand All @@ -42,6 +47,7 @@
* @param <ID> Identifier class.
*/
public abstract class BaseMorphiaRepository<A extends AggregateRoot<ID>, ID> extends BaseRepository<A, ID> {
public static final String ID_KEY = "_id";
private Datastore datastore;
private SpecificationTranslator<MorphiaTranslationContext, CriteriaContainer> specificationTranslator;

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

@Override
public Stream<A> get(Specification<A> specification, Option... options) {
return buildQuery(specification, options).asList(buildFindOptions(options)).stream();
final MorphiaCursor<A> cursor = buildQuery(specification, options).find(buildFindOptions(options));
return StreamSupport.stream(spliteratorUnknownSize(cursor, Spliterator.ORDERED), false)
.onClose(cursor::close);
}

@Override
public Optional<A> get(ID id) {
return Optional.ofNullable(datastore.get(getAggregateRootClass(), id));
return Optional.ofNullable(datastore.createQuery(getAggregateRootClass()).first());
}

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

@Override
public boolean contains(ID id) {
return datastore.find(getAggregateRootClass()).filter(Mapper.ID_KEY, id).count(new CountOptions().limit(1)) > 0;
return datastore.find(getAggregateRootClass()).filter(ID_KEY, id).count(new CountOptions().limit(1)) > 0;
}

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

@Override
public long size() {
return datastore.getCount(getAggregateRootClass());
return datastore.createQuery(getAggregateRootClass()).count();
}

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

@Override
public void remove(ID id) throws AggregateNotFoundException {
checkExactlyOneAggregateRemoved(datastore.delete(getAggregateRootClass(), id).getN(), id);
checkExactlyOneAggregateRemoved(
datastore.delete(datastore.find(getAggregateRootClass()).filter(ID_KEY, id)).getN(),
id);
}

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

@Override
public void clear() {
datastore.getCollection(getAggregateRootClass()).drop();
datastore.getCollection(getAggregateRootClass()).dropIndexes();
DBCollection collection = datastore.getCollection(getAggregateRootClass());
collection.drop();
collection.dropIndexes();
}

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

private void applySort(Query query, SortOption sortOption) {
private void applySort(Query<?> query, SortOption sortOption) {
List<Sort> sorts = new ArrayList<>();
for (SortOption.SortedAttribute sortedAttribute : sortOption.getSortedAttributes()) {
switch (sortedAttribute.getDirection()) {
Expand All @@ -202,6 +213,6 @@ private void applySort(Query query, SortOption sortOption) {
"Unsupported sort direction " + sortedAttribute.getDirection());
}
}
query.order(sorts.toArray(new Sort[sorts.size()]));
query.order(sorts.toArray(new Sort[0]));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,22 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

package org.seedstack.mongodb.morphia.internal;

import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.createDatastoreAnnotation;
import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.getMongoClientConfig;

import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.name.Names;
import com.mongodb.MongoClient;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.Morphia;
import dev.morphia.Datastore;
import dev.morphia.Morphia;
import javax.inject.Inject;
import org.seedstack.mongodb.morphia.MorphiaDatastore;
import org.seedstack.seed.Application;

import javax.inject.Inject;

import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.createDatastoreAnnotation;
import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.getMongoClientConfig;

public class DatastoreFactory {
private final Application application;
private final Injector injector;
Expand All @@ -46,7 +46,7 @@ public Datastore createDatastore(String clientName, String dbName) {
dbName
)
);
datastore.ensureIndexes(true);
datastore.ensureIndexes();
datastore.ensureCaps();
return datastore;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
package org.seedstack.mongodb.morphia.internal;

import com.google.inject.Provider;
import org.mongodb.morphia.Datastore;
import dev.morphia.Datastore;
import org.seedstack.mongodb.morphia.MorphiaDatastore;

import javax.inject.Inject;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
import com.google.inject.Key;
import com.google.inject.Scopes;
import java.util.Collection;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.Morphia;
import java.util.Collection;
import dev.morphia.Datastore;
import dev.morphia.Morphia;
import org.seedstack.mongodb.morphia.MorphiaDatastore;

class MorphiaModule extends AbstractModule {
private final Collection<MorphiaDatastore> morphiaDatastoresAnnotation;
private final Morphia morphia;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
import io.nuun.kernel.api.plugin.request.ClasspathScanRequest;
import java.util.Collection;
import java.util.HashSet;
import org.mongodb.morphia.Morphia;
import java.util.Collection;
import java.util.HashSet;
import dev.morphia.Morphia;
import org.seedstack.mongodb.morphia.MorphiaDatastore;
import org.seedstack.seed.Application;
import org.seedstack.seed.core.internal.AbstractSeedPlugin;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
package org.seedstack.mongodb.morphia.internal;

import org.kametic.specifications.Specification;
import org.mongodb.morphia.annotations.Embedded;
import org.mongodb.morphia.annotations.Entity;
import dev.morphia.annotations.Embedded;
import dev.morphia.annotations.Entity;
import org.seedstack.seed.core.internal.utils.SpecificationBuilder;

import java.lang.reflect.Modifier;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

package org.seedstack.mongodb.morphia.internal;

import com.mongodb.DBObject;
import java.util.Set;
import javax.inject.Inject;
import javax.validation.ConstraintViolation;
import javax.validation.ValidatorFactory;
import org.mongodb.morphia.AbstractEntityInterceptor;
import org.mongodb.morphia.mapping.Mapper;
import org.seedstack.seed.core.internal.validation.VerboseConstraintViolationException;
import dev.morphia.AbstractEntityInterceptor;
import dev.morphia.mapping.Mapper;

class ValidatingEntityInterceptor extends AbstractEntityInterceptor {
@Inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
package org.seedstack.mongodb.morphia.internal.specification;

import java.util.Arrays;
import org.mongodb.morphia.query.Criteria;
import org.mongodb.morphia.query.CriteriaContainer;
import dev.morphia.query.Criteria;
import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.AndSpecification;
import org.seedstack.business.spi.SpecificationConverter;
import org.seedstack.business.spi.SpecificationTranslator;
Expand Down
Loading

0 comments on commit 86aaddf

Please sign in to comment.