This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 1542cba72f53722798b110296de2da365357844c Author: Benoit Tellier <[email protected]> AuthorDate: Tue May 18 12:44:49 2021 +0700 [PERFORMANCE] Limit object creation upon JMAP Draft request writing Filters are dependent of client request, requiring ObjectMapper reconfiguration as object mapper configuration changes are not thread safe. However ObjectMapper javadoc states the following: ``` Method is typically used when multiple, differently configured mappers are needed. Although configuration is shared, cached serializers and deserializers are NOT shared, which means that the new instance may be re-configured before use; meaning that it behaves the same way as if an instance was constructed from scratch. ``` This sounds like our use case! This conforts to advices of this page: https://github.com/FasterXML/jackson-docs/wiki/Presentation:-Jackson-Performance ``` Reuse heavy-weight objects: ObjectMapper (data-binding) and JsonFactory (streaming API) ``` --- .../james/jmap/draft/methods/JmapResponseWriterImpl.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapResponseWriterImpl.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapResponseWriterImpl.java index a0e1dd8..d2a346b 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapResponseWriterImpl.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapResponseWriterImpl.java @@ -40,11 +40,11 @@ import reactor.core.publisher.Flux; public class JmapResponseWriterImpl implements JmapResponseWriter { public static final String PROPERTIES_FILTER = "propertiesFilter"; - private final ObjectMapperFactory objectMapperFactory; + private final ObjectMapper objectMapper; @Inject public JmapResponseWriterImpl(ObjectMapperFactory objectMapperFactory) { - this.objectMapperFactory = objectMapperFactory; + this.objectMapper = objectMapperFactory.forWriting(); } @Override @@ -60,17 +60,13 @@ public class JmapResponseWriterImpl implements JmapResponseWriter { } private ObjectMapper newConfiguredObjectMapper(JmapResponse jmapResponse) { - ObjectMapper objectMapper = objectMapperFactory.forWriting(); - FilterProvider filterProvider = jmapResponse .getFilterProvider() .orElseGet(SimpleFilterProvider::new) .setDefaultFilter(SimpleBeanPropertyFilter.serializeAll()) .addFilter(PROPERTIES_FILTER, getPropertiesFilter(jmapResponse.getProperties())); - objectMapper.setFilterProvider(filterProvider); - - return objectMapper; + return objectMapper.copy().setFilterProvider(filterProvider); } private PropertyFilter getPropertiesFilter(Optional<? extends Set<? extends Property>> properties) { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
