You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2023/11/22 10:20:09 UTC
(james-project) 04/04: JAMES-2586 Implement PostgresExecutor Factory and Mailbox Aggregate Module
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch postgresql
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 666c7e1b22f2da9be5148e7e3d409a6791a38e7f
Author: Tung Tran <vt...@linagora.com>
AuthorDate: Wed Nov 22 10:16:27 2023 +0700
JAMES-2586 Implement PostgresExecutor Factory and Mailbox Aggregate Module
---
.../backends/postgres/utils/PostgresExecutor.java | 21 +++++++++++++++++++-
.../postgres/PostgresMailboxAggregateModule.java | 23 ++++++++--------------
.../mailbox/postgres/JPAMailboxManagerTest.java | 3 +--
.../postgres/JpaMailboxManagerStressTest.java | 3 +--
.../postgres/host/PostgresHostSystemExtension.java | 4 ++--
.../modules/mailbox/PostgresMailboxModule.java | 4 ++--
.../james/modules/data/PostgresCommonModule.java | 6 ++++--
7 files changed, 38 insertions(+), 26 deletions(-)
diff --git a/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PostgresExecutor.java b/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PostgresExecutor.java
index 30f2812a8a..3b3fd01569 100644
--- a/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PostgresExecutor.java
+++ b/backends-common/postgres/src/main/java/org/apache/james/backends/postgres/utils/PostgresExecutor.java
@@ -20,10 +20,12 @@
package org.apache.james.backends.postgres.utils;
import java.util.List;
+import java.util.Optional;
import java.util.function.Function;
import javax.inject.Inject;
+import org.apache.james.core.Domain;
import org.jooq.DSLContext;
import org.jooq.Record;
import org.jooq.SQLDialect;
@@ -39,13 +41,30 @@ import reactor.core.publisher.Mono;
public class PostgresExecutor {
+ public static class Factory {
+
+ private final JamesPostgresConnectionFactory jamesPostgresConnectionFactory;
+
+ @Inject
+ public Factory(JamesPostgresConnectionFactory jamesPostgresConnectionFactory) {
+ this.jamesPostgresConnectionFactory = jamesPostgresConnectionFactory;
+ }
+
+ public PostgresExecutor create(Optional<Domain> domain) {
+ return new PostgresExecutor(jamesPostgresConnectionFactory.getConnection(domain));
+ }
+
+ public PostgresExecutor create() {
+ return create(Optional.empty());
+ }
+ }
+
private static final SQLDialect PGSQL_DIALECT = SQLDialect.POSTGRES;
private static final Settings SETTINGS = new Settings()
.withRenderFormatted(true)
.withStatementType(StatementType.PREPARED_STATEMENT);
private final Mono<Connection> connection;
- @Inject
public PostgresExecutor(Mono<Connection> connection) {
this.connection = connection;
}
diff --git a/server/container/guice/mailbox-postgres/src/main/java/org/apache/james/modules/mailbox/PostgresMailboxModule.java b/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMailboxAggregateModule.java
similarity index 70%
copy from server/container/guice/mailbox-postgres/src/main/java/org/apache/james/modules/mailbox/PostgresMailboxModule.java
copy to mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMailboxAggregateModule.java
index a8c132a6dc..db208dd975 100644
--- a/server/container/guice/mailbox-postgres/src/main/java/org/apache/james/modules/mailbox/PostgresMailboxModule.java
+++ b/mailbox/postgres/src/main/java/org/apache/james/mailbox/postgres/PostgresMailboxAggregateModule.java
@@ -16,23 +16,16 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.modules.mailbox;
+
+package org.apache.james.mailbox.postgres;
import org.apache.james.backends.postgres.PostgresModule;
+import org.apache.james.mailbox.postgres.mail.PostgresMailboxModule;
import org.apache.james.mailbox.postgres.user.PostgresSubscriptionModule;
-import org.apache.james.modules.data.PostgresCommonModule;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.multibindings.Multibinder;
-
-public class PostgresMailboxModule extends AbstractModule {
-
- @Override
- protected void configure() {
- install(new PostgresCommonModule());
- Multibinder<PostgresModule> postgresDataDefinitions = Multibinder.newSetBinder(binder(), PostgresModule.class);
- postgresDataDefinitions.addBinding().toInstance(PostgresSubscriptionModule.MODULE);
- }
+public interface PostgresMailboxAggregateModule {
-}
\ No newline at end of file
+ PostgresModule MODULE = PostgresModule.aggregateModules(
+ PostgresMailboxModule.MODULE,
+ PostgresSubscriptionModule.MODULE);
+}
diff --git a/mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/JPAMailboxManagerTest.java b/mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/JPAMailboxManagerTest.java
index 53871f68f8..bc98c13a50 100644
--- a/mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/JPAMailboxManagerTest.java
+++ b/mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/JPAMailboxManagerTest.java
@@ -26,7 +26,6 @@ import org.apache.james.events.EventBus;
import org.apache.james.mailbox.MailboxManagerTest;
import org.apache.james.mailbox.SubscriptionManager;
import org.apache.james.mailbox.postgres.openjpa.OpenJPAMailboxManager;
-import org.apache.james.mailbox.postgres.user.PostgresSubscriptionModule;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Disabled;
@@ -43,7 +42,7 @@ class JPAMailboxManagerTest extends MailboxManagerTest<OpenJPAMailboxManager> {
}
@RegisterExtension
- static PostgresExtension postgresExtension = PostgresExtension.withoutRowLevelSecurity(PostgresSubscriptionModule.MODULE);
+ static PostgresExtension postgresExtension = PostgresExtension.withoutRowLevelSecurity(PostgresMailboxAggregateModule.MODULE);
static final JpaTestCluster JPA_TEST_CLUSTER = JpaTestCluster.create(JPAMailboxFixture.MAILBOX_PERSISTANCE_CLASSES);
Optional<OpenJPAMailboxManager> openJPAMailboxManager = Optional.empty();
diff --git a/mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/JpaMailboxManagerStressTest.java b/mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/JpaMailboxManagerStressTest.java
index 2abd96da33..ea1ce952e4 100644
--- a/mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/JpaMailboxManagerStressTest.java
+++ b/mailbox/postgres/src/test/java/org/apache/james/mailbox/postgres/JpaMailboxManagerStressTest.java
@@ -26,7 +26,6 @@ import org.apache.james.backends.postgres.PostgresExtension;
import org.apache.james.events.EventBus;
import org.apache.james.mailbox.MailboxManagerStressContract;
import org.apache.james.mailbox.postgres.openjpa.OpenJPAMailboxManager;
-import org.apache.james.mailbox.postgres.user.PostgresSubscriptionModule;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -34,7 +33,7 @@ import org.junit.jupiter.api.extension.RegisterExtension;
class JpaMailboxManagerStressTest implements MailboxManagerStressContract<OpenJPAMailboxManager> {
@RegisterExtension
- static PostgresExtension postgresExtension = PostgresExtension.withoutRowLevelSecurity(PostgresSubscriptionModule.MODULE);
+ static PostgresExtension postgresExtension = PostgresExtension.withoutRowLevelSecurity(PostgresMailboxAggregateModule.MODULE);
static final JpaTestCluster JPA_TEST_CLUSTER = JpaTestCluster.create(JPAMailboxFixture.MAILBOX_PERSISTANCE_CLASSES);
Optional<OpenJPAMailboxManager> openJPAMailboxManager = Optional.empty();
diff --git a/mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/host/PostgresHostSystemExtension.java b/mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/host/PostgresHostSystemExtension.java
index 298c9a222a..8ec2e1df87 100644
--- a/mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/host/PostgresHostSystemExtension.java
+++ b/mpt/impl/imap-mailbox/postgres/src/test/java/org/apache/james/mpt/imapmailbox/postgres/host/PostgresHostSystemExtension.java
@@ -20,7 +20,7 @@
package org.apache.james.mpt.imapmailbox.postgres.host;
import org.apache.james.backends.postgres.PostgresExtension;
-import org.apache.james.mailbox.postgres.user.PostgresSubscriptionModule;
+import org.apache.james.mailbox.postgres.PostgresMailboxAggregateModule;
import org.apache.james.mpt.host.JamesImapHostSystem;
import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.AfterEachCallback;
@@ -36,7 +36,7 @@ public class PostgresHostSystemExtension implements BeforeEachCallback, AfterEac
private final PostgresExtension postgresExtension;
public PostgresHostSystemExtension() {
- this.postgresExtension = PostgresExtension.withRowLevelSecurity(PostgresSubscriptionModule.MODULE);
+ this.postgresExtension = PostgresExtension.withRowLevelSecurity(PostgresMailboxAggregateModule.MODULE);
try {
hostSystem = PostgresHostSystem.build(postgresExtension);
} catch (Exception e) {
diff --git a/server/container/guice/mailbox-postgres/src/main/java/org/apache/james/modules/mailbox/PostgresMailboxModule.java b/server/container/guice/mailbox-postgres/src/main/java/org/apache/james/modules/mailbox/PostgresMailboxModule.java
index a8c132a6dc..4ef3119e07 100644
--- a/server/container/guice/mailbox-postgres/src/main/java/org/apache/james/modules/mailbox/PostgresMailboxModule.java
+++ b/server/container/guice/mailbox-postgres/src/main/java/org/apache/james/modules/mailbox/PostgresMailboxModule.java
@@ -19,7 +19,7 @@
package org.apache.james.modules.mailbox;
import org.apache.james.backends.postgres.PostgresModule;
-import org.apache.james.mailbox.postgres.user.PostgresSubscriptionModule;
+import org.apache.james.mailbox.postgres.PostgresMailboxAggregateModule;
import org.apache.james.modules.data.PostgresCommonModule;
import com.google.inject.AbstractModule;
@@ -32,7 +32,7 @@ public class PostgresMailboxModule extends AbstractModule {
install(new PostgresCommonModule());
Multibinder<PostgresModule> postgresDataDefinitions = Multibinder.newSetBinder(binder(), PostgresModule.class);
- postgresDataDefinitions.addBinding().toInstance(PostgresSubscriptionModule.MODULE);
+ postgresDataDefinitions.addBinding().toInstance(PostgresMailboxAggregateModule.MODULE);
}
}
\ No newline at end of file
diff --git a/server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresCommonModule.java b/server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresCommonModule.java
index e9f53a7046..5492c65893 100644
--- a/server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresCommonModule.java
+++ b/server/container/guice/postgres-common/src/main/java/org/apache/james/modules/data/PostgresCommonModule.java
@@ -21,14 +21,13 @@ package org.apache.james.modules.data;
import java.io.FileNotFoundException;
import java.util.Set;
-import javax.inject.Singleton;
-
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.apache.james.backends.postgres.PostgresConfiguration;
import org.apache.james.backends.postgres.PostgresModule;
import org.apache.james.backends.postgres.PostgresTableManager;
import org.apache.james.backends.postgres.utils.DomainImplPostgresConnectionFactory;
import org.apache.james.backends.postgres.utils.JamesPostgresConnectionFactory;
+import org.apache.james.backends.postgres.utils.PostgresExecutor;
import org.apache.james.backends.postgres.utils.SinglePostgresConnectionFactory;
import org.apache.james.utils.InitializationOperation;
import org.apache.james.utils.InitilizationOperationBuilder;
@@ -38,6 +37,8 @@ import org.slf4j.LoggerFactory;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
+import com.google.inject.Scopes;
+import com.google.inject.Singleton;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.multibindings.ProvidesIntoSet;
@@ -52,6 +53,7 @@ public class PostgresCommonModule extends AbstractModule {
@Override
public void configure() {
Multibinder.newSetBinder(binder(), PostgresModule.class);
+ bind(PostgresExecutor.Factory.class).in(Scopes.SINGLETON);
}
@Provides
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org