Browse Source

DATAMONGO-2241 - Retain MongoConverter using MongoTemplate.withSession(…).

We now reuse the MongoConverter instance that is associated with a MongoTemplate when using withSession(…) instead of creating a new converter instance.
In consequence, we're reusing PersistentEntity instances, EntityInstantiators and generated accessor classes.

Original Pull Request: #734
pull/792/head
Mark Paluch 7 years ago committed by Christoph Strobl
parent
commit
13db06d345
  1. 4
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
  2. 16
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ClientSessionTests.java

4
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java

@ -33,6 +33,7 @@ import org.bson.codecs.Codec;
import org.bson.conversions.Bson; import org.bson.conversions.Bson;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationContextAware;
@ -259,8 +260,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware,
this.mongoDbFactory = dbFactory; this.mongoDbFactory = dbFactory;
this.exceptionTranslator = that.exceptionTranslator; this.exceptionTranslator = that.exceptionTranslator;
this.sessionSynchronization = that.sessionSynchronization; this.sessionSynchronization = that.sessionSynchronization;
this.mongoConverter = that.mongoConverter instanceof MappingMongoConverter ? getDefaultMongoConverter(dbFactory) this.mongoConverter = that.mongoConverter;
: that.mongoConverter;
this.queryMapper = that.queryMapper; this.queryMapper = that.queryMapper;
this.updateMapper = that.updateMapper; this.updateMapper = that.updateMapper;
this.schemaMapper = that.schemaMapper; this.schemaMapper = that.schemaMapper;

16
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ClientSessionTests.java

@ -19,7 +19,6 @@ import static org.assertj.core.api.Assertions.*;
import static org.springframework.data.mongodb.core.query.Criteria.*; import static org.springframework.data.mongodb.core.query.Criteria.*;
import static org.springframework.data.mongodb.core.query.Query.*; import static org.springframework.data.mongodb.core.query.Query.*;
import com.mongodb.MongoClient;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@ -30,7 +29,9 @@ import org.junit.ClassRule;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.TestRule; import org.junit.rules.TestRule;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.test.util.MongoTestUtils; import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersion; import org.springframework.data.mongodb.test.util.MongoVersion;
@ -39,6 +40,7 @@ import org.springframework.data.mongodb.test.util.ReplicaSet;
import org.springframework.data.util.Version; import org.springframework.data.util.Version;
import com.mongodb.ClientSessionOptions; import com.mongodb.ClientSessionOptions;
import com.mongodb.MongoClient;
import com.mongodb.client.ClientSession; import com.mongodb.client.ClientSession;
/** /**
@ -89,6 +91,18 @@ public class ClientSessionTests {
session.close(); session.close();
} }
@Test // DATAMONGO-2241
public void shouldReuseConfiguredConverter() {
ClientSession session = client.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
MongoConverter converter = template.getConverter();
MongoConverter sessionTemplateConverter = template.withSession(() -> session)
.execute(MongoOperations::getConverter);
assertThat(sessionTemplateConverter).isSameAs(converter);
}
@Test // DATAMONGO-1920 @Test // DATAMONGO-1920
@MongoVersion(asOf = "3.7.3") @MongoVersion(asOf = "3.7.3")
public void withCommittedTransaction() { public void withCommittedTransaction() {

Loading…
Cancel
Save