Skip to content

Commit c419673

Browse files
authored
refactor: added new mongodb-target-system-api module to centralize MongoDatabase access (#774)
1 parent 42f05f8 commit c419673

File tree

13 files changed

+93
-21
lines changed

13 files changed

+93
-21
lines changed

.github/workflows/release.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,19 @@ jobs:
266266
FLAMINGOCK_JRELEASER_GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }}
267267
FLAMINGOCK_JRELEASER_GPG_PASSPHRASE: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PASSPHRASE }}
268268

269+
mongodb-target-system-api:
270+
needs: [ build ]
271+
uses: ./.github/workflows/module-release-graalvm.yml
272+
with:
273+
module: mongodb-target-system-api
274+
secrets:
275+
FLAMINGOCK_JRELEASER_GITHUB_TOKEN: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }}
276+
FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME }}
277+
FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD }}
278+
FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY }}
279+
FLAMINGOCK_JRELEASER_GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }}
280+
FLAMINGOCK_JRELEASER_GPG_PASSPHRASE: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PASSPHRASE }}
281+
269282
mongodb-sync-target-system:
270283
needs: [ build ]
271284
uses: ./.github/workflows/module-release-graalvm.yml
@@ -491,6 +504,7 @@ jobs:
491504
flamingock-importer,
492505
flamingock-springboot-integration,
493506
nontransactional-target-system,
507+
mongodb-target-system-api,
494508
mongodb-sync-target-system,
495509
mongodb-springdata-target-system,
496510
sql-target-system,

