From 480533704fd3a1ed84a12d8f954a4e7e87cbfdb2 Mon Sep 17 00:00:00 2001 From: xiabou Date: Tue, 16 Apr 2024 19:28:01 +0200 Subject: [PATCH 1/4] wip: Update Mongo driver to latest version --- core/pom.xml | 70 ++++---- .../mongodb/internal/MongoDbManager.java | 152 +++++++----------- .../mongodb/internal/MongoDbPlugin.java | 18 ++- .../java/org/seedstack/mongodb/MongoDbIT.java | 2 +- pom.xml | 8 +- 5 files changed, 112 insertions(+), 138 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index fce6ee6..c321463 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -8,43 +8,43 @@ --> - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - - org.seedstack.addons.mongodb - mongodb - 4.0.0-SNAPSHOT - + + org.seedstack.addons.mongodb + mongodb + 4.0.0-SNAPSHOT + mongodb-core - - - - org.mongodb - mongodb-driver-legacy - ${mongodb.version} - provided - - - - org.seedstack.seed - seed-testing-junit4 - ${seed.version} - test - - - org.assertj - assertj-core - ${assertj.version} - test - - - ch.qos.logback - logback-classic - ${logback.version} - test - - + + + + org.mongodb + mongodb-driver-sync + ${mongodb.version} + provided + + + + org.seedstack.seed + seed-testing-junit4 + ${seed.version} + test + + + org.assertj + assertj-core + ${assertj.version} + test + + + ch.qos.logback + logback-classic + ${logback.version} + test + + diff --git a/core/src/main/java/org/seedstack/mongodb/internal/MongoDbManager.java b/core/src/main/java/org/seedstack/mongodb/internal/MongoDbManager.java index 8ac2e8d..416a119 100644 --- a/core/src/main/java/org/seedstack/mongodb/internal/MongoDbManager.java +++ b/core/src/main/java/org/seedstack/mongodb/internal/MongoDbManager.java @@ -7,15 +7,12 @@ */ package org.seedstack.mongodb.internal; -import com.google.common.base.Preconditions; -import com.google.inject.Module; -import com.mongodb.AuthenticationMechanism; -import com.mongodb.MongoClient; -import com.mongodb.MongoClientOptions; -import com.mongodb.MongoClientURI; -import com.mongodb.MongoCredential; -import com.mongodb.ServerAddress; -import com.mongodb.client.MongoDatabase; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + import org.seedstack.coffig.BuilderSupplier; import org.seedstack.coffig.Coffig; import org.seedstack.mongodb.MongoDbConfig; @@ -23,22 +20,31 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import com.google.common.base.Preconditions; +import com.google.inject.Module; +import com.mongodb.ConnectionString; +import com.mongodb.MongoClientSettings; +import com.mongodb.ServerAddress; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; +import com.mongodb.client.MongoDatabase; class MongoDbManager { private static final Logger LOGGER = LoggerFactory.getLogger(MongoDbManager.class); private final Map mongoClients = new HashMap<>(); private final Map mongoDatabases = new HashMap<>(); - protected MongoClient doCreateClient(String clientName, MongoDbConfig.ClientConfig clientConfig, Coffig coffig) { + protected MongoClient doCreateClient( + String clientName, MongoDbConfig.ClientConfig clientConfig, Coffig coffig) { AllOptions allOptions = coffig.get(AllOptions.class, String.format("mongoDb.clients.%s", clientName)); if (clientConfig.isConfiguredByUri()) { - return new MongoClient(new MongoClientURI(clientConfig.getUri(), allOptions.options.get())); + return MongoClients.create( + allOptions.options + .get() + .applyConnectionString(new ConnectionString(clientConfig.getUri())) + .build()); } else { - return createMongoClient(clientName, clientConfig, allOptions.options.get().build()); + return createMongoClient(clientName, clientConfig, allOptions.options.get()); } } @@ -50,8 +56,10 @@ 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, + MongoClientSettings.Builder mongoClientSettingsBuilder) { List serverAddresses = buildServerAddresses(clientName, clientConfig.getHosts()); if (serverAddresses.isEmpty()) { @@ -59,23 +67,15 @@ private MongoClient createMongoClient(String clientName, MongoDbConfig.ClientCon .put("clientName", clientName); } - MongoCredential mongoCredential = buildMongoCredential(clientName, clientConfig.getCredentials()); - if (mongoCredential == null) { - if (serverAddresses.size() == 1) { - return new MongoClient(serverAddresses.get(0), mongoClientOptions); - } else { - return new MongoClient(serverAddresses, mongoClientOptions); - } - } else { - if (serverAddresses.size() == 1) { - return new MongoClient(serverAddresses.get(0), mongoCredential, mongoClientOptions); - } else { - return new MongoClient(serverAddresses, mongoCredential, mongoClientOptions); - } - } + ConnectionString connectionString = buildConnectionString(clientName, serverAddresses, + clientConfig.getCredentials()); + + return MongoClients.create(mongoClientSettingsBuilder.applyConnectionString(connectionString).build()); + } - public void registerClient(String clientName, MongoDbConfig.ClientConfig clientConfig, Coffig coffig) { + public void registerClient( + String clientName, MongoDbConfig.ClientConfig clientConfig, Coffig coffig) { LOGGER.info("Creating MongoDB client {}", clientName); mongoClients.put(clientName, doCreateClient(clientName, clientConfig, coffig)); } @@ -93,7 +93,10 @@ public void shutdown() { try { doClose(mongoClientEntry.getValue()); } catch (Exception e) { - LOGGER.error(String.format("Unable to properly close MongoDB client %s", mongoClientEntry.getKey()), e); + LOGGER.error( + String.format( + "Unable to properly close MongoDB client %s", mongoClientEntry.getKey()), + e); } } } finally { @@ -103,7 +106,29 @@ public void shutdown() { } public Module getModule() { - return new MongoDbModule<>(com.mongodb.MongoClient.class, MongoDatabase.class, mongoClients, mongoDatabases); + return new MongoDbModule<>( + com.mongodb.client.MongoClient.class, MongoDatabase.class, mongoClients, mongoDatabases); + } + + ConnectionString buildConnectionString(String clientName, List serverAddresses, + String mongoCredential) { + + StringBuilder builder = new StringBuilder(); + builder.append("mongodb://"); + + if (mongoCredential != null) { + builder.append(mongoCredential); + builder.append("@"); + } + if (serverAddresses.size() == 1) { + builder.append(serverAddresses.get(0)); + } else { + builder.append(serverAddresses.stream() + .map(x -> x.toString()) + .collect(Collectors.joining(","))); + } + LOGGER.info("Connection string", builder); + return new ConnectionString(builder.toString()); } List buildServerAddresses(String clientName, List addresses) { @@ -127,61 +152,8 @@ List buildServerAddresses(String clientName, List address return serverAddresses; } - MongoCredential buildMongoCredential(String clientName, String credential) { - if (credential == null || credential.isEmpty()) { - return null; - } else { - String[] elements = credential.split(":", 3); - if (elements.length == 3) { - String[] sourceElements = elements[0].split("/", 2); - if (sourceElements.length == 2) { - return buildMongoCredential(clientName, elements[1], elements[2], sourceElements[1], sourceElements[0]); - } else if (sourceElements.length == 1) { - return buildMongoCredential(clientName, elements[1], elements[2], sourceElements[0], null); - } else { - throw SeedException.createNew(MongoDbErrorCode.INVALID_CREDENTIAL_SYNTAX) - .put("credential", credential) - .put("clientName", clientName); - } - } else { - throw SeedException.createNew(MongoDbErrorCode.INVALID_CREDENTIAL_SYNTAX) - .put("credential", credential) - .put("clientName", clientName); - } - } - } - - MongoCredential buildMongoCredential(String clientName, String user, String password, String source, String mechanism) { - if (mechanism != null) { - AuthenticationMechanism authenticationMechanism = AuthenticationMechanism.fromMechanismName(mechanism); - switch (authenticationMechanism) { - case PLAIN: - return MongoCredential.createPlainCredential(user, source, password.toCharArray()); - case SCRAM_SHA_1: - return MongoCredential.createScramSha1Credential(user, source, password.toCharArray()); - case SCRAM_SHA_256: - return MongoCredential.createScramSha256Credential(user, source, password.toCharArray()); - case MONGODB_AWS: - return MongoCredential.createAwsCredential(user, password.toCharArray()); - case MONGODB_X509: - return MongoCredential.createMongoX509Credential(user); - case GSSAPI: - return MongoCredential.createGSSAPICredential(user); - default: - throw SeedException.createNew(MongoDbErrorCode.UNSUPPORTED_AUTHENTICATION_MECHANISM) - .put("clientName", clientName) - .put("mechanism", authenticationMechanism.getMechanismName()); - } - } else { - return MongoCredential.createCredential( - user, - source, - password.toCharArray() - ); - } - } - private static class AllOptions { - private BuilderSupplier options = BuilderSupplier.of(MongoClientOptions.builder()); + private BuilderSupplier options = BuilderSupplier + .of(MongoClientSettings.builder()); } } diff --git a/core/src/main/java/org/seedstack/mongodb/internal/MongoDbPlugin.java b/core/src/main/java/org/seedstack/mongodb/internal/MongoDbPlugin.java index 72bf828..4006d60 100644 --- a/core/src/main/java/org/seedstack/mongodb/internal/MongoDbPlugin.java +++ b/core/src/main/java/org/seedstack/mongodb/internal/MongoDbPlugin.java @@ -7,19 +7,21 @@ */ package org.seedstack.mongodb.internal; -import io.nuun.kernel.api.plugin.InitState; -import io.nuun.kernel.api.plugin.context.InitContext; +import java.util.HashSet; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + import org.seedstack.coffig.Coffig; import org.seedstack.mongodb.MongoDbConfig; +import org.seedstack.mongodb.MongoDbConfig.ClientConfig; import org.seedstack.seed.SeedException; import org.seedstack.seed.core.internal.AbstractSeedPlugin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.HashSet; -import java.util.Map; -import java.util.Optional; -import java.util.Set; +import io.nuun.kernel.api.plugin.InitState; +import io.nuun.kernel.api.plugin.context.InitContext; public class MongoDbPlugin extends AbstractSeedPlugin { private static final Logger LOGGER = LoggerFactory.getLogger(MongoDbPlugin.class); @@ -47,9 +49,9 @@ public InitState initialize(InitContext initContext) { MONGO_DB_MANAGER.registerClient(clientName, clientConfig, coffig); - for (Map.Entry dbEntry : clientConfig.getDatabases().entrySet()) { + for (Map.Entry dbEntry : clientConfig.getDatabases().entrySet()) { String dbName = dbEntry.getKey(); - MongoDbConfig.ClientConfig.DatabaseConfig dbConfig = dbEntry.getValue(); + ClientConfig.DatabaseConfig dbConfig = dbEntry.getValue(); String alias = Optional.ofNullable(dbConfig.getAlias()).orElse(dbName); if (allDbNames.contains(alias)) { diff --git a/core/src/test/java/org/seedstack/mongodb/MongoDbIT.java b/core/src/test/java/org/seedstack/mongodb/MongoDbIT.java index d2a54e0..5c57bd9 100644 --- a/core/src/test/java/org/seedstack/mongodb/MongoDbIT.java +++ b/core/src/test/java/org/seedstack/mongodb/MongoDbIT.java @@ -9,7 +9,7 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.mongodb.MongoClient; +import com.mongodb.client.MongoClient; import com.mongodb.client.MongoDatabase; import javax.inject.Inject; import javax.inject.Named; diff --git a/pom.xml b/pom.xml index 3cb5ebb..ed72ff3 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ org.seedstack.poms parent-internal - 4.0.1 + 4.0.2 org.seedstack.addons.mongodb @@ -23,9 +23,9 @@ pom - 3.12.0 - 4.1.1 - 1.6.1 + 3.14.0 + 5.0.1 + 2.4.13 4.4.0 true From 937f324ebce6ff1a6afb2ed1bc01ef94e1bbae87 Mon Sep 17 00:00:00 2001 From: Xian Boullosa Date: Fri, 26 Apr 2024 18:55:11 +0200 Subject: [PATCH 2/4] wip: Upgrade Morphia to 2.4 and MongoDriver to 5.0.1 fix: prevent exceptions due to collection being droped before indexes fix: Uses RegexFilter built-in options instead of pattern options (they're ignored by morphia) fix: Duplicate call to not (provoking a StackOverflowException) fix: License headers wip: Validation and Guice integration fix: ValidatingEntityInterceptor is now working globally --- checkstyle.xml | 2 +- core/pom.xml | 2 +- .../org/seedstack/mongodb/MongoDbConfig.java | 2 +- .../mongodb/internal/MongoDbErrorCode.java | 2 +- .../mongodb/internal/MongoDbManager.java | 2 +- .../mongodb/internal/MongoDbModule.java | 2 +- .../mongodb/internal/MongoDbPlugin.java | 2 +- .../mongodb/MongoDbConfig.properties | 2 +- .../internal/MongoDbErrorCode.properties | 2 +- .../java/org/seedstack/mongodb/MongoDbIT.java | 2 +- core/src/test/resources/application.yaml | 2 +- morphia/pom.xml | 13 +- .../morphia/BaseMorphiaRepository.java | 112 +++++---- .../seedstack/mongodb/morphia/Morphia.java | 2 +- .../mongodb/morphia/MorphiaConfig.java | 2 +- .../mongodb/morphia/MorphiaDatastore.java | 2 +- .../morphia/internal/DatastoreFactory.java | 39 ++-- .../morphia/internal/DatastoreImpl.java | 2 +- .../morphia/internal/DatastoreProvider.java | 2 +- .../morphia/internal/DatastoreWrapper.java | 18 ++ .../internal/DefaultMorphiaRepository.java | 2 +- .../morphia/internal/MorphiaErrorCode.java | 2 +- .../morphia/internal/MorphiaModule.java | 25 +- .../morphia/internal/MorphiaPlugin.java | 68 ++++-- .../morphia/internal/MorphiaPredicates.java | 21 +- .../morphia/internal/MorphiaUtils.java | 2 +- .../internal/ValidatingEntityInterceptor.java | 28 ++- .../specification/MorphiaAndConverter.java | 23 +- .../MorphiaAttributeConverter.java | 11 +- .../specification/MorphiaEqualConverter.java | 19 +- .../specification/MorphiaFalseConverter.java | 14 +- .../MorphiaGreaterThanConverter.java | 13 +- .../MorphiaIdentityConverter.java | 16 +- .../MorphiaLessThanConverter.java | 12 +- .../specification/MorphiaNotConverter.java | 14 +- .../specification/MorphiaOrConverter.java | 26 ++- .../MorphiaSpecificationTranslator.java | 13 +- .../specification/MorphiaStringConverter.java | 34 ++- .../MorphiaStringEqualConverter.java | 3 +- .../MorphiaStringMatchingConverter.java | 2 +- .../MorphiaTranslationContext.java | 28 +-- .../specification/MorphiaTrueConverter.java | 14 +- .../internal/MorphiaErrorCode.properties | 2 +- .../seedstack/mongodb/morphia/MorphiaIT.java | 21 +- .../mongodb/morphia/MorphiaRepositoryIT.java | 2 +- .../mongodb/morphia/SpecificationIT.java | 2 +- .../morphia/fixtures/dummyobject/Dummy1.java | 2 +- .../morphia/fixtures/dummyobject/Dummy2.java | 2 +- .../morphia/fixtures/dummyobject/Dummy3.java | 2 +- .../morphia/fixtures/dummyobject/Dummy4.java | 2 +- .../morphia/fixtures/dummyobject/Dummy5.java | 2 +- .../morphia/fixtures/dummyobject/Dummy6.java | 2 +- .../morphia/fixtures/product/Picture.java | 11 +- .../morphia/fixtures/product/PictureURL.java | 8 +- .../morphia/fixtures/product/Product.java | 2 +- .../morphia/fixtures/user/Address.java | 7 +- .../mongodb/morphia/fixtures/user/User.java | 9 +- morphia/src/test/resources/application.yaml | 2 +- pom.xml | 217 ++++++++++-------- 59 files changed, 518 insertions(+), 381 deletions(-) create mode 100644 morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreWrapper.java diff --git a/checkstyle.xml b/checkstyle.xml index 1636763..a43fe73 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -1,7 +1,7 @@ - 4.0.0 - - - org.seedstack.poms - parent-internal - 4.0.2 - - - org.seedstack.addons.mongodb - mongodb - 4.0.0-SNAPSHOT - pom - - - 3.14.0 - 5.0.1 - 2.4.13 - 4.4.0 - - true - - mongodb-addon - - - core - morphia - - - - - - org.codehaus.mojo - license-maven-plugin - - - Apache 2 - BSD - CDDL - LGPL 3.0 - MIT License - MPL 2.0 - Public Domain - WTFPL - - - IGNORED_LICENSE - - - Apache 2|Apache License, Version 2.0 - Apache 2|The Apache Software License, Version 2.0 - Apache 2|The Apache License, Version 2.0 - Apache 2|ASF 2.0 - Apache 2|Apache License 2.0 - Apache 2|Apache License, version 2.0 - Apache 2|Apache License Version 2.0 - Apache 2|Apache 2.0 - BSD|The New BSD License - BSD|https://svn.codehaus.org/proxytoys/trunk/LICENSE.txt - CDDL|CDDL + GPLv2 with classpath exception - LGPL 3.0|GNU Lesser Public License - MIT License|The MIT License - MIT License|The MIT License (MIT) - MIT License|MIT license - IGNORED_LICENSE|MPL 1.1 - IGNORED_LICENSE|LGPL 2.1 - - - - - - - - - - org.seedstack.seed - seed-core - ${seed.version} - - - - - https://github.com/seedstack/mongodb-addon - scm:git:git://github.com/seedstack/mongodb-addon.git - scm:git:git@github.com:seedstack/mongodb-addon.git - HEAD - - - - - oss.sonatype.org-snapshot - https://oss.sonatype.org/content/repositories/snapshots - - false - - - true - - - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + + org.seedstack.poms + parent-internal + 4.1.0 + + + org.seedstack.addons.mongodb + mongodb + 4.0.0-SNAPSHOT + pom + + + 3.14.0 + 4.11.1 + 2.4.13 + 4.4.0 + + 11 + + + true + + mongodb-addon + + + core + morphia + + + + + + org.codehaus.mojo + license-maven-plugin + + + Apache 2 + BSD + CDDL + LGPL 3.0 + MIT License + MPL 2.0 + Public Domain + WTFPL + + + IGNORED_LICENSE + + + Apache 2|Apache License, Version 2.0 + Apache 2|The Apache Software License, Version 2.0 + Apache 2|The Apache License, Version 2.0 + Apache 2|ASF 2.0 + Apache 2|Apache License 2.0 + Apache 2|Apache License, version 2.0 + Apache 2|Apache License Version 2.0 + Apache 2|Apache 2.0 + BSD|The New BSD License + BSD|https://svn.codehaus.org/proxytoys/trunk/LICENSE.txt + CDDL|CDDL + GPLv2 with classpath exception + LGPL 3.0|GNU Lesser Public License + MIT License|The MIT License + MIT License|The MIT License (MIT) + MIT License|MIT license + IGNORED_LICENSE|MPL 1.1 + IGNORED_LICENSE|LGPL 2.1 + + + + + + + + + + + + org.jboss.logging + jboss-logging + 3.5.3.Final + + + + + + + org.seedstack.seed + seed-core + ${seed.version} + + + + + https://github.com/seedstack/mongodb-addon + scm:git:git://github.com/seedstack/mongodb-addon.git + scm:git:git@github.com:seedstack/mongodb-addon.git + HEAD + + + + + oss.sonatype.org-snapshot + https://oss.sonatype.org/content/repositories/snapshots + + false + + + true + + + From e4c2ac508ad0103936dc1f8c84b7284a81518bf1 Mon Sep 17 00:00:00 2001 From: Xian Boullosa Date: Mon, 29 Apr 2024 15:51:15 +0200 Subject: [PATCH 3/4] feat: Adds EntityListener support chore: Adds License headers --- core/pom.xml | 79 ++++++++-------- morphia/src/license/THIRD-PARTY.properties | 21 ----- .../mongodb/morphia/BaseEntityListener.java | 29 ++++++ .../morphia/BaseMorphiaRepository.java | 8 +- .../mongodb/morphia/EntityListener.java | 34 +++++++ .../morphia/internal/DatastoreFactory.java | 10 +-- .../morphia/internal/DatastoreWrapper.java | 14 +-- .../morphia/internal/MorphiaModule.java | 23 ++++- .../morphia/internal/MorphiaPlugin.java | 49 ++++++---- .../morphia/internal/MorphiaPredicates.java | 14 ++- .../morphia/internal/SeedEntityListener.java | 90 +++++++++++++++++++ .../internal/ValidatingEntityInterceptor.java | 12 +-- morphia/src/test/resources/application.yaml | 3 + pom.xml | 6 +- 14 files changed, 278 insertions(+), 114 deletions(-) delete mode 100644 morphia/src/license/THIRD-PARTY.properties create mode 100644 morphia/src/main/java/org/seedstack/mongodb/morphia/BaseEntityListener.java create mode 100644 morphia/src/main/java/org/seedstack/mongodb/morphia/EntityListener.java create mode 100644 morphia/src/main/java/org/seedstack/mongodb/morphia/internal/SeedEntityListener.java diff --git a/core/pom.xml b/core/pom.xml index 4d82784..dba8654 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -7,44 +7,45 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - - 4.0.0 - - - org.seedstack.addons.mongodb - mongodb - 4.0.0-SNAPSHOT - - - mongodb-core - - - - org.mongodb - mongodb-driver-sync - ${mongodb.version} - provided - - - - org.seedstack.seed - seed-testing-junit4 - ${seed.version} - test - - - org.assertj - assertj-core - ${assertj.version} - test - - - ch.qos.logback - logback-classic - ${logback.version} - test - - + + 4.0.0 + + + org.seedstack.addons.mongodb + mongodb + 4.0.0-SNAPSHOT + + + mongodb-core + + + + org.mongodb + mongodb-driver-sync + ${mongodb.version} + provided + + + + org.seedstack.seed + seed-testing-junit4 + ${seed.version} + test + + + org.assertj + assertj-core + ${assertj.version} + test + + + ch.qos.logback + logback-classic + ${logback.version} + test + + diff --git a/morphia/src/license/THIRD-PARTY.properties b/morphia/src/license/THIRD-PARTY.properties deleted file mode 100644 index bc7db7f..0000000 --- a/morphia/src/license/THIRD-PARTY.properties +++ /dev/null @@ -1,21 +0,0 @@ -# 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 -com.thoughtworks.proxytoys--proxytoys--1.0=BSD -dev.morphia.morphia--core--1.6.1=Apache 2 -dev.morphia.morphia--logging-slf4j--1.6.1=Apache 2 diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseEntityListener.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseEntityListener.java new file mode 100644 index 0000000..42029e2 --- /dev/null +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseEntityListener.java @@ -0,0 +1,29 @@ +/* + * Copyright © 2013-2024, 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; + +import java.lang.reflect.Type; + +import org.seedstack.business.internal.utils.BusinessUtils; + +public abstract class BaseEntityListener implements EntityListener { + + private final Class listenerClass; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public BaseEntityListener() { + Type[] generics = BusinessUtils.resolveGenerics(EntityListener.class, this.getClass()); + this.listenerClass = (Class) generics[0]; + } + + @Override + public Class getListenerClass() { + return listenerClass; + } + +} 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 ee307b9..3c9267d 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseMorphiaRepository.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseMorphiaRepository.java @@ -30,8 +30,6 @@ import org.seedstack.business.spi.SpecificationTranslator; import org.seedstack.mongodb.morphia.internal.DatastoreFactory; import org.seedstack.mongodb.morphia.internal.specification.MorphiaTranslationContext; -import org.seedstack.seed.Logging; -import org.slf4j.Logger; import com.mongodb.client.MongoCollection; @@ -46,6 +44,7 @@ import dev.morphia.query.filters.Filters; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +@SuppressWarnings("rawtypes") /** * This class can serve as a base class for Morphia repositories. It provides methods for common * CRUD operations as well as access to the data store through the {@link #getDatastore()} ()} @@ -59,10 +58,8 @@ public abstract class BaseMorphiaRepository, ID> extends BaseRepository { public static final String ID_KEY = "_id"; private Datastore datastore; - private SpecificationTranslator specificationTranslator; - @Logging - private Logger logger; + private SpecificationTranslator specificationTranslator; public BaseMorphiaRepository() { @@ -176,7 +173,6 @@ private Query buildQuery(Specification specification) { Filter filter = specificationTranslator.translate( specification, new MorphiaTranslationContext<>(query)); - logger.info("Querying {} with filter {}",getAggregateRootClass(),filter); return query.filter(filter); } diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/EntityListener.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/EntityListener.java new file mode 100644 index 0000000..2e5070a --- /dev/null +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/EntityListener.java @@ -0,0 +1,34 @@ +/* + * Copyright © 2013-2024, 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; + +import org.bson.Document; + +import dev.morphia.Datastore; + +public interface EntityListener { + + Class getListenerClass(); + + default void postLoad(T entity, Document document, Datastore datastore) { + // NO-OP + }; + + default void preLoad(T entity, Document document, Datastore datastore) { + // NO-OP + }; + + default void postPersist(T entity, Document document, Datastore datastore) { + // NO-OP + }; + + default void prePersist(T entity, Document document, Datastore datastore) { + // NO-OP + }; + +} diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreFactory.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreFactory.java index 50bb987..d2b174a 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreFactory.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreFactory.java @@ -10,8 +10,6 @@ import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.createDatastoreAnnotation; import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.getMongoClientConfig; -import java.util.Arrays; - import javax.inject.Inject; import org.seedstack.mongodb.morphia.MorphiaDatastore; @@ -28,13 +26,13 @@ public class DatastoreFactory { private final Application application; private final Injector injector; - private final ValidatingEntityInterceptor validationInterceptor; + private final SeedEntityListener seedEntityListener; @Inject - DatastoreFactory(Application application, Injector injector, ValidatingEntityInterceptor validationInterceptor) { + DatastoreFactory(Application application, Injector injector, SeedEntityListener seedEntityListener) { this.application = application; this.injector = injector; - this.validationInterceptor = validationInterceptor; + this.seedEntityListener = seedEntityListener; } public Datastore createDatastore(Class morphiaClass) { @@ -49,6 +47,6 @@ public Datastore createDatastore(String clientName, String dbName) { MongoClient client = injector.getInstance(Key.get(MongoClient.class, Names.named(clientName))); String dbAlias = MorphiaUtils.resolveDatabaseAlias(getMongoClientConfig(application, clientName), dbName); - return new DatastoreWrapper(Morphia.createDatastore(client, dbAlias), Arrays.asList(validationInterceptor)); + return new DatastoreWrapper(Morphia.createDatastore(client, dbAlias), seedEntityListener); } } diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreWrapper.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreWrapper.java index 818e837..672dcc0 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreWrapper.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreWrapper.java @@ -1,17 +1,21 @@ +/* + * Copyright © 2013-2024, 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 java.util.Collection; - import dev.morphia.Datastore; import dev.morphia.DatastoreImpl; -import dev.morphia.EntityListener; class DatastoreWrapper extends DatastoreImpl { - public DatastoreWrapper(Datastore datastore, Collection> extraListeners) { + public DatastoreWrapper(Datastore datastore, SeedEntityListener seedListener) { super((DatastoreImpl) datastore); // TODO: Find a way to wrap mapper instead of adding an interceptor - extraListeners.forEach(listener -> getMapper().addInterceptor(listener)); + getMapper().addInterceptor(seedListener); } 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 d70ebc3..58c0add 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 @@ -13,30 +13,35 @@ import java.util.Collection; +import org.seedstack.mongodb.morphia.EntityListener; import org.seedstack.mongodb.morphia.MorphiaDatastore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.inject.AbstractModule; import com.google.inject.Key; import com.google.inject.Scopes; +import com.google.inject.multibindings.Multibinder; import dev.morphia.Datastore; class MorphiaModule extends AbstractModule { + private static final Logger LOGGER = LoggerFactory.getLogger(MorphiaModule.class); private final Collection morphiaDatastoresAnnotation; - private final Collection> morphiaEntityListeners; + private final Collection>> seedEntityListeners; MorphiaModule(Collection morphiaDatastoresAnnotation, - Collection> morphiaEntityListeners) { + Collection>> seedEntityListeners) { super(); this.morphiaDatastoresAnnotation = morphiaDatastoresAnnotation; - this.morphiaEntityListeners = morphiaEntityListeners; + this.seedEntityListeners = seedEntityListeners; } + @SuppressWarnings("rawtypes") @Override protected void configure() { bind(DatastoreFactory.class); - bind(ValidatingEntityInterceptor.class); if (morphiaDatastoresAnnotation != null && !morphiaDatastoresAnnotation.isEmpty()) { for (MorphiaDatastore morphiaDatastore : morphiaDatastoresAnnotation) { @@ -46,5 +51,15 @@ protected void configure() { } } + Multibinder entityListenerMultibinder = Multibinder.newSetBinder(binder(), + EntityListener.class); + + for (Class listener : seedEntityListeners) { + LOGGER.debug("Binding {}", listener.toGenericString()); + entityListenerMultibinder.addBinding().to(listener); + } + + bind(SeedEntityListener.class).asEagerSingleton(); + } } 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 9ab1134..ebd02e0 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 @@ -13,6 +13,7 @@ import javax.inject.Inject; import org.seedstack.mongodb.internal.MongoDbPlugin; +import org.seedstack.mongodb.morphia.EntityListener; import org.seedstack.mongodb.morphia.MorphiaConfig; import org.seedstack.mongodb.morphia.MorphiaDatastore; import org.seedstack.seed.Application; @@ -35,7 +36,8 @@ public class MorphiaPlugin extends AbstractSeedPlugin { private static final Logger LOGGER = LoggerFactory.getLogger(MorphiaPlugin.class); private final Collection morphiaDatastores = new HashSet<>(); - private final Collection> morphiaListeners = new HashSet<>(); + private final Collection>> seedEntityListeners = new HashSet<>(); + private MorphiaConfig config; @Inject private DatastoreFactory datastoreFactory; @@ -54,19 +56,21 @@ public Collection> dependencies() { public Collection classpathScanRequests() { return classpathScanRequestBuilder() .predicate(MorphiaPredicates.PERSISTED_CLASSES) - .predicate(MorphiaPredicates.ENTITY_LISTENERS) + .predicate(MorphiaPredicates.SEED_INJECTED_ENTITY_LISTENERS) + .predicate(MorphiaPredicates.MORPHIA_RAW_ENTITY_LISTENERS) .build(); } + @SuppressWarnings("unchecked") @Override public InitState initialize(InitContext initContext) { Application application = getApplication(); config = application.getConfiguration().get(MorphiaConfig.class); - boolean validationActive = ValidationManager.get() + boolean isValidationActive = ValidationManager.get() .getValidationLevel() != ValidationManager.ValidationLevel.NONE; - if (validationActive) { + if (isValidationActive) { LOGGER.info("Validation is enabled on Morphia entities"); } else { LOGGER.info("Validation is disabled on Morphia entities"); @@ -88,22 +92,35 @@ public InitState initialize(InitContext initContext) { LOGGER.info("No persisted classes found"); } - if (!validationActive) { - return InitState.INITIALIZED; + Collection> morphiaListeners = initContext.scannedTypesByPredicate() + .get(MorphiaPredicates.MORPHIA_RAW_ENTITY_LISTENERS); + + if (morphiaListeners != null && morphiaListeners.size() > 0) { + LOGGER.warn( + "Morphia EntityListeners found. No injection will be performed over those EntityListeners." + + "Activate debug logs to get more information"); + if (LOGGER.isDebugEnabled()) { + morphiaListeners.forEach( + listener -> LOGGER.debug("\t class '{}' will not have injection", listener.toGenericString())); + } + } - - - Collection> morphiaEntityListeners = initContext.scannedTypesByPredicate() - .get(MorphiaPredicates.ENTITY_LISTENERS); + Collection> seedListeners = initContext.scannedTypesByPredicate() + .get(MorphiaPredicates.SEED_INJECTED_ENTITY_LISTENERS); - if (morphiaEntityListeners != null && !morphiaEntityListeners.isEmpty()) { - LOGGER.info("Found {} entity listeners", morphiaEntityListeners.size()); - morphiaListeners.addAll(morphiaEntityListeners); - } else { - LOGGER.info("No entity listeners found"); + if (seedListeners != null && seedListeners.size() > 0) { + for (Class listener : seedListeners) { + if (!isValidationActive && listener.equals(ValidatingEntityInterceptor.class)) { + continue; + } + LOGGER.debug("Detected '{}' EntityListener", listener.toGenericString()); + this.seedEntityListeners.add((Class>) listener); + } } + LOGGER.info("{} EntityListeners loaded", seedListeners.size()); + return InitState.INITIALIZED; } @@ -125,6 +142,6 @@ public void start(Context context) { @Override public Object nativeUnitModule() { - return new MorphiaModule(morphiaDatastores, morphiaListeners); + return new MorphiaModule(morphiaDatastores, seedEntityListeners); } } diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaPredicates.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaPredicates.java index 2612ea4..5873184 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaPredicates.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaPredicates.java @@ -8,14 +8,14 @@ package org.seedstack.mongodb.morphia.internal; import static org.seedstack.shed.reflect.AnnotationPredicates.elementAnnotatedWith; -import static org.seedstack.shed.reflect.ClassPredicates.classImplements; +import static org.seedstack.shed.reflect.ClassPredicates.classIs; +import static org.seedstack.shed.reflect.ClassPredicates.classIsAssignableFrom; import static org.seedstack.shed.reflect.ClassPredicates.classIsInterface; import static org.seedstack.shed.reflect.ClassPredicates.classModifierIs; import java.lang.reflect.Modifier; import java.util.function.Predicate; -import dev.morphia.EntityListener; import dev.morphia.annotations.Embedded; import dev.morphia.annotations.Entity; @@ -25,7 +25,13 @@ class MorphiaPredicates { .and(elementAnnotatedWith(Entity.class, false) .or(elementAnnotatedWith(Embedded.class, false))); - static Predicate> ENTITY_LISTENERS = classIsInterface().negate() + static Predicate> SEED_INJECTED_ENTITY_LISTENERS = classIsInterface().negate() .and(classModifierIs(Modifier.ABSTRACT).negate()) - .and(classImplements(EntityListener.class)); + .and(classIsAssignableFrom(org.seedstack.mongodb.morphia.EntityListener.class)); + + static Predicate> MORPHIA_RAW_ENTITY_LISTENERS = classIsInterface().negate() + .and(classModifierIs(Modifier.ABSTRACT).negate()) + .and(classIsAssignableFrom(dev.morphia.EntityListener.class)) + .and((classIs(SeedEntityListener.class)).negate()); // Ignore global listener + } diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/SeedEntityListener.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/SeedEntityListener.java new file mode 100644 index 0000000..fed7372 --- /dev/null +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/SeedEntityListener.java @@ -0,0 +1,90 @@ +/* + * Copyright © 2013-2024, 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 java.lang.annotation.Annotation; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.inject.Inject; + +import org.bson.Document; +import org.seedstack.mongodb.morphia.EntityListener; + +import dev.morphia.Datastore; +import dev.morphia.annotations.PostLoad; +import dev.morphia.annotations.PostPersist; +import dev.morphia.annotations.PreLoad; +import dev.morphia.annotations.PrePersist; + +@SuppressWarnings("rawtypes") +class SeedEntityListener implements dev.morphia.EntityListener { + private final Set listeners; + + @Inject + SeedEntityListener(Set listeners) { + this.listeners = listeners; + } + + @Override + public boolean hasAnnotation(Class type) { + return true; + } + + @SuppressWarnings("unchecked") + @Override + @PostLoad + public void postLoad(Object entity, Document document, Datastore datastore) { + Set affectedListeners = getAffectedListeners(entity); + for (EntityListener listener : affectedListeners) { + listener.postLoad(entity, document, datastore); + } + } + + @SuppressWarnings("unchecked") + @Override + @PostPersist + public void postPersist(Object entity, Document document, Datastore datastore) { + Set affectedListeners = getAffectedListeners(entity); + for (EntityListener listener : affectedListeners) { + listener.postPersist(entity, document, datastore); + } + } + + @SuppressWarnings("unchecked") + @Override + @PreLoad + public void preLoad(Object entity, Document document, Datastore datastore) { + Set affectedListeners = getAffectedListeners(entity); + for (EntityListener listener : affectedListeners) { + listener.preLoad(entity, document, datastore); + } + + } + + @SuppressWarnings("unchecked") + @Override + @PrePersist + public void prePersist(Object entity, Document document, Datastore datastore) { + Set affectedListeners = getAffectedListeners(entity); + for (EntityListener listener : affectedListeners) { + listener.prePersist(entity, document, datastore); + } + } + + private boolean checkEntityType(Object entity, EntityListener x) { + return x.getListenerClass().isAssignableFrom(entity.getClass()); + } + + private Set getAffectedListeners(Object entity) { + return listeners.stream().filter(x -> checkEntityType(entity, x)) + .collect(Collectors.toSet()); + + } + +} diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/ValidatingEntityInterceptor.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/ValidatingEntityInterceptor.java index 2f3c627..a3055c7 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/ValidatingEntityInterceptor.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/ValidatingEntityInterceptor.java @@ -7,7 +7,6 @@ */ package org.seedstack.mongodb.morphia.internal; -import java.lang.annotation.Annotation; import java.util.Set; import javax.inject.Inject; @@ -15,21 +14,18 @@ import javax.validation.ValidatorFactory; import org.bson.Document; +import org.seedstack.mongodb.morphia.BaseEntityListener; import org.seedstack.seed.core.internal.validation.VerboseConstraintViolationException; import dev.morphia.Datastore; -import dev.morphia.EntityListener; -import dev.morphia.annotations.PrePersist; -class ValidatingEntityInterceptor implements EntityListener { +class ValidatingEntityInterceptor extends BaseEntityListener { @Inject private ValidatorFactory validatorFactory; @Override - @PrePersist public void prePersist(Object entity, Document document, Datastore datastore) { - Set> result = validatorFactory.getValidator().validate(entity); if (!result.isEmpty()) { throw new VerboseConstraintViolationException(result); @@ -37,8 +33,4 @@ public void prePersist(Object entity, Document document, Datastore datastore) { } - @Override - public boolean hasAnnotation(Class type) { - return PrePersist.class.equals(type); - } } diff --git a/morphia/src/test/resources/application.yaml b/morphia/src/test/resources/application.yaml index ac4ceb1..cd0cda0 100644 --- a/morphia/src/test/resources/application.yaml +++ b/morphia/src/test/resources/application.yaml @@ -6,6 +6,9 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. # +logging: + level: INFO + mongoDb: clients: client1: diff --git a/pom.xml b/pom.xml index e841390..861da45 100644 --- a/pom.xml +++ b/pom.xml @@ -28,9 +28,6 @@ 2.4.13 4.4.0 - 11 - - true mongodb-addon @@ -69,7 +66,9 @@ Apache 2|Apache License, version 2.0 Apache 2|Apache License Version 2.0 Apache 2|Apache 2.0 + Apache 2|Apache-2.0 BSD|The New BSD License + BSD|BSD-3-Clause BSD|https://svn.codehaus.org/proxytoys/trunk/LICENSE.txt CDDL|CDDL + GPLv2 with classpath exception LGPL 3.0|GNU Lesser Public License @@ -78,6 +77,7 @@ MIT License|MIT license IGNORED_LICENSE|MPL 1.1 IGNORED_LICENSE|LGPL 2.1 + IGNORED_LICENSE|GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 From 858d77993cd34000483e49d4114eb8e8f067217d Mon Sep 17 00:00:00 2001 From: Xian Boullosa Date: Mon, 29 Apr 2024 16:00:27 +0200 Subject: [PATCH 4/4] feat: Update version for new release fix: Spotbugs detected issues --- core/pom.xml | 2 +- morphia/pom.xml | 2 +- .../morphia/internal/DatastoreWrapper.java | 2 + .../morphia/internal/MorphiaPlugin.java | 5 +- pom.xml | 210 +++++++++--------- 5 files changed, 113 insertions(+), 108 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index dba8654..52a5b67 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -15,7 +15,7 @@ org.seedstack.addons.mongodb mongodb - 4.0.0-SNAPSHOT + 5.0.0-SNAPSHOT mongodb-core diff --git a/morphia/pom.xml b/morphia/pom.xml index 2830232..965317c 100644 --- a/morphia/pom.xml +++ b/morphia/pom.xml @@ -14,7 +14,7 @@ org.seedstack.addons.mongodb mongodb - 4.0.0-SNAPSHOT + 5.0.0-SNAPSHOT mongodb-morphia diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreWrapper.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreWrapper.java index 672dcc0..78ebf63 100644 --- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreWrapper.java +++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreWrapper.java @@ -9,9 +9,11 @@ import dev.morphia.Datastore; import dev.morphia.DatastoreImpl; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; class DatastoreWrapper extends DatastoreImpl { + @SuppressFBWarnings(value = "MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR", justification = "Manually verified that mapper is initialized") public DatastoreWrapper(Datastore datastore, SeedEntityListener seedListener) { super((DatastoreImpl) datastore); // TODO: Find a way to wrap mapper instead of adding an interceptor 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 ebd02e0..d16a861 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 @@ -117,10 +117,11 @@ public InitState initialize(InitContext initContext) { LOGGER.debug("Detected '{}' EntityListener", listener.toGenericString()); this.seedEntityListeners.add((Class>) listener); } + LOGGER.info("{} EntityListeners loaded", seedListeners.size()); + } else { + LOGGER.info("No EntityListeners loaded"); } - LOGGER.info("{} EntityListeners loaded", seedListeners.size()); - return InitState.INITIALIZED; } diff --git a/pom.xml b/pom.xml index 861da45..00666a3 100644 --- a/pom.xml +++ b/pom.xml @@ -7,120 +7,122 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - - 4.0.0 + + 4.0.0 - - org.seedstack.poms - parent-internal - 4.1.0 - + + org.seedstack.poms + parent-internal + 4.1.0 + - org.seedstack.addons.mongodb - mongodb - 4.0.0-SNAPSHOT - pom + org.seedstack.addons.mongodb + mongodb + 5.0.0-SNAPSHOT + pom - - 3.14.0 - 4.11.1 - 2.4.13 - 4.4.0 + + 3.14.0 + 5.0.1 + 2.4.13 + 4.4.0 - true + true - mongodb-addon - - - core - morphia - - - - - - org.codehaus.mojo - license-maven-plugin - - - Apache 2 - BSD - CDDL - LGPL 3.0 - MIT License - MPL 2.0 - Public Domain - WTFPL + mongodb-addon + + + core + morphia + + + + + + org.codehaus.mojo + license-maven-plugin + + + Apache 2 + BSD + CDDL + LGPL 3.0 + MIT License + MPL 2.0 + Public Domain + WTFPL - - IGNORED_LICENSE - - - Apache 2|Apache License, Version 2.0 - Apache 2|The Apache Software License, Version 2.0 - Apache 2|The Apache License, Version 2.0 - Apache 2|ASF 2.0 - Apache 2|Apache License 2.0 - Apache 2|Apache License, version 2.0 - Apache 2|Apache License Version 2.0 - Apache 2|Apache 2.0 - Apache 2|Apache-2.0 - BSD|The New BSD License - BSD|BSD-3-Clause - BSD|https://svn.codehaus.org/proxytoys/trunk/LICENSE.txt - CDDL|CDDL + GPLv2 with classpath exception - LGPL 3.0|GNU Lesser Public License - MIT License|The MIT License - MIT License|The MIT License (MIT) - MIT License|MIT license - IGNORED_LICENSE|MPL 1.1 - IGNORED_LICENSE|LGPL 2.1 - IGNORED_LICENSE|GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 - - - - - - + IGNORED_LICENSE + + + Apache 2|Apache License, Version 2.0 + Apache 2|The Apache Software License, Version 2.0 + Apache 2|The Apache License, Version 2.0 + Apache 2|ASF 2.0 + Apache 2|Apache License 2.0 + Apache 2|Apache License, version 2.0 + Apache 2|Apache License Version 2.0 + Apache 2|Apache 2.0 + Apache 2|Apache-2.0 + BSD|The New BSD License + BSD|BSD-3-Clause + BSD|https://svn.codehaus.org/proxytoys/trunk/LICENSE.txt + CDDL|CDDL + GPLv2 with classpath exception + LGPL 3.0|GNU Lesser Public License + MIT License|The MIT License + MIT License|The MIT License (MIT) + MIT License|MIT license + IGNORED_LICENSE|MPL 1.1 + IGNORED_LICENSE|LGPL 2.1 + IGNORED_LICENSE|GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1 + + + + + + - - - - org.jboss.logging - jboss-logging - 3.5.3.Final - - - + + + + org.jboss.logging + jboss-logging + 3.5.3.Final + + + - - - org.seedstack.seed - seed-core - ${seed.version} - - + + + org.seedstack.seed + seed-core + ${seed.version} + + - - https://github.com/seedstack/mongodb-addon - scm:git:git://github.com/seedstack/mongodb-addon.git - scm:git:git@github.com:seedstack/mongodb-addon.git - HEAD - + + https://github.com/seedstack/mongodb-addon + scm:git:git://github.com/seedstack/mongodb-addon.git + scm:git:git@github.com:seedstack/mongodb-addon.git + HEAD + - - - oss.sonatype.org-snapshot - https://oss.sonatype.org/content/repositories/snapshots - - false - - - true - - - + + + oss.sonatype.org-snapshot + https://oss.sonatype.org/content/repositories/snapshots + + false + + + true + + +