diff --git a/CHANGELOG.md b/CHANGELOG.md index 0345ab4..0815c94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# Version 1.1.0 (?) + +* [new] Add Bean Validation support to Morphia (at pre-persist) + # Version 1.0.1 (2016-02-09) * [fix] Flawed release process made this add-on unusable by clients diff --git a/core/pom.xml b/core/pom.xml index d835d1c..7aa071c 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -14,7 +14,7 @@ org.seedstack.addons.mongodb mongodb - 1.0.1-SNAPSHOT + 1.1.0-SNAPSHOT mongodb-core diff --git a/morphia/pom.xml b/morphia/pom.xml index 7c489b9..34a7f64 100644 --- a/morphia/pom.xml +++ b/morphia/pom.xml @@ -14,7 +14,7 @@ org.seedstack.addons.mongodb mongodb - 1.0.1-SNAPSHOT + 1.1.0-SNAPSHOT mongodb-morphia @@ -31,17 +31,47 @@ ${business.version} true - - org.mongodb.morphia - morphia - ${morphia.version} - + + org.mongodb.morphia + morphia + ${morphia.version} + + + org.mongodb.morphia + morphia-logging-slf4j + ${morphia.version} + + + org.seedstack.addons.validation + validation + ${validation-addon.version} + true + + + javax.validation + validation-api + 1.1.0.Final + provided + + org.seedstack.seed seed-testing ${seed.version} test + + org.hibernate + hibernate-validator + 5.1.3.Final + test + + + javax.el + javax.el-api + 2.2.5 + test + ch.qos.logback logback-classic @@ -53,13 +83,13 @@ business-core ${business.version} test - + org.mongodb mongodb-driver-async ${mongodb.version} test - + diff --git a/morphia/src/it/java/org/seedstack/mongodb/morphia/MorphiaIT.java b/morphia/src/it/java/org/seedstack/mongodb/morphia/MorphiaIT.java index b3dec22..80c48ed 100644 --- a/morphia/src/it/java/org/seedstack/mongodb/morphia/MorphiaIT.java +++ b/morphia/src/it/java/org/seedstack/mongodb/morphia/MorphiaIT.java @@ -7,26 +7,35 @@ */ package org.seedstack.mongodb.morphia; +import com.google.inject.Inject; import org.assertj.core.api.Assertions; import org.junit.Test; import org.mongodb.morphia.Datastore; import org.mongodb.morphia.Key; -import org.seedstack.seed.it.AbstractSeedIT; import org.seedstack.mongodb.morphia.fixtures.user.Address; import org.seedstack.mongodb.morphia.fixtures.user.User; +import org.seedstack.seed.it.AbstractSeedIT; -import com.google.inject.Inject; +import javax.validation.ConstraintViolationException; + +import static org.assertj.core.api.Fail.fail; + +public class MorphiaIT extends AbstractSeedIT { + @Inject + @MorphiaDatastore(clientName = "client1", dbName = "db1") + private Datastore datastore; + @Test + public void datastore_test() { + User user = new User(1L, "Gerard", "menvuça", new Address("France", "78300", "Poissy", "avenue de l'europe", 1)); + Key keyUser = datastore.save(user); + Assertions.assertThat(keyUser).isNotNull(); + } -public class MorphiaIT extends AbstractSeedIT{ - @Inject - @MorphiaDatastore(clientName = "client1",dbName="db1") - private Datastore datastore; - - @Test - public void datastore_test(){ - User user = new User(1L,"Gerard", "menvuça", new Address("France", "78300", "Poissy", "avenue de l'europe", 1)); - Key keyUser = datastore.save(user); - Assertions.assertThat(keyUser).isNotNull(); - } + @Test(expected = ConstraintViolationException.class) + public void validation_is_working() { + User user = new User(1L, null, "menvuça", new Address("France", "78300", "Poissy", "avenue de l'europe", 1)); + datastore.save(user); + fail("should not have saved"); + } } diff --git a/morphia/src/it/java/org/seedstack/mongodb/morphia/MorphiaRepositoryIT.java b/morphia/src/it/java/org/seedstack/mongodb/morphia/MorphiaRepositoryIT.java index a3bdfc7..cec7d40 100644 --- a/morphia/src/it/java/org/seedstack/mongodb/morphia/MorphiaRepositoryIT.java +++ b/morphia/src/it/java/org/seedstack/mongodb/morphia/MorphiaRepositoryIT.java @@ -7,126 +7,135 @@ */ package org.seedstack.mongodb.morphia; -import com.google.inject.*; +import com.google.inject.Inject; +import com.google.inject.Injector; +import com.google.inject.Key; +import com.google.inject.ProvisionException; +import com.google.inject.TypeLiteral; import com.google.inject.util.Types; import org.assertj.core.api.Assertions; import org.junit.Test; import org.seedstack.business.domain.Repository; +import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy1; +import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy2; +import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy3; +import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy4; +import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy5; +import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy6; +import org.seedstack.mongodb.morphia.fixtures.user.Address; +import org.seedstack.mongodb.morphia.fixtures.user.User; import org.seedstack.mongodb.morphia.internal.MorphiaErrorCodes; import org.seedstack.seed.SeedException; import org.seedstack.seed.it.AbstractSeedIT; -import org.seedstack.mongodb.morphia.fixtures.dummyobject.*; -import org.seedstack.mongodb.morphia.fixtures.user.Address; -import org.seedstack.mongodb.morphia.fixtures.user.User; public class MorphiaRepositoryIT extends AbstractSeedIT { - @Inject - @Morphia - private Repository userRepository; + @Inject + @Morphia + private Repository userRepository; + + @Inject + private Injector injector; - @Inject - private Injector injector; + @Test + public void repository_injection_test_no_client_for_aggregate() { + try { - @Test - public void repository_injection_test_no_client_for_aggregate() { - try { + injector.getInstance( + Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, Dummy1.class, Long.class)), + Morphia.class)); + } catch (ProvisionException e) { + Assertions.assertThat(e.getCause().getMessage()) + .isEqualTo(SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_CLIENT).getMessage()); + } + } - injector.getInstance( - Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, Dummy1.class, Long.class)), - Morphia.class)); - } catch (ProvisionException e) { - Assertions.assertThat(e.getCause().getMessage()) - .isEqualTo(SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_CLIENT).getMessage()); - } - } + @Test + public void repository_injection_test_no_dbName_for_aggregate() { + try { + injector.getInstance( + Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, Dummy2.class, Long.class)), + Morphia.class)); + } catch (ProvisionException e) { + Assertions.assertThat(e.getCause().getMessage()) + .isEqualTo(SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_DATABASE).getMessage()); + } + } - @Test - public void repository_injection_test_no_dbName_for_aggregate() { - try { - injector.getInstance( - Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, Dummy2.class, Long.class)), - Morphia.class)); - } catch (ProvisionException e) { - Assertions.assertThat(e.getCause().getMessage()) - .isEqualTo(SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_DATABASE).getMessage()); - } - } + @Test + public void repository_injection_test_no_mongoDb_client() { + try { + injector.getInstance( + Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, Dummy3.class, Long.class)), + Morphia.class)); + } catch (ProvisionException e) { + Assertions.assertThat(e.getCause().getMessage()) + .isEqualTo(SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_CLIENT).getMessage()); + } + } - @Test - public void repository_injection_test_no_mongoDb_client() { - try { - injector.getInstance( - Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, Dummy3.class, Long.class)), - Morphia.class)); - } catch (ProvisionException e) { - Assertions.assertThat(e.getCause().getMessage()) - .isEqualTo(SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_CLIENT).getMessage()); - } - } + @Test + public void repository_injection_test_no_mongoDb_database() { + try { + injector.getInstance( + Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, Dummy4.class, Long.class)), + Morphia.class)); + } catch (ProvisionException e) { + Assertions.assertThat(e.getCause().getMessage()) + .isEqualTo(SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATABASE_NAME).getMessage()); + } + } - @Test - public void repository_injection_test_no_mongoDb_database() { - try { - injector.getInstance( - Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, Dummy4.class, Long.class)), - Morphia.class)); - } catch (ProvisionException e) { - Assertions.assertThat(e.getCause().getMessage()) - .isEqualTo(SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATABASE_NAME).getMessage()); - } - } + @Test + public void repository_injection_test_no_mongodb_for_aggregate() { + try { + injector.getInstance( + Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, Dummy5.class, Long.class)), + Morphia.class)); + } catch (ProvisionException e) { + Assertions.assertThat(e.getCause().getMessage()) + .isEqualTo(SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_CONFIGURATION).getMessage()); + } + } - @Test - public void repository_injection_test_no_mongodb_for_aggregate() { - try { - injector.getInstance( - Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, Dummy5.class, Long.class)), - Morphia.class)); - } catch (ProvisionException e) { - Assertions.assertThat(e.getCause().getMessage()) - .isEqualTo(SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_CONFIGURATION).getMessage()); - } - } + @Test + public void repository_injection_async_client() { + try { + injector.getInstance( + Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, Dummy6.class, Long.class)), + Morphia.class)); + } catch (ProvisionException e) { + Assertions.assertThat(e.getCause().getMessage()) + .isEqualTo(SeedException.createNew(MorphiaErrorCodes.ERROR_ASYNC_CLIENT).getMessage()); + } + } - @Test - public void repository_injection_async_client() { - try { - injector.getInstance( - Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, Dummy6.class, Long.class)), - Morphia.class)); - } catch (ProvisionException e) { - Assertions.assertThat(e.getCause().getMessage()) - .isEqualTo(SeedException.createNew(MorphiaErrorCodes.ERROR_ASYNC_CLIENT).getMessage()); - } - } + @Test + public void mongodb_repository_test() { + Assertions.assertThat(userRepository).isNotNull(); + User user1 = getUser(1L, "N°", "1"); + userRepository.persist(user1); + User user2 = userRepository.load(user1.getEntityId()); + Assertions.assertThat(user1.getId()).isEqualTo(user2.getId()); + Assertions.assertThat(user1.getEntityId()).isEqualTo(user2.getEntityId()); + userRepository.delete(user1); + User user3 = userRepository.load(user1.getEntityId()); + Assertions.assertThat(user3).isEqualTo(null); + User user5 = getUser(2L, "N°", "2"); + userRepository.delete(user5); + userRepository.save(user5); + User user6 = userRepository.load(user5.getEntityId()); + Assertions.assertThat(user6.getId()).isEqualTo(user5.getId()); + userRepository.delete(user5); + user6 = userRepository.load(user5.getEntityId()); + Assertions.assertThat(user6).isEqualTo(null); + userRepository.persist(user5); + Assertions.assertThat(userRepository.load(2L)).isNotEqualTo(null); + } - @Test - public void mongodb_repository_test() { - Assertions.assertThat(userRepository).isNotNull(); - User user1 = getUser(1L, "N°", "1"); - userRepository.persist(user1); - User user2 = userRepository.load(user1.getEntityId()); - Assertions.assertThat(user1.getId()).isEqualTo(user2.getId()); - Assertions.assertThat(user1.getEntityId()).isEqualTo(user2.getEntityId()); - userRepository.delete(user1); - User user3 = userRepository.load(user1.getEntityId()); - Assertions.assertThat(user3).isEqualTo(null); - User user5 = getUser(2L, "N°", "2"); - userRepository.delete(user5); - userRepository.save(user5); - User user6 = userRepository.load(user5.getEntityId()); - Assertions.assertThat(user6.getId()).isEqualTo(user5.getId()); - userRepository.delete(user5); - user6 = userRepository.load(user5.getEntityId()); - Assertions.assertThat(user6).isEqualTo(null); - userRepository.persist(user5); - Assertions.assertThat(userRepository.load(2L)).isNotEqualTo(null); - } - - public User getUser(long id, String firstname, String lastName) { - return new User(id, firstname, lastName, new Address("France", "75001", "Paris", "Champ Elysee avenue", 1)); - } + public User getUser(long id, String firstname, String lastName) { + return new User(id, firstname, lastName, new Address("France", "75001", "Paris", "Champ Elysee avenue", 1)); + } } diff --git a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy1.java b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy1.java index 025b50d..88b6892 100644 --- a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy1.java +++ b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy1.java @@ -11,9 +11,9 @@ public class Dummy1 extends BaseAggregateRoot { - @Override - public Long getEntityId() { - return null; - } + @Override + public Long getEntityId() { + return null; + } } diff --git a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy2.java b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy2.java index fe0c315..261d011 100644 --- a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy2.java +++ b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy2.java @@ -9,11 +9,11 @@ import org.seedstack.business.domain.BaseAggregateRoot; -public class Dummy2 extends BaseAggregateRoot { +public class Dummy2 extends BaseAggregateRoot { - @Override - public Long getEntityId() { - return null; - } + @Override + public Long getEntityId() { + return null; + } } diff --git a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy3.java b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy3.java index 470f861..8508d6e 100644 --- a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy3.java +++ b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy3.java @@ -9,11 +9,11 @@ import org.seedstack.business.domain.BaseAggregateRoot; -public class Dummy3 extends BaseAggregateRoot { +public class Dummy3 extends BaseAggregateRoot { - @Override - public Long getEntityId() { - return null; - } + @Override + public Long getEntityId() { + return null; + } } diff --git a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy4.java b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy4.java index 818315d..51780aa 100644 --- a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy4.java +++ b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy4.java @@ -11,10 +11,9 @@ public class Dummy4 extends BaseAggregateRoot { - @Override - public Long getEntityId() { - // TODO Auto-generated method stub - return null; - } + @Override + public Long getEntityId() { + return null; + } } diff --git a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy5.java b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy5.java index b512472..33906be 100644 --- a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy5.java +++ b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy5.java @@ -11,10 +11,9 @@ public class Dummy5 extends BaseAggregateRoot { - @Override - public Long getEntityId() { - // TODO Auto-generated method stub - return null; - } + @Override + public Long getEntityId() { + return null; + } } \ No newline at end of file diff --git a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy6.java b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy6.java index 31000b6..ed87007 100644 --- a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy6.java +++ b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/dummyobject/Dummy6.java @@ -11,10 +11,9 @@ public class Dummy6 extends BaseAggregateRoot { - @Override - public Long getEntityId() { - // TODO Auto-generated method stub - return null; - } + @Override + public Long getEntityId() { + return null; + } } \ No newline at end of file diff --git a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/user/Address.java b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/user/Address.java index 225d1d9..c87bebe 100644 --- a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/user/Address.java +++ b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/user/Address.java @@ -11,57 +11,66 @@ import org.seedstack.business.domain.ValueObject; @Embedded -public class Address implements ValueObject{ - private String country; - private String zipcode; - private String city; - private String street; - private Integer number; - - - - public Address() { - super(); - } - public Address(String country, String zipcode, String city, String street, Integer number) { - super(); - this.country = country; - this.zipcode = zipcode; - this.city = city; - this.street = street; - this.number = number; - } - public String getCountry() { - return country; - } - public void setCountry(String country) { - this.country = country; - } - public String getZipcode() { - return zipcode; - } - public void setZipcode(String zipcode) { - this.zipcode = zipcode; - } - public String getCity() { - return city; - } - public void setCity(String city) { - this.city = city; - } - public String getStreet() { - return street; - } - public void setStreet(String street) { - this.street = street; - } - public Integer getNumber() { - return number; - } - public void setNumber(Integer number) { - this.number = number; - } - - - +public class Address implements ValueObject { + private String country; + private String zipCode; + private String city; + private String street; + private Integer number; + + + public Address() { + super(); + } + + public Address(String country, String zipCode, String city, String street, Integer number) { + super(); + this.country = country; + this.zipCode = zipCode; + this.city = city; + this.street = street; + this.number = number; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getZipCode() { + return zipCode; + } + + public void setZipCode(String zipCode) { + this.zipCode = zipCode; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public Integer getNumber() { + return number; + } + + public void setNumber(Integer number) { + this.number = number; + } + + } diff --git a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/user/User.java b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/user/User.java index 659d867..cd82f20 100644 --- a/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/user/User.java +++ b/morphia/src/it/java/org/seedstack/mongodb/morphia/fixtures/user/User.java @@ -11,70 +11,69 @@ import org.mongodb.morphia.annotations.Id; import org.seedstack.business.domain.AggregateRoot; +import javax.validation.constraints.NotNull; + @Entity -public class User implements AggregateRoot{ - - - - public User() { - super(); - // TODO Auto-generated constructor stub - } - - public User(long id, String name, String lastname, Address address) { - super(); - this.id = id; - this.name = name; - this.lastname = lastname; - this.address = address; - } - - @Id - private long id; - - private String name; - - private String lastname; - - private Address address; - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getLastname() { - return lastname; - } - - public void setLastname(String lastname) { - this.lastname = lastname; - } - - public Address getAddress() { - return address; - } - - public void setAddress(Address address) { - this.address = address; - } - - @Override - public Long getEntityId() { - return id; - } - - +public class User implements AggregateRoot { + + + public User() { + } + + public User(long id, String name, String lastName, Address address) { + this.id = id; + this.name = name; + this.lastname = lastName; + this.address = address; + } + + @Id + private long id; + + @NotNull + private String name; + + private String lastname; + + private Address address; + + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLastname() { + return lastname; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public Address getAddress() { + return address; + } + + public void setAddress(Address address) { + this.address = address; + } + + @Override + public Long getEntityId() { + return id; + } + + } diff --git a/morphia/src/it/resources/logback-test.xml b/morphia/src/it/resources/logback-test.xml index a92e301..06dda42 100644 --- a/morphia/src/it/resources/logback-test.xml +++ b/morphia/src/it/resources/logback-test.xml @@ -15,6 +15,6 @@ - + \ No newline at end of file diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseMorphiaRepository.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseMorphiaRepository.java index 072b466..e698e19 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseMorphiaRepository.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseMorphiaRepository.java @@ -13,56 +13,54 @@ import org.mongodb.morphia.Datastore; import org.seedstack.business.domain.AggregateRoot; import org.seedstack.business.domain.BaseRepository; -import org.seedstack.mongodb.morphia.internal.MorphiaPlugin; +import org.seedstack.mongodb.morphia.internal.MorphiaUtils; import org.seedstack.seed.Application; /** * This class serves as inheritance base for the Mongodb repositories. * - * @param - * Mongodb Entity Type (DDD: Aggregate) - * @param - * key type + * @param Mongodb Entity Type (DDD: Aggregate) + * @param key type * @author redouane.loulou@ext.mpsa.com Date: 20/10/2015 */ public abstract class BaseMorphiaRepository, K> extends BaseRepository { - private Datastore datastore; + private Datastore datastore; - protected Datastore getDatastore() { - return datastore; - } + protected Datastore getDatastore() { + return datastore; + } - @Inject - private void initDatastore(Application application, Injector injector) { - datastore = injector.getInstance(Key.get(Datastore.class, MorphiaPlugin.getMongoDatastore(application, aggregateRootClass))); - } + @Inject + private void initDatastore(Application application, Injector injector) { + datastore = injector.getInstance(Key.get(Datastore.class, MorphiaUtils.getMongoDatastore(application, aggregateRootClass))); + } - @Override - protected A doLoad(K id) { - return datastore.get(aggregateRootClass, id); - } + @Override + protected A doLoad(K id) { + return datastore.get(aggregateRootClass, id); + } - @Override - protected void doDelete(K id) { - datastore.delete(aggregateRootClass, id); - } + @Override + protected void doDelete(K id) { + datastore.delete(aggregateRootClass, id); + } - @Override - protected void doDelete(A aggregate) { - datastore.delete(aggregate); + @Override + protected void doDelete(A aggregate) { + datastore.delete(aggregate); - } + } - @Override - protected void doPersist(A aggregate) { - datastore.save(aggregate); + @Override + protected void doPersist(A aggregate) { + datastore.save(aggregate); - } + } - @Override - protected A doSave(A aggregate) { - return datastore.get(aggregateRootClass, datastore.save(aggregate).getId()); - } + @Override + protected A doSave(A aggregate) { + return datastore.get(aggregateRootClass, datastore.save(aggregate).getId()); + } } \ No newline at end of file diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/MorphiaDatastore.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/MorphiaDatastore.java index 1bde3ae..3958dd4 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/MorphiaDatastore.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/MorphiaDatastore.java @@ -7,14 +7,14 @@ */ package org.seedstack.mongodb.morphia; +import com.google.inject.BindingAnnotation; + import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.google.inject.BindingAnnotation; - /** * This qualifier marks the use of the Mongodb persistence. * @@ -23,9 +23,10 @@ */ @Documented @Retention(RetentionPolicy.RUNTIME) -@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD }) +@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD}) @BindingAnnotation public @interface MorphiaDatastore { - String clientName(); - String dbName(); + String clientName(); + + String dbName(); } \ No newline at end of file diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreProvider.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreProvider.java index ce8801d..ae521c9 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreProvider.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreProvider.java @@ -7,47 +7,45 @@ */ package org.seedstack.mongodb.morphia.internal; -import org.mongodb.morphia.Datastore; -import org.mongodb.morphia.Morphia; -import org.seedstack.seed.Application; -import org.seedstack.mongodb.morphia.MorphiaDatastore; - import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.Provider; import com.google.inject.name.Names; import com.mongodb.MongoClient; +import org.mongodb.morphia.Datastore; +import org.mongodb.morphia.Morphia; +import org.seedstack.mongodb.morphia.MorphiaDatastore; +import org.seedstack.seed.Application; + /** - * * @author redouane.loulou@ext.mpsa.com - * */ class DatastoreProvider implements Provider { - @Inject - private Injector injector; + @Inject + private Injector injector; - @Inject - private Application application; + @Inject + private Application application; - private Class mappedclass; + private Class mappedclass; - private MorphiaDatastore morphiaDatastore; + private MorphiaDatastore morphiaDatastore; - private final Morphia morphia; + private final Morphia morphia; - @Override - public Datastore get() { - MongoClient mongoClient = injector - .getInstance(Key.get(MongoClient.class, Names.named(morphiaDatastore.clientName()))); - return morphia.createDatastore(mongoClient, morphiaDatastore.dbName()); - } + @Override + public Datastore get() { + MongoClient mongoClient = injector + .getInstance(Key.get(MongoClient.class, Names.named(morphiaDatastore.clientName()))); + return morphia.createDatastore(mongoClient, morphiaDatastore.dbName()); + } - public DatastoreProvider(MorphiaDatastore morphiaDatastore, Morphia morphia) { - super(); - this.morphiaDatastore = morphiaDatastore; - this.morphia = morphia; - } + public DatastoreProvider(MorphiaDatastore morphiaDatastore, Morphia morphia) { + super(); + this.morphiaDatastore = morphiaDatastore; + this.morphia = morphia; + } } diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DefaultMorphiaRepository.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DefaultMorphiaRepository.java index facd5f4..7204367 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DefaultMorphiaRepository.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DefaultMorphiaRepository.java @@ -7,15 +7,14 @@ */ package org.seedstack.mongodb.morphia.internal; -import javax.inject.Inject; - +import com.google.inject.assistedinject.Assisted; import org.seedstack.business.domain.AggregateRoot; import org.seedstack.business.spi.GenericImplementation; import org.seedstack.mongodb.morphia.BaseMorphiaRepository; -import org.seedstack.seed.core.utils.SeedCheckUtils; import org.seedstack.mongodb.morphia.Morphia; +import org.seedstack.seed.core.utils.SeedCheckUtils; -import com.google.inject.assistedinject.Assisted; +import javax.inject.Inject; /** * Default Morphia implementation for Repository. Used only when no implementation is provided for an aggregate. diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/InternalValidationExtension.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/InternalValidationExtension.java new file mode 100644 index 0000000..4946657 --- /dev/null +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/InternalValidationExtension.java @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2013-2016, The SeedStack authors + * + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 org.mongodb.morphia.AbstractEntityInterceptor; +import org.mongodb.morphia.Morphia; +import org.mongodb.morphia.mapping.Mapper; +import org.seedstack.validation.api.VerboseConstraintViolationException; + +import javax.validation.ValidatorFactory; +import java.util.Set; + +class InternalValidationExtension extends AbstractEntityInterceptor { + private final ValidatorFactory validatorFactory; + + InternalValidationExtension(final ValidatorFactory validatorFactory, final Morphia morphia) { + this.validatorFactory = validatorFactory; + morphia.getMapper().addInterceptor(this); + } + + @Override + @SuppressWarnings("unchecked") + public void prePersist(final Object ent, final DBObject dbObj, final Mapper mapper) { + final Set result = validatorFactory.getValidator().validate(ent); + if (!result.isEmpty()) { + throw new VerboseConstraintViolationException(result); + } + } +} diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaDatastoreImpl.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaDatastoreImpl.java index da45bef..6359e64 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaDatastoreImpl.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaDatastoreImpl.java @@ -7,68 +7,67 @@ */ package org.seedstack.mongodb.morphia.internal; +import org.seedstack.mongodb.morphia.MorphiaDatastore; + import java.io.Serializable; import java.lang.annotation.Annotation; -import org.seedstack.mongodb.morphia.MorphiaDatastore; /** - * * @author redouane.loulou@ext.mpsa.com - * */ -class MorphiaDatastoreImpl implements MorphiaDatastore, Serializable { +class MorphiaDatastoreImpl implements MorphiaDatastore, Serializable { + + private static final long serialVersionUID = 3861460142806494075L; + private String clientName; + private String dbName; - private static final long serialVersionUID = 3861460142806494075L; - private String clientName; - private String dbName; + public MorphiaDatastoreImpl(String clientName, String dbName) { + this.clientName = clientName; + this.dbName = dbName; + } - public MorphiaDatastoreImpl(String clientName, String dbName) { - this.clientName = clientName; - this.dbName = dbName; - } + @Override + public Class annotationType() { + return MorphiaDatastore.class; + } - @Override - public Class annotationType() { - return MorphiaDatastore.class; - } + @Override + public String dbName() { + return dbName; + } - @Override - public String dbName() { - return dbName; - } + @Override + public String clientName() { + return clientName; + } - @Override - public String clientName() { - return clientName; - } + @Override + public int hashCode() { + return ((127 * "clientName".hashCode()) ^ clientName.hashCode()) + + ((127 * "dbName".hashCode()) ^ dbName.hashCode()); + } - @Override - public int hashCode() { - return ((127 * "clientName".hashCode()) ^ clientName.hashCode()) - + ((127 * "dbName".hashCode()) ^ dbName.hashCode()); - } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (!(obj instanceof MorphiaDatastore)) + return false; + MorphiaDatastoreImpl other = (MorphiaDatastoreImpl) obj; + if (clientName == null) { + if (other.clientName != null) + return false; + } else if (!clientName.equals(other.clientName)) + return false; + if (dbName == null) { + if (other.dbName != null) + return false; + } else if (!dbName.equals(other.dbName)) + return false; + return true; + } - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (!(obj instanceof MorphiaDatastore)) - return false; - MorphiaDatastoreImpl other = (MorphiaDatastoreImpl) obj; - if (clientName == null) { - if (other.clientName != null) - return false; - } else if (!clientName.equals(other.clientName)) - return false; - if (dbName == null) { - if (other.dbName != null) - return false; - } else if (!dbName.equals(other.dbName)) - return false; - return true; - } - } \ No newline at end of file diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaErrorCodes.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaErrorCodes.java index 11439e7..8febaf7 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaErrorCodes.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaErrorCodes.java @@ -10,9 +10,7 @@ import org.seedstack.seed.ErrorCode; /** - * * @author redouane.loulou@ext.mpsa.com - * */ public enum MorphiaErrorCodes implements ErrorCode { UNKNOW_DATASTORE_CONFIGURATION, diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaModule.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaModule.java index d0a7541..32c522a 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaModule.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaModule.java @@ -6,45 +6,42 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /** - * + * */ package org.seedstack.mongodb.morphia.internal; -import java.util.Collection; - +import com.google.inject.AbstractModule; +import com.google.inject.Key; import org.mongodb.morphia.Datastore; import org.mongodb.morphia.Morphia; import org.seedstack.mongodb.morphia.MorphiaDatastore; -import com.google.inject.AbstractModule; -import com.google.inject.Key; +import java.util.Collection; /** * @author redouane.loulou@ext.mpsa.com - * */ -class MorphiaModule extends AbstractModule{ - - private Collection morphiaDatastoresAnnotation; - private final Morphia morphia; - - public MorphiaModule(Collection morphiaDatastoresAnnotation, Morphia morphia) { - super(); - this.morphiaDatastoresAnnotation = morphiaDatastoresAnnotation; - this.morphia = morphia; - } - - @Override - protected void configure() { - if(morphiaDatastoresAnnotation!=null && !morphiaDatastoresAnnotation.isEmpty()){ - for (MorphiaDatastore morphiaDatastore : morphiaDatastoresAnnotation) { - DatastoreProvider datastoreProvider = new DatastoreProvider(morphiaDatastore, morphia); - requestInjection(datastoreProvider); - bind(Key.get(Datastore.class, morphiaDatastore)).toProvider(datastoreProvider); - } - } - } - - - +class MorphiaModule extends AbstractModule { + + private Collection morphiaDatastoresAnnotation; + private final Morphia morphia; + + public MorphiaModule(Collection morphiaDatastoresAnnotation, Morphia morphia) { + super(); + this.morphiaDatastoresAnnotation = morphiaDatastoresAnnotation; + this.morphia = morphia; + } + + @Override + protected void configure() { + if (morphiaDatastoresAnnotation != null && !morphiaDatastoresAnnotation.isEmpty()) { + for (MorphiaDatastore morphiaDatastore : morphiaDatastoresAnnotation) { + DatastoreProvider datastoreProvider = new DatastoreProvider(morphiaDatastore, morphia); + requestInjection(datastoreProvider); + bind(Key.get(Datastore.class, morphiaDatastore)).toProvider(datastoreProvider); + } + } + } + + } diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaPlugin.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaPlugin.java index 598395c..e23e256 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaPlugin.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaPlugin.java @@ -12,52 +12,78 @@ import io.nuun.kernel.api.plugin.context.InitContext; import io.nuun.kernel.api.plugin.request.ClasspathScanRequest; import io.nuun.kernel.core.AbstractPlugin; -import org.apache.commons.configuration.Configuration; import org.kametic.specifications.Specification; import org.mongodb.morphia.Morphia; import org.mongodb.morphia.annotations.Embedded; import org.mongodb.morphia.annotations.Entity; import org.seedstack.mongodb.morphia.MorphiaDatastore; import org.seedstack.seed.Application; -import org.seedstack.seed.SeedException; import org.seedstack.seed.core.internal.application.ApplicationPlugin; import org.seedstack.seed.core.utils.BaseClassSpecifications; +import org.seedstack.seed.core.utils.SeedReflectionUtils; +import org.seedstack.validation.internal.ValidationPlugin; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.util.Arrays; +import javax.validation.ValidatorFactory; +import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import static org.seedstack.seed.core.utils.BaseClassSpecifications.classIsAbstract; /** - * - * @author redouane.loulou@ext.mpsa.com + * This plugin manages the MongoDb Morphia object/document mapping library. */ public class MorphiaPlugin extends AbstractPlugin { + private static final Logger logger = LoggerFactory.getLogger(MorphiaPlugin.class); - private static final Specification> MORPHIA_MAPPED_CLASSES_SPECS = morphiaSpecification(); - - private Collection morphiaDatastores = new HashSet(); - + private final Specification> MORPHIA_MAPPED_CLASSES_SPECS = morphiaSpecification(); + private final Collection morphiaDatastores = new HashSet(); private final Morphia morphia = new Morphia(); - @Override public String name() { return "morphia"; } + @Override + public Collection> requiredPlugins() { + ArrayList> requiredPlugins = Lists.>newArrayList(ApplicationPlugin.class, MongoDbPlugin.class); + if (isValidationPluginPresent()) { + requiredPlugins.add(ValidationPlugin.class); + } + return requiredPlugins; + } + + private boolean isValidationPluginPresent() { + return SeedReflectionUtils.isClassPresent("org.seedstack.validation.internal.ValidationPlugin"); + } + + @Override + public Collection classpathScanRequests() { + return classpathScanRequestBuilder().specification(MORPHIA_MAPPED_CLASSES_SPECS).build(); + } + @Override public InitState init(InitContext initContext) { Application application = initContext.dependency(ApplicationPlugin.class).getApplication(); + if (isValidationPluginPresent()) { + ValidatorFactory validatorFactory = initContext.dependency(ValidationPlugin.class).getValidatorFactory(); + if (validatorFactory != null) { + new InternalValidationExtension(validatorFactory, morphia); + logger.debug("Validation is enabled on Morphia entities"); + } + } + if (MORPHIA_MAPPED_CLASSES_SPECS != null) { Collection> morphiaScannedClasses = initContext.scannedTypesBySpecification().get(MORPHIA_MAPPED_CLASSES_SPECS); if (morphiaScannedClasses != null && !morphiaScannedClasses.isEmpty()) { morphia.map(new HashSet(morphiaScannedClasses)); for (Class morphiaClass : morphiaScannedClasses) { - MorphiaDatastore morphiaDatastore = getMongoDatastore(application, morphiaClass); + MorphiaDatastore morphiaDatastore = MorphiaUtils.getMongoDatastore(application, morphiaClass); if (!morphiaDatastores.contains(morphiaDatastore)) { morphiaDatastores.add(morphiaDatastore); } @@ -67,64 +93,13 @@ public InitState init(InitContext initContext) { return InitState.INITIALIZED; } - /** - * Returns an instance of the annotation MorphiaDatastore if the morphia configuration is ok. - * - * @param application Application - * @param morphiaClass persistent morphia object - * @return MorphiaDatastore - */ - public static MorphiaDatastore getMongoDatastore(Application application, Class morphiaClass) { - Configuration morphiaEntityConfiguration = application.getConfiguration(morphiaClass).subset("morphia"); - if (morphiaEntityConfiguration.isEmpty()) { - throw SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_CONFIGURATION).put("aggregate", - morphiaClass.getName()); - } - String clientName = morphiaEntityConfiguration.getString("clientName"); - String dbName = morphiaEntityConfiguration.getString("dbName"); - if (clientName == null) { - throw SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_CLIENT) - .put("aggregate", morphiaClass.getName()).put("clientName", clientName); - } - if (dbName == null) { - throw SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_DATABASE) - .put("aggregate", morphiaClass.getName()).put("clientName", clientName).put("dbName", dbName); - } - checkMongoClient(application.getConfiguration(), morphiaClass, clientName, dbName); - MorphiaDatastore morphiaDatastore = new MorphiaDatastoreImpl(clientName, dbName); - return morphiaDatastore; - } - - private static void checkMongoClient(Configuration configuration, Class mappedClass, String clientName, String dbName) { - Configuration configurationClientMongodb = configuration.subset(MongoDbPlugin.CONFIGURATION_PREFIX + ".client." + clientName); - if (configurationClientMongodb.isEmpty()) { - throw SeedException.createNew(MongoDbErrorCodes.UNKNOWN_CLIENT_SPECIFIED) - .put("aggregate", mappedClass.getName()).put("clientName", clientName).put("dbName", dbName); - } - boolean async = configurationClientMongodb.getBoolean("async", false); - if (async) { - throw SeedException.createNew(MorphiaErrorCodes.ERROR_ASYNC_CLIENT) - .put("aggregate", mappedClass.getName()).put("clientName", clientName).put("dbName", dbName); - } - String[] dbNames = configurationClientMongodb.getStringArray("databases"); - if (dbNames != null && dbNames.length > 0 && !Arrays.asList(dbNames).contains(dbName)) { - throw SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATABASE_NAME) - .put("aggregate", mappedClass.getName()).put("clientName", clientName).put("dbName", dbName); - } - } - - @Override - public Collection> requiredPlugins() { - return Lists.>newArrayList(ApplicationPlugin.class, MongoDbPlugin.class); - } - @Override - public Collection classpathScanRequests() { - return classpathScanRequestBuilder().specification(MORPHIA_MAPPED_CLASSES_SPECS).build(); + public Object nativeUnitModule() { + return new MorphiaModule(morphiaDatastores, morphia); } @SuppressWarnings("unchecked") - private static Specification> morphiaSpecification() { + private Specification> morphiaSpecification() { Specification> specification; specification = BaseClassSpecifications.and( BaseClassSpecifications.or(BaseClassSpecifications.classAnnotatedWith(Entity.class), @@ -133,11 +108,4 @@ private static Specification> morphiaSpecification() { return specification; } - - @Override - public Object nativeUnitModule() { - return new MorphiaModule(morphiaDatastores, morphia); - } - - } \ No newline at end of file diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaUtils.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaUtils.java new file mode 100644 index 0000000..0386ee5 --- /dev/null +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaUtils.java @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2013-2016, The SeedStack authors + * + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 org.apache.commons.configuration.Configuration; +import org.seedstack.mongodb.morphia.MorphiaDatastore; +import org.seedstack.seed.Application; +import org.seedstack.seed.SeedException; + +import java.util.Arrays; + +public final class MorphiaUtils { + private MorphiaUtils() { + + } + + /** + * Returns an instance of the annotation MorphiaDatastore if the morphia configuration is ok. + * + * @param application Application + * @param morphiaClass persistent morphia object + * @return MorphiaDatastore + */ + public static MorphiaDatastore getMongoDatastore(Application application, Class morphiaClass) { + Configuration morphiaEntityConfiguration = application.getConfiguration(morphiaClass).subset("morphia"); + if (morphiaEntityConfiguration.isEmpty()) { + throw SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_CONFIGURATION).put("aggregate", + morphiaClass.getName()); + } + String clientName = morphiaEntityConfiguration.getString("clientName"); + String dbName = morphiaEntityConfiguration.getString("dbName"); + if (clientName == null) { + throw SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_CLIENT) + .put("aggregate", morphiaClass.getName()).put("clientName", clientName); + } + if (dbName == null) { + throw SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATASTORE_DATABASE) + .put("aggregate", morphiaClass.getName()).put("clientName", clientName).put("dbName", dbName); + } + checkMongoClient(application.getConfiguration(), morphiaClass, clientName, dbName); + MorphiaDatastore morphiaDatastore = new MorphiaDatastoreImpl(clientName, dbName); + return morphiaDatastore; + } + + private static void checkMongoClient(Configuration configuration, Class mappedClass, String clientName, String dbName) { + Configuration configurationClientMongodb = configuration.subset(MongoDbPlugin.CONFIGURATION_PREFIX + ".client." + clientName); + if (configurationClientMongodb.isEmpty()) { + throw SeedException.createNew(MongoDbErrorCodes.UNKNOWN_CLIENT_SPECIFIED) + .put("aggregate", mappedClass.getName()).put("clientName", clientName).put("dbName", dbName); + } + boolean async = configurationClientMongodb.getBoolean("async", false); + if (async) { + throw SeedException.createNew(MorphiaErrorCodes.ERROR_ASYNC_CLIENT) + .put("aggregate", mappedClass.getName()).put("clientName", clientName).put("dbName", dbName); + } + String[] dbNames = configurationClientMongodb.getStringArray("databases"); + if (dbNames != null && dbNames.length > 0 && !Arrays.asList(dbNames).contains(dbName)) { + throw SeedException.createNew(MorphiaErrorCodes.UNKNOW_DATABASE_NAME) + .put("aggregate", mappedClass.getName()).put("clientName", clientName).put("dbName", dbName); + } + } +} diff --git a/morphia/src/test/resources/logback-test.xml b/morphia/src/test/resources/logback-test.xml index a92e301..06dda42 100644 --- a/morphia/src/test/resources/logback-test.xml +++ b/morphia/src/test/resources/logback-test.xml @@ -15,6 +15,6 @@ - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index ec5282a..ce158d5 100644 --- a/pom.xml +++ b/pom.xml @@ -19,14 +19,15 @@ org.seedstack.addons.mongodb mongodb - 1.0.1-SNAPSHOT + 1.1.0-SNAPSHOT pom 2.1.0 3.0.3 - 1.0.1 + 1.1.1 2.1.0 + 2.3.0-SNAPSHOT 1.0.0