buildSrc/src/main/kotlin/flamingock.project-structure.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ val pluginProjects = setOf(
3535

3636
val targetSystemProjects = setOf(
3737
"nontransactional-target-system",
38+
"mongodb-target-system-api",
3839
"mongodb-sync-target-system",
3940
"mongodb-springdata-target-system",
4041
"sql-target-system",

cli/flamingock-cli/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ dependencies {
1111
implementation(project(":core:flamingock-core"))
1212
implementation(project(":community:flamingock-community"))
1313
implementation(project(":utils:sql-util"))
14+
implementation(project(":core:target-systems:mongodb-target-system-api"))
1415

1516
// CLI framework
1617
implementation("info.picocli:picocli:4.7.5")

community/flamingock-auditstore-mongodb-sync/src/main/java/io/flamingock/community/mongodb/sync/driver/MongoDBSyncAuditStore.java

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import com.mongodb.ReadConcern;
1919
import com.mongodb.ReadPreference;
2020
import com.mongodb.WriteConcern;
21-
import com.mongodb.client.MongoClient;
2221
import com.mongodb.client.MongoDatabase;
2322
import io.flamingock.community.mongodb.sync.internal.MongoDBSyncAuditPersistence;
2423
import io.flamingock.community.mongodb.sync.internal.MongoDBSyncLockService;
@@ -30,20 +29,20 @@
3029
import io.flamingock.internal.core.store.CommunityAuditStore;
3130
import io.flamingock.internal.util.TimeService;
3231
import io.flamingock.internal.util.id.RunnerId;
32+
import io.flamingock.targetystem.mongodb.api.MongoDBTargetSystem;
3333
import io.flamingock.targetystem.mongodb.sync.MongoDBSyncTargetSystem;
3434

3535
import static io.flamingock.internal.util.constants.CommunityPersistenceConstants.DEFAULT_AUDIT_STORE_NAME;
3636
import static io.flamingock.internal.util.constants.CommunityPersistenceConstants.DEFAULT_LOCK_STORE_NAME;
3737

3838
public class MongoDBSyncAuditStore implements CommunityAuditStore {
3939

40+
private final MongoDBTargetSystem mongoDBTargetSystem;
4041

4142
protected RunnerId runnerId;
4243
private CommunityConfigurable communityConfiguration;
4344
private MongoDBSyncAuditPersistence persistence;
4445
private MongoDBSyncLockService lockService;
45-
private final MongoClient client;
46-
private final String databaseName;
4746
private MongoDatabase database;
4847
private String auditRepositoryName = DEFAULT_AUDIT_STORE_NAME;
4948
private String lockRepositoryName = DEFAULT_LOCK_STORE_NAME;
@@ -53,9 +52,8 @@ public class MongoDBSyncAuditStore implements CommunityAuditStore {
5352
private boolean autoCreate = true;
5453

5554

56-
private MongoDBSyncAuditStore(MongoClient client, String databaseName) {
57-
this.client = client;
58-
this.databaseName = databaseName;
55+
private MongoDBSyncAuditStore(MongoDBTargetSystem mongoDBTargetSystem) {
56+
this.mongoDBTargetSystem = mongoDBTargetSystem;
5957
}
6058

6159
/**
@@ -68,8 +66,8 @@ private MongoDBSyncAuditStore(MongoClient client, String databaseName) {
6866
* @param targetSystem the target system from which to derive the client and database
6967
* @return a new audit store bound to the same MongoDB instance as the target system
7068
*/
71-
public static MongoDBSyncAuditStore from(MongoDBSyncTargetSystem targetSystem) {
72-
return new MongoDBSyncAuditStore(targetSystem.getClient(), targetSystem.getDatabaseName());
69+
public static MongoDBSyncAuditStore from(MongoDBTargetSystem targetSystem) {
70+
return new MongoDBSyncAuditStore(targetSystem);
7371
}
7472

7573
public MongoDBSyncAuditStore withAuditRepositoryName(String auditRepositoryName) {
@@ -106,6 +104,7 @@ public MongoDBSyncAuditStore withAutoCreate(boolean autoCreate) {
106104
public void initialize(ContextResolver baseContext) {
107105
runnerId = baseContext.getRequiredDependencyValue(RunnerId.class);
108106
communityConfiguration = baseContext.getRequiredDependencyValue(CommunityConfigurable.class);
107+
database = mongoDBTargetSystem.getMongoDatabase();
109108
this.validate();
110109
}
111110

@@ -145,15 +144,10 @@ public synchronized CommunityLockService getLockService() {
145144

146145
private void validate() {
147146

148-
if (client == null) {
149-
throw new FlamingockException("The 'client' instance is required.");
147+
if (database == null ) {
148+
throw new FlamingockException("The 'database' instance is required.");
150149
}
151150

152-
if (databaseName == null || databaseName.trim().isEmpty()) {
153-
throw new FlamingockException("The 'databaseName' property is required.");
154-
}
155-
database = client.getDatabase(databaseName);
156-
157151
if (auditRepositoryName == null || auditRepositoryName.trim().isEmpty()) {
158152
throw new FlamingockException("The 'auditRepositoryName' property is required.");
159153
}

community/flamingock-community/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ dependencies {
66
api(project(":core:target-systems:nontransactional-target-system"))
77
api(project(":core:target-systems:couchbase-target-system"))
88
api(project(":core:target-systems:dynamodb-target-system"))
9+
api(project(":core:target-systems:mongodb-target-system-api"))
910
api(project(":core:target-systems:mongodb-springdata-target-system"))
1011
api(project(":core:target-systems:mongodb-sync-target-system"))
1112
api(project(":core:target-systems:sql-target-system"))

core/flamingock-core/src/main/java/io/flamingock/internal/core/builder/AbstractBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@ protected AbstractBuilder(
8282
protected abstract HOLDER getSelf();
8383

8484
protected void configureStoreAndTargetSystem(PriorityContext dependencyContext) {
85-
auditStore.initialize(dependencyContext);
8685
//remove this, targetSystem should be mandatory
8786
targetSystemManager.initialize(dependencyContext);
87+
auditStore.initialize(dependencyContext);
8888
}
8989

9090
protected AuditPersistence getAuditPersistence(PriorityContext hierarchicalContext) {

core/target-systems/mongodb-springdata-target-system/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ dependencies {
1111
api(project(":core:flamingock-core"))
1212
implementation(project(":utils:mongodb-util"))
1313
implementation(project(":legacy:mongock-importer-mongodb"))
14+
api(project(":core:target-systems:mongodb-target-system-api"))
1415

1516
//General
1617
compileOnly("org.mongodb:mongodb-driver-sync:${versions["mongodb"]}")

core/target-systems/mongodb-springdata-target-system/src/main/java/io/flamingock/targetsystem/mongodb/springdata/MongoDBSpringDataTargetSystem.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.mongodb.ReadConcern;
1919
import com.mongodb.ReadPreference;
2020
import com.mongodb.WriteConcern;
21+
import com.mongodb.client.MongoDatabase;
2122
import io.flamingock.importer.mongock.mongodb.MongockImporterMongoDB;
2223
import io.flamingock.internal.common.core.audit.AuditHistoryReader;
2324
import io.flamingock.internal.common.core.audit.AuditReaderType;
@@ -26,6 +27,7 @@
2627
import io.flamingock.internal.core.targets.mark.NoOpTargetSystemAuditMarker;
2728
import io.flamingock.internal.core.targets.TransactionalTargetSystem;
2829
import io.flamingock.internal.core.transaction.TransactionWrapper;
30+
import io.flamingock.targetystem.mongodb.api.MongoDBTargetSystem;
2931
import org.springframework.data.mongodb.core.MongoTemplate;
3032

3133
import java.util.Objects;
@@ -35,9 +37,10 @@
3537
import static io.flamingock.internal.common.core.metadata.Constants.DEFAULT_MONGOCK_ORIGIN;
3638

3739

38-
public class MongoDBSpringDataTargetSystem extends TransactionalTargetSystem<MongoDBSpringDataTargetSystem> {
40+
public class MongoDBSpringDataTargetSystem extends TransactionalTargetSystem<MongoDBSpringDataTargetSystem>
41+
implements MongoDBTargetSystem {
3942

40-
private MongoTemplate mongoTemplate;
43+
private final MongoTemplate mongoTemplate;
4144
private WriteConcern writeConcern = WriteConcern.MAJORITY.withJournal(true);
4245
private ReadConcern readConcern = ReadConcern.MAJORITY;
4346
private ReadPreference readPreference = ReadPreference.primary();
@@ -80,6 +83,14 @@ public ReadPreference getReadPreference() {
8083
return readPreference;
8184
}
8285

86+
@Override
87+
public MongoDatabase getMongoDatabase() {
88+
if (mongoTemplate == null) {
89+
throw new FlamingockException("TargetSystem is not initialized. The 'mongoTemplate' instance is required.");
90+
}
91+
return mongoTemplate.getDb();
92+
}
93+
8394
@Override
8495
public void initialize(ContextResolver baseContext) {
8596
this.validate();

core/target-systems/mongodb-sync-target-system/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ dependencies {
44
api(project(":core:flamingock-core"))
55
implementation(project(":utils:mongodb-util"))
66
implementation(project(":legacy:mongock-importer-mongodb"))
7+
api(project(":core:target-systems:mongodb-target-system-api"))
78

89
//General
910
compileOnly("org.mongodb:mongodb-driver-sync:4.0.0")

core/target-systems/mongodb-sync-target-system/src/main/java/io/flamingock/targetystem/mongodb/sync/MongoDBSyncTargetSystem.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,15 @@
3030
import io.flamingock.internal.core.targets.TransactionalTargetSystem;
3131
import io.flamingock.internal.core.transaction.TransactionWrapper;
3232
import io.flamingock.importer.mongock.mongodb.MongockImporterMongoDB;
33+
import io.flamingock.targetystem.mongodb.api.MongoDBTargetSystem;
3334

3435
import java.util.Objects;
3536
import java.util.Optional;
3637

3738
import static io.flamingock.internal.common.core.audit.AuditReaderType.MONGOCK;
3839
import static io.flamingock.internal.common.core.metadata.Constants.DEFAULT_MONGOCK_ORIGIN;
3940

40-
public class MongoDBSyncTargetSystem extends TransactionalTargetSystem<MongoDBSyncTargetSystem> {
41+
public class MongoDBSyncTargetSystem extends TransactionalTargetSystem<MongoDBSyncTargetSystem> implements MongoDBTargetSystem {
4142

4243
private final MongoClient mongoClient;
4344
private final String databaseName;
@@ -73,8 +74,12 @@ public MongoClient getClient() {
7374
return mongoClient;
7475
}
7576

76-
public MongoDatabase getDatabase() {
77-
return database;
77+
@Override
78+
public MongoDatabase getMongoDatabase() {
79+
if (mongoClient == null || databaseName == null || databaseName.isEmpty()) {
80+
throw new FlamingockException("TargetSystem is not initialized. The 'mongoClient' instance and 'databaseName' property are required.");
81+
}
82+
return mongoClient.getDatabase(databaseName);
7883
}
7984

8085
public String getDatabaseName() {

0 commit comments

Comments
 (0)