Skip to content

Commit 77a205c

Browse files
committed
Polishing.
Tweak naming. Add Javadoc and documentation. See #1628 Original pull request: #4552
1 parent d721579 commit 77a205c

12 files changed

+208
-119
lines changed

Diff for: spring-data-mongodb/src/main/java/org/springframework/data/mongodb/DefaultMongoTransactionOptionsResolver.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.util.Map;
1919
import java.util.Set;
2020

21-
import org.springframework.data.util.Lazy;
2221
import org.springframework.lang.Nullable;
2322

2423
/**
@@ -30,14 +29,12 @@
3029
* @author Christoph Strobl
3130
* @since 4.3
3231
*/
33-
class DefaultMongoTransactionOptionsResolver implements MongoTransactionOptionsResolver {
32+
enum DefaultMongoTransactionOptionsResolver implements MongoTransactionOptionsResolver {
3433

35-
static final Lazy<MongoTransactionOptionsResolver> INSTANCE = Lazy.of(DefaultMongoTransactionOptionsResolver::new);
34+
INSTANCE;
3635

3736
private static final String PREFIX = "mongo:";
3837

39-
private DefaultMongoTransactionOptionsResolver() {}
40-
4138
@Override
4239
public MongoTransactionOptions convert(Map<String, String> options) {
4340

@@ -53,7 +50,7 @@ public String getLabelPrefix() {
5350

5451
private static void validateKeys(Set<String> keys) {
5552

56-
if (!keys.stream().allMatch(SimpleMongoTransactionOptions.KNOWN_KEYS::contains)) {
53+
if (!SimpleMongoTransactionOptions.KNOWN_KEYS.containsAll(keys)) {
5754

5855
throw new IllegalArgumentException("Transaction labels contained invalid values. Has to be one of %s"
5956
.formatted(SimpleMongoTransactionOptions.KNOWN_KEYS));

Diff for: spring-data-mongodb/src/main/java/org/springframework/data/mongodb/MongoTransactionManager.java

+31-29
Original file line numberDiff line numberDiff line change
@@ -64,59 +64,61 @@
6464
public class MongoTransactionManager extends AbstractPlatformTransactionManager
6565
implements ResourceTransactionManager, InitializingBean {
6666

67-
private @Nullable MongoDatabaseFactory dbFactory;
67+
private @Nullable MongoDatabaseFactory databaseFactory;
6868
private MongoTransactionOptions options;
69-
private MongoTransactionOptionsResolver transactionOptionsResolver;
69+
private final MongoTransactionOptionsResolver transactionOptionsResolver;
7070

7171
/**
72-
* Create a new {@link MongoTransactionManager} for bean-style usage.
73-
* <br />
72+
* Create a new {@link MongoTransactionManager} for bean-style usage. <br />
7473
* <strong>Note:</strong>The {@link MongoDatabaseFactory db factory} has to be
75-
* {@link #setDbFactory(MongoDatabaseFactory) set} before using the instance. Use this constructor to prepare a
76-
* {@link MongoTransactionManager} via a {@link org.springframework.beans.factory.BeanFactory}.
77-
* <br />
74+
* {@link #setDatabaseFactory(MongoDatabaseFactory) set} before using the instance. Use this constructor to prepare a
75+
* {@link MongoTransactionManager} via a {@link org.springframework.beans.factory.BeanFactory}. <br />
7876
* Optionally it is possible to set default {@link TransactionOptions transaction options} defining
7977
* {@link com.mongodb.ReadConcern} and {@link com.mongodb.WriteConcern}.
8078
*
81-
* @see #setDbFactory(MongoDatabaseFactory)
79+
* @see #setDatabaseFactory(MongoDatabaseFactory)
8280
* @see #setTransactionSynchronization(int)
8381
*/
84-
public MongoTransactionManager() {}
82+
public MongoTransactionManager() {
83+
this.transactionOptionsResolver = MongoTransactionOptionsResolver.defaultResolver();
84+
}
8585

8686
/**
8787
* Create a new {@link MongoTransactionManager} obtaining sessions from the given {@link MongoDatabaseFactory}.
8888
*
89-
* @param dbFactory must not be {@literal null}.
89+
* @param databaseFactory must not be {@literal null}.
9090
*/
91-
public MongoTransactionManager(MongoDatabaseFactory dbFactory) {
92-
this(dbFactory, null);
91+
public MongoTransactionManager(MongoDatabaseFactory databaseFactory) {
92+
this(databaseFactory, null);
9393
}
9494

9595
/**
9696
* Create a new {@link MongoTransactionManager} obtaining sessions from the given {@link MongoDatabaseFactory}
9797
* applying the given {@link TransactionOptions options}, if present, when starting a new transaction.
9898
*
99-
* @param dbFactory must not be {@literal null}.
99+
* @param databaseFactory must not be {@literal null}.
100100
* @param options can be {@literal null}.
101101
*/
102-
public MongoTransactionManager(MongoDatabaseFactory dbFactory, @Nullable TransactionOptions options) {
103-
this(dbFactory, MongoTransactionOptionsResolver.defaultResolver(), MongoTransactionOptions.of(options));
102+
public MongoTransactionManager(MongoDatabaseFactory databaseFactory, @Nullable TransactionOptions options) {
103+
this(databaseFactory, MongoTransactionOptionsResolver.defaultResolver(), MongoTransactionOptions.of(options));
104104
}
105105

106106
/**
107107
* Create a new {@link MongoTransactionManager} obtaining sessions from the given {@link MongoDatabaseFactory}
108108
* applying the given {@link TransactionOptions options}, if present, when starting a new transaction.
109109
*
110-
* @param dbFactory must not be {@literal null}.
111-
* @param transactionOptionsResolver
110+
* @param databaseFactory must not be {@literal null}.
111+
* @param transactionOptionsResolver must not be {@literal null}.
112112
* @param defaultTransactionOptions can be {@literal null}.
113113
* @since 4.3
114114
*/
115-
public MongoTransactionManager(MongoDatabaseFactory dbFactory, MongoTransactionOptionsResolver transactionOptionsResolver, MongoTransactionOptions defaultTransactionOptions) {
115+
public MongoTransactionManager(MongoDatabaseFactory databaseFactory,
116+
MongoTransactionOptionsResolver transactionOptionsResolver, MongoTransactionOptions defaultTransactionOptions) {
116117

117-
Assert.notNull(dbFactory, "DbFactory must not be null");
118+
Assert.notNull(databaseFactory, "MongoDatabaseFactory must not be null");
119+
Assert.notNull(transactionOptionsResolver, "MongoTransactionOptionsResolver must not be null");
118120

119-
this.dbFactory = dbFactory;
121+
this.databaseFactory = databaseFactory;
120122
this.transactionOptionsResolver = transactionOptionsResolver;
121123
this.options = defaultTransactionOptions;
122124
}
@@ -278,12 +280,12 @@ protected void doCleanupAfterCompletion(Object transaction) {
278280
/**
279281
* Set the {@link MongoDatabaseFactory} that this instance should manage transactions for.
280282
*
281-
* @param dbFactory must not be {@literal null}.
283+
* @param databaseFactory must not be {@literal null}.
282284
*/
283-
public void setDbFactory(MongoDatabaseFactory dbFactory) {
285+
public void setDatabaseFactory(MongoDatabaseFactory databaseFactory) {
284286

285-
Assert.notNull(dbFactory, "DbFactory must not be null");
286-
this.dbFactory = dbFactory;
287+
Assert.notNull(databaseFactory, "DbFactory must not be null");
288+
this.databaseFactory = databaseFactory;
287289
}
288290

289291
/**
@@ -301,8 +303,8 @@ public void setOptions(@Nullable TransactionOptions options) {
301303
* @return can be {@literal null}.
302304
*/
303305
@Nullable
304-
public MongoDatabaseFactory getDbFactory() {
305-
return dbFactory;
306+
public MongoDatabaseFactory getDatabaseFactory() {
307+
return databaseFactory;
306308
}
307309

308310
@Override
@@ -326,14 +328,14 @@ private MongoResourceHolder newResourceHolder(TransactionDefinition definition,
326328
}
327329

328330
/**
329-
* @throws IllegalStateException if {@link #dbFactory} is {@literal null}.
331+
* @throws IllegalStateException if {@link #databaseFactory} is {@literal null}.
330332
*/
331333
private MongoDatabaseFactory getRequiredDbFactory() {
332334

333-
Assert.state(dbFactory != null,
335+
Assert.state(databaseFactory != null,
334336
"MongoTransactionManager operates upon a MongoDbFactory; Did you forget to provide one; It's required");
335337

336-
return dbFactory;
338+
return databaseFactory;
337339
}
338340

339341
private static MongoTransactionObject extractMongoTransaction(Object transaction) {

Diff for: spring-data-mongodb/src/main/java/org/springframework/data/mongodb/MongoTransactionOptions.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717

1818
import java.time.Duration;
1919
import java.util.concurrent.TimeUnit;
20+
import java.util.function.Function;
2021

2122
import org.springframework.data.mongodb.core.ReadConcernAware;
2223
import org.springframework.data.mongodb.core.ReadPreferenceAware;
2324
import org.springframework.data.mongodb.core.WriteConcernAware;
2425
import org.springframework.lang.Nullable;
2526

26-
import com.mongodb.Function;
2727
import com.mongodb.ReadConcern;
2828
import com.mongodb.ReadPreference;
2929
import com.mongodb.TransactionOptions;
@@ -115,24 +115,23 @@ public WriteConcern getWriteConcern() {
115115
}
116116

117117
/**
118-
* Map the current options using the given mapping {@link Function}.
118+
* Apply the current options using the given mapping {@link Function} and return its result.
119119
*
120120
* @param mappingFunction
121-
* @return instance of T.
122-
* @param <T>
121+
* @return result of the mapping function.
123122
*/
124-
default <T> T as(Function<MongoTransactionOptions, T> mappingFunction) {
123+
default <T> T map(Function<MongoTransactionOptions, T> mappingFunction) {
125124
return mappingFunction.apply(this);
126125
}
127126

128127
/**
129128
* @return MongoDB driver native {@link TransactionOptions}.
130-
* @see MongoTransactionOptions#as(Function)
129+
* @see MongoTransactionOptions#map(Function)
131130
*/
132131
@Nullable
133132
default TransactionOptions toDriverOptions() {
134133

135-
return as(it -> {
134+
return map(it -> {
136135

137136
if (MongoTransactionOptions.NONE.equals(it)) {
138137
return null;
@@ -157,7 +156,7 @@ default TransactionOptions toDriverOptions() {
157156

158157
/**
159158
* Factory method to wrap given MongoDB driver native {@link TransactionOptions} into {@link MongoTransactionOptions}.
160-
*
159+
*
161160
* @param options
162161
* @return {@link MongoTransactionOptions#NONE} if given object is {@literal null}.
163162
*/

Diff for: spring-data-mongodb/src/main/java/org/springframework/data/mongodb/MongoTransactionOptionsResolver.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
* A {@link TransactionOptionResolver} reading MongoDB specific {@link MongoTransactionOptions transaction options} from
2929
* a {@link TransactionDefinition}. Implementations of {@link MongoTransactionOptions} may choose a specific
3030
* {@link #getLabelPrefix() prefix} for {@link TransactionAttribute#getLabels() transaction attribute labels} to avoid
31-
* evaluating non store specific ones.
31+
* evaluating non-store specific ones.
3232
* <p>
3333
* {@link TransactionAttribute#getLabels()} evaluated by default should follow the property style using {@code =} to
3434
* separate key and value pairs.
@@ -50,11 +50,11 @@ public interface MongoTransactionOptionsResolver extends TransactionOptionResolv
5050
/**
5151
* Obtain the default {@link MongoTransactionOptionsResolver} implementation using a {@literal mongo:}
5252
* {@link #getLabelPrefix() prefix}.
53-
*
53+
*
5454
* @return instance of default {@link MongoTransactionOptionsResolver} implementation.
5555
*/
5656
static MongoTransactionOptionsResolver defaultResolver() {
57-
return DefaultMongoTransactionOptionsResolver.INSTANCE.get();
57+
return DefaultMongoTransactionOptionsResolver.INSTANCE;
5858
}
5959

6060
/**
@@ -71,16 +71,16 @@ static MongoTransactionOptionsResolver defaultResolver() {
7171
* <p>
7272
* Splits applicable labels property style using {@literal =} as deliminator and removes a potential
7373
* {@link #getLabelPrefix() prefix} before calling {@link #convert(Map)} with filtered label values.
74-
*
75-
* @param txDefinition
74+
*
75+
* @param definition
7676
* @return {@link MongoTransactionOptions#NONE} in case the given {@link TransactionDefinition} is not a
7777
* {@link TransactionAttribute} if no matching {@link TransactionAttribute#getLabels() labels} could be found.
7878
* @throws IllegalArgumentException for options that do not map to valid transactions options or malformatted labels.
7979
*/
8080
@Override
81-
default MongoTransactionOptions resolve(TransactionDefinition txDefinition) {
81+
default MongoTransactionOptions resolve(TransactionDefinition definition) {
8282

83-
if (!(txDefinition instanceof TransactionAttribute attribute)) {
83+
if (!(definition instanceof TransactionAttribute attribute)) {
8484
return MongoTransactionOptions.NONE;
8585
}
8686

Diff for: spring-data-mongodb/src/main/java/org/springframework/data/mongodb/ReactiveMongoTransactionManager.java

+15-14
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,14 @@
3737
/**
3838
* A {@link org.springframework.transaction.ReactiveTransactionManager} implementation that manages
3939
* {@link com.mongodb.reactivestreams.client.ClientSession} based transactions for a single
40-
* {@link org.springframework.data.mongodb.ReactiveMongoDatabaseFactory}.
41-
* <br />
40+
* {@link org.springframework.data.mongodb.ReactiveMongoDatabaseFactory}. <br />
4241
* Binds a {@link ClientSession} from the specified
4342
* {@link org.springframework.data.mongodb.ReactiveMongoDatabaseFactory} to the subscriber
44-
* {@link reactor.util.context.Context}.
45-
* <br />
43+
* {@link reactor.util.context.Context}. <br />
4644
* {@link org.springframework.transaction.TransactionDefinition#isReadOnly() Readonly} transactions operate on a
4745
* {@link ClientSession} and enable causal consistency, and also {@link ClientSession#startTransaction() start},
4846
* {@link com.mongodb.reactivestreams.client.ClientSession#commitTransaction() commit} or
49-
* {@link ClientSession#abortTransaction() abort} a transaction.
50-
* <br />
47+
* {@link ClientSession#abortTransaction() abort} a transaction. <br />
5148
* Application code is required to retrieve the {@link com.mongodb.reactivestreams.client.MongoDatabase} via
5249
* {@link org.springframework.data.mongodb.ReactiveMongoDatabaseUtils#getDatabase(ReactiveMongoDatabaseFactory)} instead
5350
* of a standard {@link org.springframework.data.mongodb.ReactiveMongoDatabaseFactory#getMongoDatabase()} call. Spring
@@ -68,11 +65,10 @@ public class ReactiveMongoTransactionManager extends AbstractReactiveTransaction
6865

6966
private @Nullable ReactiveMongoDatabaseFactory databaseFactory;
7067
private @Nullable MongoTransactionOptions options;
71-
private MongoTransactionOptionsResolver transactionOptionsResolver;
68+
private final MongoTransactionOptionsResolver transactionOptionsResolver;
7269

7370
/**
74-
* Create a new {@link ReactiveMongoTransactionManager} for bean-style usage.
75-
* <br />
71+
* Create a new {@link ReactiveMongoTransactionManager} for bean-style usage. <br />
7672
* <strong>Note:</strong>The {@link org.springframework.data.mongodb.ReactiveMongoDatabaseFactory db factory} has to
7773
* be {@link #setDatabaseFactory(ReactiveMongoDatabaseFactory)} set} before using the instance. Use this constructor
7874
* to prepare a {@link ReactiveMongoTransactionManager} via a {@link org.springframework.beans.factory.BeanFactory}.
@@ -82,7 +78,9 @@ public class ReactiveMongoTransactionManager extends AbstractReactiveTransaction
8278
*
8379
* @see #setDatabaseFactory(ReactiveMongoDatabaseFactory)
8480
*/
85-
public ReactiveMongoTransactionManager() {}
81+
public ReactiveMongoTransactionManager() {
82+
this.transactionOptionsResolver = MongoTransactionOptionsResolver.defaultResolver();
83+
}
8684

8785
/**
8886
* Create a new {@link ReactiveMongoTransactionManager} obtaining sessions from the given
@@ -113,14 +111,16 @@ public ReactiveMongoTransactionManager(ReactiveMongoDatabaseFactory databaseFact
113111
* starting a new transaction.
114112
*
115113
* @param databaseFactory must not be {@literal null}.
116-
* @param transactionOptionsResolver
114+
* @param transactionOptionsResolver must not be {@literal null}.
117115
* @param defaultTransactionOptions can be {@literal null}.
118-
*
116+
* @since 4.3
119117
*/
120-
public ReactiveMongoTransactionManager(ReactiveMongoDatabaseFactory databaseFactory, MongoTransactionOptionsResolver transactionOptionsResolver,
118+
public ReactiveMongoTransactionManager(ReactiveMongoDatabaseFactory databaseFactory,
119+
MongoTransactionOptionsResolver transactionOptionsResolver,
121120
@Nullable MongoTransactionOptions defaultTransactionOptions) {
122121

123122
Assert.notNull(databaseFactory, "DatabaseFactory must not be null");
123+
Assert.notNull(transactionOptionsResolver, "MongoTransactionOptionsResolver must not be null");
124124

125125
this.databaseFactory = databaseFactory;
126126
this.transactionOptionsResolver = transactionOptionsResolver;
@@ -163,7 +163,8 @@ protected Mono<Void> doBegin(TransactionSynchronizationManager synchronizationMa
163163

164164
}).doOnNext(resourceHolder -> {
165165

166-
MongoTransactionOptions mongoTransactionOptions = transactionOptionsResolver.resolve(definition).mergeWith(options);
166+
MongoTransactionOptions mongoTransactionOptions = transactionOptionsResolver.resolve(definition)
167+
.mergeWith(options);
167168
mongoTransactionObject.startTransaction(mongoTransactionOptions.toDriverOptions());
168169

169170
if (logger.isDebugEnabled()) {

Diff for: spring-data-mongodb/src/main/java/org/springframework/data/mongodb/SimpleMongoTransactionOptions.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,13 @@ public WriteConcern getWriteConcern() {
8282
return writeConcern;
8383
}
8484

85+
@Override
86+
public String toString() {
87+
88+
return "DefaultMongoTransactionOptions{" + "maxCommitTime=" + maxCommitTime + ", readConcern=" + readConcern
89+
+ ", readPreference=" + readPreference + ", writeConcern=" + writeConcern + '}';
90+
}
91+
8592
@Nullable
8693
private static Duration doGetMaxCommitTime(Map<String, String> options) {
8794

@@ -123,13 +130,6 @@ private static <T> T getValue(Map<String, String> options, OptionKey key, Functi
123130
return value != null ? convertFunction.apply(value) : null;
124131
}
125132

126-
@Override
127-
public String toString() {
128-
129-
return "DefaultMongoTransactionOptions{" + "maxCommitTime=" + maxCommitTime + ", readConcern=" + readConcern
130-
+ ", readPreference=" + readPreference + ", writeConcern=" + writeConcern + '}';
131-
}
132-
133133
enum OptionKey {
134134

135135
MAX_COMMIT_TIME("maxCommitTime"), READ_CONCERN("readConcern"), READ_PREFERENCE("readPreference"), WRITE_CONCERN(

Diff for: spring-data-mongodb/src/main/java/org/springframework/data/mongodb/TransactionMetadata.java

+8
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,22 @@
2020
import org.springframework.lang.Nullable;
2121

2222
/**
23+
* MongoDB-specific transaction metadata.
24+
*
2325
* @author Christoph Strobl
2426
* @since 4.3
2527
*/
2628
public interface TransactionMetadata {
2729

30+
/**
31+
* @return the maximum commit time. Can be {@literal null} if not configured.
32+
*/
2833
@Nullable
2934
Duration getMaxCommitTime();
3035

36+
/**
37+
* @return {@literal true} if the max commit time is configured; {@literal false} otherwise.
38+
*/
3139
default boolean hasMaxCommitTime() {
3240
return getMaxCommitTime() != null;
3341
}

0 commit comments

Comments
 (0)