Skip to content

Commit 4978cec

Browse files
committed
Merge branch 'datacouch_1145_transaction_support' of https://github.com/programmatix/spring-data-couchbase into programmatix-datacouch_1145_transaction_support
2 parents 9e7fdde + 2458ac7 commit 4978cec

File tree

77 files changed

+1864
-1782
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+1864
-1782
lines changed

src/main/java/com/couchbase/client/java/Cluster.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@
103103
* The SDK will only work against Couchbase Server 5.0 and later, because RBAC (role-based access control) is a first
104104
* class concept since 3.0 and therefore required.
105105
*/
106-
// todo gp is this required?
106+
// todo gpx as per discussion with miker - if required, ClusterInterface will be added to the SDK instead
107107
public class Cluster implements ClusterInterface {
108108

109109
/**
@@ -256,9 +256,9 @@ public static Cluster connect(final String connectionString, final ClusterOption
256256
final ClusterOptions.Built opts = options.build();
257257
final Supplier<ClusterEnvironment> environmentSupplier = extractClusterEnvironment(connectionString, opts);
258258
return new Cluster(
259-
environmentSupplier,
260-
opts.authenticator(),
261-
seedNodesFromConnectionString(connectionString, environmentSupplier.get())
259+
environmentSupplier,
260+
opts.authenticator(),
261+
seedNodesFromConnectionString(connectionString, environmentSupplier.get())
262262
);
263263
}
264264

src/main/java/com/couchbase/client/java/ClusterInterface.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public interface ClusterInterface {
8383

8484
//AnalyticsResult analyticsQuery(String statement);
8585

86-
// AnalyticsResult analyticsQuery(String statement, AnalyticsOptions options);
86+
// AnalyticsResult analyticsQuery(String statement, AnalyticsOptions options);
8787

8888
SearchResult searchQuery(String indexName, SearchQuery query);
8989

src/main/java/com/couchbase/client/java/transactions/AttemptContextReactiveAccessor.java

+13-27
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,6 @@
4444
*/
4545
public class AttemptContextReactiveAccessor {
4646

47-
public static ReactiveTransactionAttemptContext getACR(TransactionAttemptContext attemptContext) {
48-
// return attemptContext.ctx();
49-
// todo gp is this access needed. Could hold the raw CoreTransactionAttemptContext instead.
50-
return null;
51-
}
52-
5347
public static ReactiveTransactions reactive(Transactions transactions) {
5448
try {
5549
Field field = Transactions.class.getDeclaredField("reactive");
@@ -212,26 +206,18 @@ public static TransactionResult run(Transactions transactions, Consumer<Transact
212206
return reactive(transactions).runBlocking(transactionLogic, coreTransactionOptions);
213207
}
214208

215-
// todo gp if needed let's expose in the SDK
216-
// static private String configDebug(TransactionConfig config, PerTransactionConfig perConfig) {
217-
// StringBuilder sb = new StringBuilder();
218-
// sb.append("library version: ");
219-
// sb.append(TransactionsReactive.class.getPackage().getImplementationVersion());
220-
// sb.append(" config: ");
221-
// sb.append("atrs=");
222-
// sb.append(config.numAtrs());
223-
// sb.append(", metadataCollection=");
224-
// sb.append(config.metadataCollection());
225-
// sb.append(", expiry=");
226-
// sb.append(perConfig.expirationTime().orElse(config.transactionExpirationTime()).toMillis());
227-
// sb.append("msecs durability=");
228-
// sb.append(config.durabilityLevel());
229-
// sb.append(" per-txn config=");
230-
// sb.append(" durability=");
231-
// sb.append(perConfig.durabilityLevel());
232-
// sb.append(", supported=");
233-
// sb.append(Supported.SUPPORTED);
234-
// return sb.toString();
235-
// }
209+
CoreTransactionAttemptContext coreTransactionsReactive;
210+
try {
211+
Field field = TransactionAttemptContext.class.getDeclaredField("internal");
212+
field.setAccessible(true);
213+
coreTransactionsReactive = (CoreTransactionAttemptContext) field.get(atr);
214+
} catch (Throwable err) {
215+
throw new RuntimeException(err);
216+
}
217+
return coreTransactionsReactive;
218+
}
236219

220+
public static ReactiveTransactionAttemptContext createReactiveTransactionAttemptContext(CoreTransactionAttemptContext core, JsonSerializer jsonSerializer) {
221+
return new ReactiveTransactionAttemptContext(core, jsonSerializer);
222+
}
237223
}

src/main/java/com/example/demo/CouchbaseTransactionalTemplate.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ public <T> SpringTransactionGetResult<T> findById(String id, Class<T> domainType
2626
CoreTransactionAttemptContext ctx = getContext();
2727
CoreTransactionGetResult getResult = ctx.get( makeCollectionIdentifier(template.getCouchbaseClientFactory().getDefaultCollection().async()) , id).block();
2828

29-
// todo gp getResult.cas() is no longer exposed - required?
30-
T t = template.support().decodeEntity(id, new String(getResult.contentAsBytes()), 0, domainType,
29+
T t = template.support().decodeEntity(id, new String(getResult.contentAsBytes()), getResult.cas(), domainType,
3130
null, null, null);
3231
return new SpringTransactionGetResult<>(t, getResult);
3332
} catch (Exception e) {

src/main/java/com/example/demo/SpringTransactionGetResult.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ public CoreTransactionGetResult getInner() {
2424
@Override
2525
public String toString() {
2626
return "SpringTransactionGetResult{" +
27-
"value=" + value +
28-
", inner=" + inner +
29-
'}';
27+
"value=" + value +
28+
", inner=" + inner +
29+
'}';
3030
}
3131
}

src/main/java/org/springframework/data/couchbase/CouchbaseClientFactory.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public interface CouchbaseClientFactory extends Closeable {
7777
PersistenceExceptionTranslator getExceptionTranslator();
7878

7979
CoreTransactionAttemptContext getCore(TransactionOptions options,
80-
CoreTransactionAttemptContext atr);
80+
CoreTransactionAttemptContext atr);
8181

8282
//CouchbaseClientFactory with(CouchbaseTransactionalOperator txOp);
8383

src/main/java/org/springframework/data/couchbase/ReactiveCouchbaseClientFactory.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import com.couchbase.client.java.Scope;
2424
import com.couchbase.client.java.transactions.ReactiveTransactionAttemptContext;
2525
import com.couchbase.client.java.transactions.config.TransactionOptions;
26-
import org.springframework.data.couchbase.transaction.ClientSessionOptions;
2726
import org.springframework.data.couchbase.transaction.CouchbaseTransactionalOperator;
2827
import org.springframework.data.couchbase.transaction.ReactiveCouchbaseResourceHolder;
2928
import reactor.core.publisher.Mono;
@@ -107,8 +106,7 @@ public interface ReactiveCouchbaseClientFactory /*extends CodecRegistryProvider*
107106

108107
void close() throws IOException;
109108

110-
ReactiveCouchbaseResourceHolder getTransactionResources(TransactionOptions options,
111-
CoreTransactionAttemptContext ctx);
109+
ReactiveCouchbaseResourceHolder getTransactionResources(TransactionOptions options, CoreTransactionAttemptContext ctx);
112110

113111
/*
114112
* (non-Javadoc)

src/main/java/org/springframework/data/couchbase/SimpleCouchbaseClientFactory.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,21 @@ public class SimpleCouchbaseClientFactory implements CouchbaseClientFactory {
5353
//private JsonSerializer serializer = null;
5454

5555
public SimpleCouchbaseClientFactory(final String connectionString, final Authenticator authenticator,
56-
final String bucketName) {
56+
final String bucketName) {
5757
this(connectionString, authenticator, bucketName, null);
5858
}
5959

6060
public SimpleCouchbaseClientFactory(final String connectionString, final Authenticator authenticator,
61-
final String bucketName, final String scopeName) {
61+
final String bucketName, final String scopeName) {
6262
this(new OwnedSupplier<>(Cluster.connect(connectionString, ClusterOptions.clusterOptions(authenticator)
63-
// todo gp disabling cleanupLostAttempts to simplify output during development
64-
.environment(env -> env.transactionsConfig(
65-
TransactionsConfig.cleanupConfig(TransactionsCleanupConfig.cleanupLostAttempts(false)))))),
63+
// todo gp disabling cleanupLostAttempts to simplify output during development
64+
.environment(env -> env.transactionsConfig(
65+
TransactionsConfig.cleanupConfig(TransactionsCleanupConfig.cleanupLostAttempts(false)))))),
6666
bucketName, scopeName);
6767
}
6868

6969
public SimpleCouchbaseClientFactory(final String connectionString, final Authenticator authenticator,
70-
final String bucketName, final String scopeName, final ClusterEnvironment environment) {
70+
final String bucketName, final String scopeName, final ClusterEnvironment environment) {
7171
this(
7272
new OwnedSupplier<>(
7373
Cluster.connect(connectionString, ClusterOptions.clusterOptions(authenticator).environment(environment))),
@@ -81,7 +81,7 @@ public SimpleCouchbaseClientFactory(final Cluster cluster, final String bucketNa
8181
}
8282

8383
private SimpleCouchbaseClientFactory(final Supplier<Cluster> cluster, final String bucketName,
84-
final String scopeName) {
84+
final String scopeName) {
8585
this.cluster = cluster;
8686
this.bucket = cluster.get().bucket(bucketName);
8787
this.scope = scopeName == null ? bucket.defaultScope() : bucket.scope(scopeName);

src/main/java/org/springframework/data/couchbase/SimpleReactiveCouchbaseClientFactory.java

+6-8
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class SimpleReactiveCouchbaseClientFactory implements ReactiveCouchbaseCl
3838
CouchbaseTransactionalOperator transactionalOperator;
3939

4040
public SimpleReactiveCouchbaseClientFactory(Cluster cluster, String bucketName, String scopeName,
41-
CouchbaseTransactionalOperator transactionalOperator) {
41+
CouchbaseTransactionalOperator transactionalOperator) {
4242
this.cluster = Mono.just(cluster);
4343
this.theCluster = cluster;
4444
this.bucketName = bucketName;
@@ -146,15 +146,13 @@ public void close() {
146146
}
147147

148148
@Override
149-
public Mono<ReactiveCouchbaseResourceHolder> getTransactionResources(TransactionOptions options) { // hopefully this
150-
// gets filled in
151-
// later
152-
return Mono.just(new ReactiveCouchbaseResourceHolder(null));
149+
public Mono<ReactiveCouchbaseResourceHolder> getTransactionResources(TransactionOptions options) {
150+
return Mono.just(new ReactiveCouchbaseResourceHolder(null));
153151
}
154152

155153
@Override
156154
public ReactiveCouchbaseResourceHolder getTransactionResources(TransactionOptions options,
157-
CoreTransactionAttemptContext atr) {
155+
CoreTransactionAttemptContext atr) {
158156
if (atr == null) {
159157
atr = AttemptContextReactiveAccessor
160158
.newCoreTranactionAttemptContext(AttemptContextReactiveAccessor.reactive(transactions));
@@ -218,7 +216,7 @@ static final class CoreTransactionAttemptContextBoundCouchbaseClientFactory
218216
// private final Transactions transactions;
219217

220218
CoreTransactionAttemptContextBoundCouchbaseClientFactory(ReactiveCouchbaseResourceHolder transactionResources,
221-
ReactiveCouchbaseClientFactory delegate, Transactions transactions) {
219+
ReactiveCouchbaseClientFactory delegate, Transactions transactions) {
222220
this.transactionResources = transactionResources;
223221
this.delegate = delegate;
224222
// this.transactions = transactions;
@@ -308,7 +306,7 @@ public Mono<ReactiveCouchbaseResourceHolder> getTransactionResources(Transaction
308306

309307
@Override
310308
public ReactiveCouchbaseResourceHolder getTransactionResources(TransactionOptions options,
311-
CoreTransactionAttemptContext atr) {
309+
CoreTransactionAttemptContext atr) {
312310
ReactiveCouchbaseResourceHolder holder = delegate.getTransactionResources(options, atr);
313311
return holder;
314312
}

src/main/java/org/springframework/data/couchbase/config/AbstractCouchbaseConfiguration.java

+8-11
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ public ClusterEnvironment couchbaseClusterEnvironment() {
168168
throw new CouchbaseException("non-shadowed Jackson not present");
169169
}
170170
builder.jsonSerializer(JacksonJsonSerializer.create(couchbaseObjectMapper()));
171+
// todo gp only suitable for tests
171172
TransactionsConfig.cleanupConfig(TransactionsCleanupConfig.cleanupLostAttempts(false));
172173
builder.transactionsConfig(transactionsConfig());
173174
configureEnvironment(builder);
@@ -185,15 +186,15 @@ protected void configureEnvironment(final ClusterEnvironment.Builder builder) {
185186

186187
@Bean(name = BeanNames.COUCHBASE_TEMPLATE)
187188
public CouchbaseTemplate couchbaseTemplate(CouchbaseClientFactory couchbaseClientFactory,
188-
ReactiveCouchbaseClientFactory reactiveCouchbaseClientFactory,
189-
MappingCouchbaseConverter mappingCouchbaseConverter, TranslationService couchbaseTranslationService) {
189+
ReactiveCouchbaseClientFactory reactiveCouchbaseClientFactory,
190+
MappingCouchbaseConverter mappingCouchbaseConverter, TranslationService couchbaseTranslationService) {
190191
return new CouchbaseTemplate(couchbaseClientFactory, reactiveCouchbaseClientFactory, mappingCouchbaseConverter,
191192
couchbaseTranslationService, getDefaultConsistency());
192193
}
193194

194195
public CouchbaseTemplate couchbaseTemplate(CouchbaseClientFactory couchbaseClientFactory,
195-
ReactiveCouchbaseClientFactory reactiveCouchbaseClientFactory,
196-
MappingCouchbaseConverter mappingCouchbaseConverter) {
196+
ReactiveCouchbaseClientFactory reactiveCouchbaseClientFactory,
197+
MappingCouchbaseConverter mappingCouchbaseConverter) {
197198
return couchbaseTemplate(couchbaseClientFactory, reactiveCouchbaseClientFactory, mappingCouchbaseConverter,
198199
new JacksonTranslationService());
199200
}
@@ -291,7 +292,7 @@ public String typeKey() {
291292
*/
292293
@Bean
293294
public MappingCouchbaseConverter mappingCouchbaseConverter(CouchbaseMappingContext couchbaseMappingContext,
294-
CouchbaseCustomConversions couchbaseCustomConversions) {
295+
CouchbaseCustomConversions couchbaseCustomConversions) {
295296
MappingCouchbaseConverter converter = new MappingCouchbaseConverter(couchbaseMappingContext, typeKey());
296297
converter.setCustomConversions(couchbaseCustomConversions);
297298
return converter;
@@ -346,12 +347,6 @@ public ObjectMapper couchbaseObjectMapper() {
346347

347348
/***** ALL THIS TX SHOULD BE MOVED OUT INTO THE IMPL OF AbstractCouchbaseConfiguration *****/
348349

349-
// todo gp how to DI this into the Cluster creation esp. as it creates a CoreTransactionConfig
350-
// @Bean
351-
// public TransactionsConfig transactionConfig() {
352-
// return TransactionsConfig.builder().build();
353-
// }
354-
355350
@Bean(BeanNames.REACTIVE_COUCHBASE_TRANSACTION_MANAGER)
356351
ReactiveCouchbaseTransactionManager reactiveTransactionManager(
357352
ReactiveCouchbaseClientFactory reactiveCouchbaseClientFactory) {
@@ -377,11 +372,13 @@ CouchbaseTransactionManager transactionManager(CouchbaseClientFactory clientFact
377372
return new CouchbaseTransactionManager(clientFactory, options);
378373
}
379374

375+
// todo gpx these would be per-transactions options so it seems odd to have a global bean? Surely would want to configure everything at global level instead?
380376
@Bean
381377
public TransactionOptions transactionsOptions(){
382378
return TransactionOptions.transactionOptions();
383379
}
384380

381+
// todo gpx transactions config is now done in standard ClusterConfig - so I think we don't want a separate bean?
385382
public TransactionsConfig.Builder transactionsConfig(){
386383
return TransactionsConfig.builder().durabilityLevel(DurabilityLevel.NONE).timeout(Duration.ofMinutes(20));// for testing
387384
}

src/main/java/org/springframework/data/couchbase/core/AbstractTemplateSupport.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public AbstractTemplateSupport(ReactiveCouchbaseTemplate template, CouchbaseConv
5858
abstract ReactiveCouchbaseTemplate getReactiveTemplate();
5959

6060
public <T> T decodeEntityBase(String id, String source, long cas, Class<T> entityClass, String scope, String collection,
61-
TransactionResultHolder txResultHolder, ReactiveCouchbaseResourceHolder holder) {
61+
TransactionResultHolder txResultHolder, ReactiveCouchbaseResourceHolder holder) {
6262
final CouchbaseDocument converted = new CouchbaseDocument(id);
6363
converted.setId(id);
6464

@@ -127,7 +127,7 @@ CouchbasePersistentEntity couldBePersistentEntity(Class<?> entityClass) {
127127

128128

129129
public <T> T applyResultBase(T entity, CouchbaseDocument converted, Object id, long cas,
130-
TransactionResultHolder txResultHolder, ReactiveCouchbaseResourceHolder holder) {
130+
TransactionResultHolder txResultHolder, ReactiveCouchbaseResourceHolder holder) {
131131
ConvertingPropertyAccessor<Object> accessor = getPropertyAccessor(entity);
132132

133133
final CouchbasePersistentEntity<?> persistentEntity = converter.getMappingContext()

src/main/java/org/springframework/data/couchbase/core/CouchbaseOperations.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,6 @@ public interface CouchbaseOperations extends FluentCouchbaseOperations {
5555
QueryScanConsistency getConsistency();
5656
<T> T save(T entity);
5757

58-
<T> Long count(Query query, Class<T> domainType);
58+
<T> Long count(Query query, Class<T> domainType);
5959

6060
}

src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplate.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,19 @@ public class CouchbaseTemplate implements CouchbaseOperations, ApplicationContex
5959
private CouchbaseTransactionalOperator couchbaseTransactionalOperator;
6060

6161
public CouchbaseTemplate(final CouchbaseClientFactory clientFactory,
62-
final ReactiveCouchbaseClientFactory reactiveCouchbaseClientFactory, final CouchbaseConverter converter) {
62+
final ReactiveCouchbaseClientFactory reactiveCouchbaseClientFactory, final CouchbaseConverter converter) {
6363
this(clientFactory, reactiveCouchbaseClientFactory, converter, new JacksonTranslationService());
6464
}
6565

6666
public CouchbaseTemplate(final CouchbaseClientFactory clientFactory,
67-
final ReactiveCouchbaseClientFactory reactiveCouchbaseClientFactory, CouchbaseConverter converter,
68-
final TranslationService translationService) {
67+
final ReactiveCouchbaseClientFactory reactiveCouchbaseClientFactory, CouchbaseConverter converter,
68+
final TranslationService translationService) {
6969
this(clientFactory, reactiveCouchbaseClientFactory, converter, translationService, null);
7070
}
7171

7272
public CouchbaseTemplate(final CouchbaseClientFactory clientFactory,
73-
final ReactiveCouchbaseClientFactory reactiveCouchbaseClientFactory, final CouchbaseConverter converter,
74-
final TranslationService translationService, QueryScanConsistency scanConsistency) {
73+
final ReactiveCouchbaseClientFactory reactiveCouchbaseClientFactory, final CouchbaseConverter converter,
74+
final TranslationService translationService, QueryScanConsistency scanConsistency) {
7575
this.clientFactory = clientFactory;
7676
this.converter = converter;
7777
this.templateSupport = new CouchbaseTemplateSupport(this, converter, translationService);
@@ -91,8 +91,8 @@ public CouchbaseTemplate(final CouchbaseClientFactory clientFactory,
9191
public <T> T save(T entity) {
9292
if (hasNonZeroVersionProperty(entity, templateSupport.converter)) {
9393
return replaceById((Class<T>) entity.getClass()).one(entity);
94-
//} else if (getTransactionalOperator() != null) {
95-
// return insertById((Class<T>) entity.getClass()).one(entity);
94+
//} else if (getTransactionalOperator() != null) {
95+
// return insertById((Class<T>) entity.getClass()).one(entity);
9696
} else {
9797
return upsertById((Class<T>) entity.getClass()).one(entity);
9898
}

src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplateSupport.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class CouchbaseTemplateSupport extends AbstractTemplateSupport implements Applic
4646
private EntityCallbacks entityCallbacks;
4747

4848
public CouchbaseTemplateSupport(final CouchbaseTemplate template, final CouchbaseConverter converter,
49-
final TranslationService translationService) {
49+
final TranslationService translationService) {
5050
super(template.reactive(), converter, translationService);
5151
this.template = template;
5252
}
@@ -69,25 +69,25 @@ ReactiveCouchbaseTemplate getReactiveTemplate() {
6969

7070
@Override
7171
public <T> T decodeEntity(String id, String source, long cas, Class<T> entityClass, String scope, String collection,
72-
TransactionResultHolder txHolder) {
72+
TransactionResultHolder txHolder) {
7373
return decodeEntity(id, source, cas, entityClass, scope, collection, txHolder);
7474
}
7575

7676
@Override
7777
public <T> T decodeEntity(String id, String source, long cas, Class<T> entityClass, String scope, String collection,
78-
TransactionResultHolder txHolder, ReactiveCouchbaseResourceHolder holder) {
78+
TransactionResultHolder txHolder, ReactiveCouchbaseResourceHolder holder) {
7979
return decodeEntityBase(id, source, cas, entityClass, scope, collection, txHolder, holder);
8080
}
8181

8282
@Override
8383
public <T> T applyResult(T entity, CouchbaseDocument converted, Object id, long cas,
84-
TransactionResultHolder txResultHolder) {
84+
TransactionResultHolder txResultHolder) {
8585
return applyResult(entity, converted, id, cas,txResultHolder, null);
8686
}
8787

8888
@Override
8989
public <T> T applyResult(T entity, CouchbaseDocument converted, Object id, long cas,
90-
TransactionResultHolder txResultHolder, ReactiveCouchbaseResourceHolder holder) {
90+
TransactionResultHolder txResultHolder, ReactiveCouchbaseResourceHolder holder) {
9191
return applyResultBase(entity, converted, id, cas, txResultHolder, holder);
9292
}
9393

src/main/java/org/springframework/data/couchbase/core/ExecutableFindByIdOperationSupport.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ static class ExecutableFindByIdSupport<T> implements ExecutableFindById<T> {
5252
private final ReactiveFindByIdSupport<T> reactiveSupport;
5353

5454
ExecutableFindByIdSupport(CouchbaseTemplate template, Class<T> domainType, String scope, String collection,
55-
GetOptions options, List<String> fields, Duration expiry, CouchbaseTransactionalOperator txCtx) {
55+
GetOptions options, List<String> fields, Duration expiry, CouchbaseTransactionalOperator txCtx) {
5656
this.template = template;
5757
this.domainType = domainType;
5858
this.scope = scope;

src/main/java/org/springframework/data/couchbase/core/ExecutableFindByQueryOperation.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ interface FindByQueryWithOptions<T> extends TerminatingFindByQuery<T>, WithQuery
147147

148148
/**
149149
* To be removed at the next major release. use WithConsistency instead
150-
*
150+
*
151151
* @param <T> the entity type to use for the results.
152152
*/
153153
@Deprecated

0 commit comments

Comments
 (0)