Skip to content

Commit 140ddef

Browse files
committed
Merge branch '4.11.x' into 4.x
2 parents 2e25a49 + 52f3550 commit 140ddef

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

changelog/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### 4.11.2 (in progress)
66

7+
- [bug] JAVA-2946: Make MapperResultProducerService instances be located with user-provided class loader
78
- [bug] JAVA-2942: GraphStatement.setConsistencyLevel() is not effective
89
- [bug] JAVA-2941: Cannot add a single static column with the alter table API
910
- [bug] JAVA-2943: Prevent session leak with wrong keyspace name

mapper-runtime/src/main/java/com/datastax/oss/driver/internal/mapper/DefaultMapperContext.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@
2424
import com.datastax.oss.driver.api.mapper.entity.naming.NameConverter;
2525
import com.datastax.oss.driver.api.mapper.result.MapperResultProducer;
2626
import com.datastax.oss.driver.api.mapper.result.MapperResultProducerService;
27+
import com.datastax.oss.driver.internal.core.context.InternalDriverContext;
2728
import com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList;
2829
import com.datastax.oss.protocol.internal.util.collection.NullAllowingImmutableMap;
2930
import edu.umd.cs.findbugs.annotations.NonNull;
3031
import edu.umd.cs.findbugs.annotations.Nullable;
3132
import java.lang.reflect.InvocationTargetException;
32-
import java.util.List;
3333
import java.util.Map;
3434
import java.util.Objects;
3535
import java.util.ServiceLoader;
@@ -38,9 +38,7 @@
3838

3939
public class DefaultMapperContext implements MapperContext {
4040

41-
private static final List<MapperResultProducer> RESULT_PRODUCERS = getResultProducers();
42-
43-
private static final ConcurrentMap<GenericType<?>, MapperResultProducer> RESULT_PRODUCER_CACHE =
41+
private final ConcurrentMap<GenericType<?>, MapperResultProducer> resultProducerCache =
4442
new ConcurrentHashMap<>();
4543

4644
private final CqlSession session;
@@ -50,6 +48,7 @@ public class DefaultMapperContext implements MapperContext {
5048
private final DriverExecutionProfile executionProfile;
5149
private final ConcurrentMap<Class<? extends NameConverter>, NameConverter> nameConverterCache;
5250
private final Map<Object, Object> customState;
51+
private final ImmutableList<MapperResultProducer> resultProducers;
5352

5453
public DefaultMapperContext(
5554
@NonNull CqlSession session,
@@ -86,6 +85,8 @@ private DefaultMapperContext(
8685
this.customState = customState;
8786
this.executionProfileName = executionProfileName;
8887
this.executionProfile = executionProfile;
88+
this.resultProducers =
89+
locateResultProducers(((InternalDriverContext) session.getContext()).getClassLoader());
8990
}
9091

9192
public DefaultMapperContext withDaoParameters(
@@ -154,10 +155,10 @@ public Map<Object, Object> getCustomState() {
154155
@NonNull
155156
@Override
156157
public MapperResultProducer getResultProducer(@NonNull GenericType<?> resultToProduce) {
157-
return RESULT_PRODUCER_CACHE.computeIfAbsent(
158+
return resultProducerCache.computeIfAbsent(
158159
resultToProduce,
159160
k -> {
160-
for (MapperResultProducer resultProducer : RESULT_PRODUCERS) {
161+
for (MapperResultProducer resultProducer : resultProducers) {
161162
if (resultProducer.canProduce(k)) {
162163
return resultProducer;
163164
}
@@ -185,10 +186,11 @@ private static NameConverter buildNameConverter(Class<? extends NameConverter> c
185186
}
186187
}
187188

188-
private static List<MapperResultProducer> getResultProducers() {
189+
private static ImmutableList<MapperResultProducer> locateResultProducers(
190+
ClassLoader classLoader) {
189191
ImmutableList.Builder<MapperResultProducer> result = ImmutableList.builder();
190192
ServiceLoader<MapperResultProducerService> loader =
191-
ServiceLoader.load(MapperResultProducerService.class);
193+
ServiceLoader.load(MapperResultProducerService.class, classLoader);
192194
loader.iterator().forEachRemaining(provider -> result.addAll(provider.getProducers()));
193195
return result.build();
194196
}

0 commit comments

Comments
 (0)