This is an automated email from the ASF dual-hosted git repository.
vavrtom pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git
The following commit(s) were added to refs/heads/main by this push:
new e885aeb91f QPID-8744: [Broker-J] Jackson ObjectMapper instances
shouldn't be created on each method call (#403)
e885aeb91f is described below
commit e885aeb91f5e546ca3012a5831ad84824dd2e11f
Author: Daniil Kirilyuk <[email protected]>
AuthorDate: Tue Jun 23 09:28:22 2026 +0200
QPID-8744: [Broker-J] Jackson ObjectMapper instances shouldn't be created
on each method call (#403)
---
.../replication/ReplicatedEnvironmentFacade.java | 7 +++--
.../berkeleydb/tuple/ConfiguredObjectBinding.java | 31 +++++++++-------------
.../server/store/berkeleydb/tuple/MapBinding.java | 22 +++++++--------
.../store/berkeleydb/upgrade/UpgradeFrom7To8.java | 7 +++--
.../server/model/AbstractConfiguredObject.java | 5 ++--
.../server/model/AncestorAttributeResolver.java | 5 ++--
.../qpid/server/model/AttributeValueConverter.java | 20 ++++++--------
.../server/model/ConfiguredObjectTypeRegistry.java | 5 ++--
.../qpid/server/model/OwnAttributeResolver.java | 5 ++--
.../qpid/server/store/JsonFileConfigStore.java | 6 ++---
.../store/preferences/JsonFilePreferenceStore.java | 7 +++--
.../store/jdbc/AbstractJDBCConfigurationStore.java | 18 ++++++-------
.../store/jdbc/AbstractJDBCPreferenceStore.java | 8 +++---
.../management/amqp/ManagementInputConverter.java | 5 ++--
.../server/management/plugin/HttpManagement.java | 4 +--
.../plugin/servlet/rest/AbstractServlet.java | 5 ++--
.../plugin/servlet/rest/QueryServlet.java | 3 ++-
.../plugin/servlet/rest/RestServlet.java | 10 +++----
18 files changed, 80 insertions(+), 93 deletions(-)
diff --git
a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
index 57bb5701cd..234e41e746 100644
---
a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
+++
b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java
@@ -136,6 +136,7 @@ public class ReplicatedEnvironmentFacade implements
EnvironmentFacade, StateChan
public static final String NO_SYNC_TX_DURABILITY_PROPERTY_NAME =
"qpid.bdb.ha.noSyncTxDurablity";
private static final Logger LOGGER =
LoggerFactory.getLogger(ReplicatedEnvironmentFacade.class);
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final int DEFAULT_MASTER_TRANSFER_TIMEOUT = 1000 * 60;
private static final int DEFAULT_DB_PING_SOCKET_TIMEOUT = 1000;
@@ -1764,10 +1765,9 @@ public class ReplicatedEnvironmentFacade implements
EnvironmentFacade, StateChan
return Collections.emptySet();
}
- ObjectMapper objectMapper = new ObjectMapper();
try
{
- Map<String, Object> settings =
objectMapper.readValue(applicationState, Map.class);
+ Map<String, Object> settings =
OBJECT_MAPPER.readValue(applicationState, Map.class);
return new HashSet<>((Collection<String>)
settings.get(PERMITTED_NODE_LIST));
}
catch (Exception e)
@@ -1943,10 +1943,9 @@ public class ReplicatedEnvironmentFacade implements
EnvironmentFacade, StateChan
HashMap<String, Object> data = new HashMap<>();
data.put(PERMITTED_NODE_LIST, permittedNodeList);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ObjectMapper objectMapper = new ObjectMapper();
try
{
- objectMapper.writeValue(baos, data);
+ OBJECT_MAPPER.writeValue(baos, data);
}
catch (Exception e)
{
diff --git
a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/ConfiguredObjectBinding.java
b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/ConfiguredObjectBinding.java
index 2d33abbd9e..22e80e5c80 100644
---
a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/ConfiguredObjectBinding.java
+++
b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/ConfiguredObjectBinding.java
@@ -20,7 +20,6 @@
*/
package org.apache.qpid.server.store.berkeleydb.tuple;
-import java.io.StringWriter;
import java.util.Map;
import java.util.UUID;
@@ -29,6 +28,7 @@ import com.sleepycat.bind.tuple.TupleInput;
import com.sleepycat.bind.tuple.TupleOutput;
import tools.jackson.core.JacksonException;
+import tools.jackson.core.type.TypeReference;
import tools.jackson.databind.ObjectMapper;
import org.apache.qpid.server.model.ConfiguredObjectJacksonModule;
@@ -39,6 +39,8 @@ import
org.apache.qpid.server.store.berkeleydb.BDBConfiguredObjectRecord;
public class ConfiguredObjectBinding extends
TupleBinding<ConfiguredObjectRecord>
{
private static final ConfiguredObjectBinding INSTANCE = new
ConfiguredObjectBinding(null);
+ private static final TypeReference<Map<String,Object>> MAP_TYPE_REFERENCE
= new TypeReference<>() { };
+ private static final ObjectMapper OBJECT_MAPPER =
ConfiguredObjectJacksonModule.newObjectMapper(true);
private final UUID _uuid;
@@ -53,40 +55,33 @@ public class ConfiguredObjectBinding extends
TupleBinding<ConfiguredObjectRecord
}
@Override
- public BDBConfiguredObjectRecord entryToObject(TupleInput tupleInput)
+ public BDBConfiguredObjectRecord entryToObject(final TupleInput tupleInput)
{
- String type = tupleInput.readString();
- String json = tupleInput.readString();
- ObjectMapper mapper = new ObjectMapper();
+ final String type = tupleInput.readString();
+ final String json = tupleInput.readString();
try
{
- Map<String,Object> value = mapper.readValue(json, Map.class);
- BDBConfiguredObjectRecord configuredObject = new
BDBConfiguredObjectRecord(_uuid, type, value);
- return configuredObject;
+ final Map<String,Object> value = OBJECT_MAPPER.readValue(json,
MAP_TYPE_REFERENCE);
+ return new BDBConfiguredObjectRecord(_uuid, type, value);
}
- catch (JacksonException e)
+ catch (final JacksonException e)
{
- //should never happen
+ // should never happen
throw new StoreException(e);
}
-
}
@Override
- public void objectToEntry(ConfiguredObjectRecord object, TupleOutput
tupleOutput)
+ public void objectToEntry(final ConfiguredObjectRecord object, final
TupleOutput tupleOutput)
{
try
{
- StringWriter writer = new StringWriter();
- final ObjectMapper objectMapper =
ConfiguredObjectJacksonModule.newObjectMapper(true);
- objectMapper.writeValue(writer, object.getAttributes());
tupleOutput.writeString(object.getType());
- tupleOutput.writeString(writer.toString());
+
tupleOutput.writeString(OBJECT_MAPPER.writeValueAsString(object.getAttributes()));
}
- catch (JacksonException e)
+ catch (final JacksonException e)
{
throw new StoreException(e);
}
}
-
}
diff --git
a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MapBinding.java
b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MapBinding.java
index 547302ebeb..3af093537a 100644
---
a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MapBinding.java
+++
b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MapBinding.java
@@ -19,7 +19,6 @@
package org.apache.qpid.server.store.berkeleydb.tuple;
-import java.io.StringWriter;
import java.util.Map;
import com.sleepycat.bind.tuple.TupleBinding;
@@ -27,7 +26,10 @@ import com.sleepycat.bind.tuple.TupleInput;
import com.sleepycat.bind.tuple.TupleOutput;
import tools.jackson.core.JacksonException;
+import tools.jackson.core.type.TypeReference;
import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.ObjectReader;
+import tools.jackson.databind.ObjectWriter;
import org.apache.qpid.server.model.ConfiguredObjectJacksonModule;
import org.apache.qpid.server.store.StoreException;
@@ -35,6 +37,10 @@ import org.apache.qpid.server.store.StoreException;
public class MapBinding extends TupleBinding<Map<String, Object>>
{
private static final MapBinding INSTANCE = new MapBinding();
+ private static final ObjectMapper MAPPER =
ConfiguredObjectJacksonModule.newObjectMapper(true);
+ private static final TypeReference<Map<String, Object>> MAP_TYPE_REFERENCE
= new TypeReference<>() { };
+ private static final ObjectReader MAP_READER =
MAPPER.readerFor(MAP_TYPE_REFERENCE);
+ private static final ObjectWriter MAP_WRITER =
MAPPER.writerFor(MAP_TYPE_REFERENCE);
public static MapBinding getInstance()
{
@@ -44,14 +50,11 @@ public class MapBinding extends TupleBinding<Map<String,
Object>>
@Override
public Map<String, Object> entryToObject(final TupleInput input)
{
- String json = input.readString();
- ObjectMapper mapper =
ConfiguredObjectJacksonModule.newObjectMapper(true);
try
{
- Map<String, Object> value = mapper.readValue(json, Map.class);
- return value;
+ return MAP_READER.readValue(input.readString());
}
- catch (JacksonException e)
+ catch (final JacksonException e)
{
//should never happen
throw new StoreException(e);
@@ -63,12 +66,9 @@ public class MapBinding extends TupleBinding<Map<String,
Object>>
{
try
{
- StringWriter writer = new StringWriter();
- final ObjectMapper objectMapper =
ConfiguredObjectJacksonModule.newObjectMapper(true);
- objectMapper.writeValue(writer, map);
- output.writeString(writer.toString());
+ output.writeString(MAP_WRITER.writeValueAsString(map));
}
- catch (JacksonException e)
+ catch (final JacksonException e)
{
throw new StoreException(e);
}
diff --git
a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom7To8.java
b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom7To8.java
index 7a1c31396a..708e8f0d37 100644
---
a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom7To8.java
+++
b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom7To8.java
@@ -58,6 +58,7 @@ import tools.jackson.databind.ObjectMapper;
public class UpgradeFrom7To8 extends AbstractStoreUpgrade
{
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final TypeReference<HashMap<String, Object>>
MAP_TYPE_REFERENCE = new TypeReference<>()
{
};
@@ -117,8 +118,6 @@ public class UpgradeFrom7To8 extends AbstractStoreUpgrade
objectsCursor = configuredObjectsDb.openCursor(txn, null);
DatabaseEntry key = new DatabaseEntry();
DatabaseEntry value = new DatabaseEntry();
- ObjectMapper mapper = new ObjectMapper();
-
while (objectsCursor.getNext(key, value, LockMode.RMW) ==
OperationStatus.SUCCESS)
{
UUID id = UUIDTupleBinding.getInstance().entryToObject(key);
@@ -128,7 +127,7 @@ public class UpgradeFrom7To8 extends AbstractStoreUpgrade
Map<String,Object> attributes = null;
try
{
- attributes = mapper.readValue(json, MAP_TYPE_REFERENCE);
+ attributes = OBJECT_MAPPER.readValue(json,
MAP_TYPE_REFERENCE);
}
catch (Exception e)
{
@@ -179,7 +178,7 @@ public class UpgradeFrom7To8 extends AbstractStoreUpgrade
TupleOutput tupleOutput = new TupleOutput();
tupleOutput.writeString(type);
StringWriter writer = new StringWriter();
- mapper.writeValue(writer,attributes);
+ OBJECT_MAPPER.writeValue(writer,attributes);
tupleOutput.writeString(writer.getBuffer().toString());
TupleBinding.outputToEntry(tupleOutput, value);
objectsCursor.putCurrent(value);
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
b/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
index 36a6462f3f..8d44021498 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
@@ -95,6 +95,8 @@ public abstract class AbstractConfiguredObject<X extends
ConfiguredObject<X>> im
{
private static final Logger LOGGER =
LoggerFactory.getLogger(AbstractConfiguredObject.class);
+ private static final ObjectMapper OBJECT_MAPPER =
ConfiguredObjectJacksonModule.newObjectMapper(false);
+
public static final String SECURED_STRING_VALUE = "********";
private static final Map<Class, Object> SECURE_VALUES =
Map.of(String.class, SECURED_STRING_VALUE,
@@ -1897,10 +1899,9 @@ public abstract class AbstractConfiguredObject<X extends
ConfiguredObject<X>> im
{
if(value instanceof Collection || value instanceof Map)
{
- ObjectMapper mapper =
ConfiguredObjectJacksonModule.newObjectMapper(false);
try(StringWriter stringWriter = new StringWriter())
{
- mapper.writeValue(stringWriter, value);
+ OBJECT_MAPPER.writeValue(stringWriter, value);
value =
_encrypter.encrypt(stringWriter.toString());
}
catch (IOException e)
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/AncestorAttributeResolver.java
b/broker-core/src/main/java/org/apache/qpid/server/model/AncestorAttributeResolver.java
index 2fcf5c85b0..8b23bfa932 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/model/AncestorAttributeResolver.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/model/AncestorAttributeResolver.java
@@ -35,14 +35,13 @@ public class AncestorAttributeResolver implements
Strings.Resolver
{
public static final String PREFIX = "ancestor:";
+ private static final ObjectMapper OBJECT_MAPPER =
ConfiguredObjectJacksonModule.newObjectMapper(false);
private final ThreadLocal<Set<String>> _stack = new ThreadLocal<>();
private final ConfiguredObject<?> _object;
- private final ObjectMapper _objectMapper;
public AncestorAttributeResolver(final ConfiguredObject<?> object)
{
_object = object;
- _objectMapper = ConfiguredObjectJacksonModule.newObjectMapper(false);
}
@Override
@@ -108,7 +107,7 @@ public class AncestorAttributeResolver implements
Strings.Resolver
{
StringWriter writer = new StringWriter();
- _objectMapper.writeValue(writer, returnVal);
+ OBJECT_MAPPER.writeValue(writer, returnVal);
returnString = writer.toString();
}
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java
b/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java
index 34254dee7c..b702ea0b2c 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java
@@ -70,6 +70,8 @@ import org.apache.qpid.server.util.Strings;
abstract class AttributeValueConverter<T>
{
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+
static final AttributeValueConverter<String> STRING_CONVERTER = new
AttributeValueConverter<>()
{
@Override
@@ -615,10 +617,9 @@ abstract class AttributeValueConverter<T>
private static <T> T convertFromJson(final String value, final
ConfiguredObject object, final Class<T> valueType)
{
String interpolated = AbstractConfiguredObject.interpolate(object,
value);
- ObjectMapper objectMapper = new ObjectMapper();
try
{
- return objectMapper.readValue(interpolated, valueType);
+ return OBJECT_MAPPER.readValue(interpolated, valueType);
}
catch (JacksonException e)
{
@@ -869,10 +870,9 @@ abstract class AttributeValueConverter<T>
if(value instanceof String)
{
String interpolated =
AbstractConfiguredObject.interpolate(object, (String) value);
- ObjectMapper objectMapper = new ObjectMapper();
try
{
- return convert(objectMapper.readValue(interpolated,
List.class), object);
+ return convert(OBJECT_MAPPER.readValue(interpolated,
List.class), object);
}
catch (JacksonException e)
{
@@ -920,10 +920,9 @@ abstract class AttributeValueConverter<T>
if(value instanceof String)
{
String interpolated =
AbstractConfiguredObject.interpolate(object, (String) value);
- ObjectMapper objectMapper = new ObjectMapper();
try
{
- return convert(objectMapper.readValue(interpolated,
Set.class), object);
+ return convert(OBJECT_MAPPER.readValue(interpolated,
Set.class), object);
}
catch (JacksonException e)
{
@@ -972,10 +971,9 @@ abstract class AttributeValueConverter<T>
if(value instanceof String)
{
String interpolated =
AbstractConfiguredObject.interpolate(object, (String) value);
- ObjectMapper objectMapper = new ObjectMapper();
try
{
- return convert(objectMapper.readValue(interpolated,
List.class), object);
+ return convert(OBJECT_MAPPER.readValue(interpolated,
List.class), object);
}
catch (JacksonException e)
{
@@ -1025,10 +1023,9 @@ abstract class AttributeValueConverter<T>
if(value instanceof String)
{
String interpolated =
AbstractConfiguredObject.interpolate(object, (String) value);
- ObjectMapper objectMapper = new ObjectMapper();
try
{
- return convert(objectMapper.readValue(interpolated,
Map.class), object);
+ return convert(OBJECT_MAPPER.readValue(interpolated,
Map.class), object);
}
catch (JacksonException e)
{
@@ -1413,10 +1410,9 @@ abstract class AttributeValueConverter<T>
{
return null;
}
- ObjectMapper objectMapper = new ObjectMapper();
try
{
- return convert(objectMapper.readValue(interpolated,
Map.class), object);
+ return convert(OBJECT_MAPPER.readValue(interpolated,
Map.class), object);
}
catch (JacksonException e)
{
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java
b/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java
index c086cc86ec..ab215b37a6 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectTypeRegistry.java
@@ -52,6 +52,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import tools.jackson.core.JacksonException;
+import tools.jackson.databind.ObjectMapper;
import org.apache.qpid.server.plugin.ConfiguredObjectAttributeInjector;
import org.apache.qpid.server.plugin.ConfiguredObjectRegistration;
@@ -63,7 +64,7 @@ import org.apache.qpid.server.util.Strings;
public class ConfiguredObjectTypeRegistry
{
private static final Logger LOGGER =
LoggerFactory.getLogger(ConfiguredObjectTypeRegistry.class);
-
+ private static final ObjectMapper OBJECT_MAPPER =
ConfiguredObjectJacksonModule.newObjectMapper(false);
private static final Map<String, Integer> STANDARD_FIRST_FIELDS_ORDER =
new HashMap<>();
private static final ConcurrentMap<Class<?>, Class<? extends
ConfiguredObject>> CATEGORY_CACHE =
@@ -1007,7 +1008,7 @@ public class ConfiguredObjectTypeRegistry
{
try
{
- stringValue =
ConfiguredObjectJacksonModule.newObjectMapper(false).writeValueAsString(value);
+ stringValue =
OBJECT_MAPPER.writeValueAsString(value);
}
catch (JacksonException e)
{
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/model/OwnAttributeResolver.java
b/broker-core/src/main/java/org/apache/qpid/server/model/OwnAttributeResolver.java
index df3e111038..c244fef6e9 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/model/OwnAttributeResolver.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/model/OwnAttributeResolver.java
@@ -35,14 +35,13 @@ public class OwnAttributeResolver implements
Strings.Resolver
{
public static final String PREFIX = "this:";
+ private static final ObjectMapper OBJECT_MAPPER =
ConfiguredObjectJacksonModule.newObjectMapper(false);
private final ThreadLocal<Set<String>> _stack = new ThreadLocal<>();
private final ConfiguredObject<?> _object;
- private final ObjectMapper _objectMapper;
public OwnAttributeResolver(final ConfiguredObject<?> object)
{
_object = object;
- _objectMapper = ConfiguredObjectJacksonModule.newObjectMapper(false);
}
@Override
@@ -83,7 +82,7 @@ public class OwnAttributeResolver implements Strings.Resolver
{
StringWriter writer = new StringWriter();
- _objectMapper.writeValue(writer, returnVal);
+ OBJECT_MAPPER.writeValue(writer, returnVal);
returnString = writer.toString();
}
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
b/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
index 76409a90f1..d66584e4d7 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
@@ -56,6 +56,8 @@ public class JsonFileConfigStore extends
AbstractJsonFileStore implements Durabl
{
private static final Logger LOGGER =
LoggerFactory.getLogger(JsonFileConfigStore.class);
+ private static final ObjectMapper OBJECT_MAPPER =
ConfiguredObjectJacksonModule.newObjectMapper(true,
SerializationFeature.INDENT_OUTPUT);
+
private static final Comparator<Class<? extends ConfiguredObject>>
CATEGORY_CLASS_COMPARATOR =
Comparator.comparing(Class::getSimpleName);
private static final Comparator<ConfiguredObjectRecord>
CONFIGURED_OBJECT_RECORD_COMPARATOR = (left, right) ->
@@ -68,7 +70,6 @@ public class JsonFileConfigStore extends
AbstractJsonFileStore implements Durabl
private final Map<UUID, ConfiguredObjectRecord> _objectsById = new
HashMap<>();
private final Map<String, List<UUID>> _idsByType = new HashMap<>();
private volatile Class<? extends ConfiguredObject> _rootClass;
- private final ObjectMapper _objectMapper;
private volatile Map<String,Class<? extends ConfiguredObject>>
_classNameMapping;
private ConfiguredObject<?> _parent;
@@ -80,7 +81,6 @@ public class JsonFileConfigStore extends
AbstractJsonFileStore implements Durabl
public JsonFileConfigStore(Class<? extends ConfiguredObject> rootClass)
{
super();
- _objectMapper = ConfiguredObjectJacksonModule.newObjectMapper(true,
SerializationFeature.INDENT_OUTPUT);
_rootClass = rootClass;
}
@@ -518,7 +518,7 @@ public class JsonFileConfigStore extends
AbstractJsonFileStore implements Durabl
@Override
protected ObjectMapper getSerialisationObjectMapper()
{
- return _objectMapper;
+ return OBJECT_MAPPER;
}
private void assertState(State state)
diff --git
a/broker-core/src/main/java/org/apache/qpid/server/store/preferences/JsonFilePreferenceStore.java
b/broker-core/src/main/java/org/apache/qpid/server/store/preferences/JsonFilePreferenceStore.java
index a6a2774e06..7fc432362d 100644
---
a/broker-core/src/main/java/org/apache/qpid/server/store/preferences/JsonFilePreferenceStore.java
+++
b/broker-core/src/main/java/org/apache/qpid/server/store/preferences/JsonFilePreferenceStore.java
@@ -39,9 +39,9 @@ import org.apache.qpid.server.store.StoreException;
public class JsonFilePreferenceStore extends AbstractJsonFileStore implements
PreferenceStore
{
private static final String DEFAULT_FILE_NAME = "userPreferences";
+ private static final ObjectMapper OBJECT_MAPPER =
ConfiguredObjectJacksonModule.newObjectMapper(true,
SerializationFeature.INDENT_OUTPUT);
private final String _storePath;
private final String _posixFilePermissions;
- private final ObjectMapper _objectMapper;
private final Map<UUID, StoredPreferenceRecord> _recordMap;
private StoreState _storeState = StoreState.CLOSED;
@@ -50,7 +50,6 @@ public class JsonFilePreferenceStore extends
AbstractJsonFileStore implements Pr
super();
_storePath = path;
_posixFilePermissions = posixFilePermissions;
- _objectMapper = ConfiguredObjectJacksonModule.newObjectMapper(true,
SerializationFeature.INDENT_OUTPUT);
_recordMap = new LinkedHashMap<>();
}
@@ -72,7 +71,7 @@ public class JsonFilePreferenceStore extends
AbstractJsonFileStore implements Pr
StoreContent storeContent;
try
{
- storeContent = _objectMapper.readValue(getConfigFile(),
StoreContent.class);
+ storeContent = OBJECT_MAPPER.readValue(getConfigFile(),
StoreContent.class);
}
catch (JacksonException e)
{
@@ -172,7 +171,7 @@ public class JsonFilePreferenceStore extends
AbstractJsonFileStore implements Pr
@Override
protected ObjectMapper getSerialisationObjectMapper()
{
- return _objectMapper;
+ return OBJECT_MAPPER;
}
private void updateOrCreateInternal(final Collection<PreferenceRecord>
preferenceRecords)
diff --git
a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java
b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java
index bb32d47884..84dfefc641 100644
---
a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java
+++
b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java
@@ -60,6 +60,8 @@ import org.apache.qpid.server.util.Action;
public abstract class AbstractJDBCConfigurationStore implements
MessageStoreProvider, DurableConfigurationStore
{
+ private static final ObjectMapper READ_OBJECT_MAPPER =
ConfiguredObjectJacksonModule.newObjectMapper(true);
+ private static final ObjectMapper WRITE_OBJECT_MAPPER =
ConfiguredObjectJacksonModule.newObjectMapper(true);
private final static String CONFIGURATION_VERSION_TABLE_NAME_SUFFIX =
"QPID_CONFIG_VERSION";
private final static String VERSION_1_CONFIGURED_OBJECTS_TABLE_NAME_SUFFIX
= "QPID_CONFIGURED_OBJECTS";
private final static String
VERSION_1_CONFIGURED_OBJECT_HIERARCHY_TABLE_NAME_SUFFIX =
"QPID_CONFIGURED_OBJECT_HIERARCHY";
@@ -178,7 +180,6 @@ public abstract class AbstractJDBCConfigurationStore
implements MessageStoreProv
private Collection<ConfiguredObjectRecordImpl>
doVisitAllConfiguredObjectRecords(ConfiguredObjectRecordHandler handler) throws
SQLException
{
Map<UUID, ConfiguredObjectRecordImpl> configuredObjects = new
HashMap<>();
- final ObjectMapper objectMapper = new ObjectMapper();
try (Connection conn = newAutoCommitConnection())
{
PreparedStatement stmt = conn.prepareStatement("SELECT id,
object_type, attributes FROM " + getConfiguredObjectsTableName());
@@ -194,7 +195,7 @@ public abstract class AbstractJDBCConfigurationStore
implements MessageStoreProv
String attributes = getBlobAsString(rs, 3);
final ConfiguredObjectRecordImpl
configuredObjectRecord =
new
ConfiguredObjectRecordImpl(UUID.fromString(id), objectType,
-
objectMapper.readValue(attributes, Map.class));
+
READ_OBJECT_MAPPER.readValue(attributes, Map.class));
configuredObjects.put(configuredObjectRecord.getId(),
configuredObjectRecord);
}
@@ -451,7 +452,6 @@ public abstract class AbstractJDBCConfigurationStore
implements MessageStoreProv
Map<UUID,Map<String,Object>> bindingsToUpdate = new HashMap<>();
List<UUID> others = new ArrayList<>();
- final ObjectMapper objectMapper =
ConfiguredObjectJacksonModule.newObjectMapper(true);
PreparedStatement stmt = connection.prepareStatement("SELECT id,
object_type, attributes FROM " + getConfiguredObjectsTableName());
try
@@ -466,7 +466,7 @@ public abstract class AbstractJDBCConfigurationStore
implements MessageStoreProv
{
continue;
}
- Map<String, Object> attributes =
objectMapper.readValue(getBlobAsString(rs, 3), Map.class);
+ Map<String, Object> attributes =
READ_OBJECT_MAPPER.readValue(getBlobAsString(rs, 3), Map.class);
if (objectType.endsWith("Binding"))
{
@@ -540,7 +540,7 @@ public abstract class AbstractJDBCConfigurationStore
implements MessageStoreProv
for(Map.Entry<UUID, Map<String,Object>> bindingEntry :
bindingsToUpdate.entrySet())
{
stmt.setString(1, "Binding");
- byte[] attributesAsBytes =
objectMapper.writeValueAsBytes(bindingEntry.getValue());
+ byte[] attributesAsBytes =
WRITE_OBJECT_MAPPER.writeValueAsBytes(bindingEntry.getValue());
ByteArrayInputStream bis = new
ByteArrayInputStream(attributesAsBytes);
stmt.setBinaryStream(2, bis, attributesAsBytes.length);
@@ -816,8 +816,7 @@ public abstract class AbstractJDBCConfigurationStore
implements MessageStoreProv
else
{
final Map<String, Object> attributes =
configuredObject.getAttributes();
- final ObjectMapper objectMapper =
ConfiguredObjectJacksonModule.newObjectMapper(true);
- byte[] attributesAsBytes =
objectMapper.writeValueAsBytes(attributes);
+ byte[] attributesAsBytes =
WRITE_OBJECT_MAPPER.writeValueAsBytes(attributes);
ByteArrayInputStream bis = new
ByteArrayInputStream(attributesAsBytes);
insertStmt.setBinaryStream(3, bis,
attributesAsBytes.length);
@@ -936,7 +935,6 @@ public abstract class AbstractJDBCConfigurationStore
implements MessageStoreProv
try (ResultSet rs = stmt.executeQuery())
{
- final ObjectMapper objectMapper =
ConfiguredObjectJacksonModule.newObjectMapper(true);
if (rs.next())
{
try (PreparedStatement stmt2 =
conn.prepareStatement("UPDATE " + getConfiguredObjectsTableName()
@@ -945,7 +943,7 @@ public abstract class AbstractJDBCConfigurationStore
implements MessageStoreProv
stmt2.setString(1, configuredObject.getType());
if (configuredObject.getAttributes() != null)
{
- byte[] attributesAsBytes =
objectMapper.writeValueAsBytes(
+ byte[] attributesAsBytes =
WRITE_OBJECT_MAPPER.writeValueAsBytes(
configuredObject.getAttributes());
ByteArrayInputStream bis = new
ByteArrayInputStream(attributesAsBytes);
stmt2.setBinaryStream(2, bis,
attributesAsBytes.length);
@@ -972,7 +970,7 @@ public abstract class AbstractJDBCConfigurationStore
implements MessageStoreProv
else
{
final Map<String, Object> attributes =
configuredObject.getAttributes();
- byte[] attributesAsBytes =
objectMapper.writeValueAsBytes(attributes);
+ byte[] attributesAsBytes =
WRITE_OBJECT_MAPPER.writeValueAsBytes(attributes);
ByteArrayInputStream bis = new
ByteArrayInputStream(attributesAsBytes);
insertStmt.setBinaryStream(3, bis,
attributesAsBytes.length);
}
diff --git
a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCPreferenceStore.java
b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCPreferenceStore.java
index 94a57d8726..fad4864e3e 100644
---
a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCPreferenceStore.java
+++
b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCPreferenceStore.java
@@ -53,6 +53,8 @@ import org.apache.qpid.server.util.BaseAction;
public abstract class AbstractJDBCPreferenceStore implements PreferenceStore
{
+ private static final ObjectMapper READ_OBJECT_MAPPER = new ObjectMapper();
+ private static final ObjectMapper WRITE_OBJECT_MAPPER =
ConfiguredObjectJacksonModule.newObjectMapper(true);
private static final String PREFERENCES_VERSION_TABLE_NAME =
"PREFERENCES_VERSION";
private static final String PREFERENCES_TABLE_NAME = "PREFERENCES";
@@ -368,10 +370,9 @@ public abstract class AbstractJDBCPreferenceStore
implements PreferenceStore
final Map<String, Object> attributes)
throws JacksonException, SQLException
{
- final ObjectMapper objectMapper =
ConfiguredObjectJacksonModule.newObjectMapper(true);
if (attributes != null)
{
- byte[] attributesAsBytes =
objectMapper.writeValueAsBytes(attributes);
+ byte[] attributesAsBytes =
WRITE_OBJECT_MAPPER.writeValueAsBytes(attributes);
ByteArrayInputStream bis = new
ByteArrayInputStream(attributesAsBytes);
preparedSqlStatement.setBinaryStream(parameterIndex, bis,
attributesAsBytes.length);
}
@@ -455,7 +456,6 @@ public abstract class AbstractJDBCPreferenceStore
implements PreferenceStore
private Collection<PreferenceRecord> getPreferenceRecords(final Connection
connection) throws SQLException
{
Collection<PreferenceRecord> records = new LinkedHashSet<>();
- final ObjectMapper objectMapper = new ObjectMapper();
try (PreparedStatement stmt =
connection.prepareStatement(String.format(SELECT_FROM_PREFERENCES,
getPreferencesTableName())))
{
@@ -465,7 +465,7 @@ public abstract class AbstractJDBCPreferenceStore
implements PreferenceStore
{
String id = rs.getString(1);
String attributes = getBlobAsString(rs, 2);
- final PreferenceRecord preferenceRecord = new
PreferenceRecordImpl(UUID.fromString(id), objectMapper.readValue(attributes,
Map.class));
+ final PreferenceRecord preferenceRecord = new
PreferenceRecordImpl(UUID.fromString(id),
READ_OBJECT_MAPPER.readValue(attributes, Map.class));
records.add(preferenceRecord);
}
}
diff --git
a/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementInputConverter.java
b/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementInputConverter.java
index fb28e674be..64f0b63797 100644
---
a/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementInputConverter.java
+++
b/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementInputConverter.java
@@ -28,6 +28,8 @@ import tools.jackson.databind.ObjectMapper;
class ManagementInputConverter
{
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+
private final ManagementNode _managementNode;
ManagementInputConverter(final ManagementNode managementNode)
@@ -70,10 +72,9 @@ class ManagementInputConverter
}
else if(Collection.class.isAssignableFrom(clazz) ||
Map.class.isAssignableFrom(clazz))
{
- ObjectMapper objectMapper = new ObjectMapper();
try
{
- return objectMapper.readValue(input.toString(), clazz);
+ return OBJECT_MAPPER.readValue(input.toString(),
clazz);
}
catch (JacksonException e)
{
diff --git
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
index c1580e4729..6b5205470c 100644
---
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
+++
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
@@ -139,6 +139,7 @@ import
org.apache.qpid.server.util.ServerScopedRuntimeException;
public class HttpManagement extends AbstractPluginAdapter<HttpManagement>
implements HttpManagementConfiguration<HttpManagement>, PortManager
{
private static final Logger LOGGER =
LoggerFactory.getLogger(HttpManagement.class);
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
// 1 minute by default
public static final int DEFAULT_TIMEOUT_IN_SECONDS = 60;
@@ -930,12 +931,11 @@ public class HttpManagement extends
AbstractPluginAdapter<HttpManagement> implem
}
final Set<String> combinationsAsString = new
HashSet<>(combinations.size());
- ObjectMapper mapper = new ObjectMapper();
for (Set<String> combination : combinations)
{
try
{
-
combinationsAsString.add(mapper.writeValueAsString(combination));
+
combinationsAsString.add(OBJECT_MAPPER.writeValueAsString(combination));
}
catch (JacksonException e)
{
diff --git
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
index 4df5757031..ddf3de018b 100644
---
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
+++
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
@@ -79,6 +79,8 @@ public abstract class AbstractServlet extends HttpServlet
protected static final String GENERIC_ERROR_MESSAGE = "There was an error
when performing request, " +
"see log file for details";
+ protected static final ObjectMapper RESPONSE_OBJECT_MAPPER =
ConfiguredObjectJacksonModule
+ .newObjectMapper(false, SerializationFeature.INDENT_OUTPUT);
/**
* Allowed response headers
*/
@@ -280,8 +282,7 @@ public abstract class AbstractServlet extends HttpServlet
private void writeObjectToResponse(Object object, HttpServletRequest
request, HttpServletResponse response) throws IOException
{
OutputStream stream = getOutputStream(request, response);
- ObjectMapper mapper =
ConfiguredObjectJacksonModule.newObjectMapper(false,
SerializationFeature.INDENT_OUTPUT);
- mapper.writeValue(stream, object);
+ RESPONSE_OBJECT_MAPPER.writeValue(stream, object);
}
protected void sendCachingHeadersOnResponse(HttpServletResponse response)
diff --git
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueryServlet.java
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueryServlet.java
index 53aaf86e19..71039b3670 100644
---
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueryServlet.java
+++
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueryServlet.java
@@ -56,6 +56,7 @@ import org.apache.qpid.server.query.engine.model.QueryRequest;
public abstract class QueryServlet<X extends ConfiguredObject<?>> extends
AbstractServlet
{
private static final Logger LOGGER =
LoggerFactory.getLogger(QueryServlet.class);
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private static final CSVFormat CSV_FORMAT = new CSVFormat();
@@ -110,7 +111,7 @@ public abstract class QueryServlet<X extends
ConfiguredObject<?>> extends Abstra
}
else
{
- final QueryRequest queryRequest = new
ObjectMapper().readValue(content, QueryRequest.class);
+ final QueryRequest queryRequest =
OBJECT_MAPPER.readValue(content, QueryRequest.class);
final QuerySettings querySettings =
queryRequest.toQuerySettings();
final QueryEvaluator queryEvaluator =
_queryEngine.createEvaluator();
final EvaluationResult<List<Map<String, Object>>> result =
queryEvaluator.execute(queryRequest.getSql(), querySettings);
diff --git
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
index 3502bfbecd..8f5beb5f75 100644
---
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
+++
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
@@ -64,6 +64,7 @@ public class RestServlet extends AbstractServlet
private static final long serialVersionUID = 1L;
private static final String APPLICATION_JSON = "application/json";
private static final Logger LOGGER =
LoggerFactory.getLogger(RestServlet.class);
+ private static final ObjectMapper REQUEST_OBJECT_MAPPER = new
ObjectMapper();
private transient ManagementController _managementController;
@@ -293,9 +294,7 @@ public class RestServlet extends AbstractServlet
response,
getManagementConfiguration()))
{
- ObjectMapper mapper = ConfiguredObjectJacksonModule
- .newObjectMapper(false,
SerializationFeature.INDENT_OUTPUT);
- mapper.writeValue(stream, formattedResponse);
+ RESPONSE_OBJECT_MAPPER.writeValue(stream, formattedResponse);
}
}
@@ -425,7 +424,6 @@ public class RestServlet extends AbstractServlet
private <T> T parse(Class<T> type) throws IOException, ServletException
{
T providedObject;
- final ObjectMapper mapper = new ObjectMapper();
if (_headers.containsKey("Content-Type") &&
_request.getHeader("Content-Type")
.startsWith("multipart/form-data"))
@@ -437,7 +435,7 @@ public class RestServlet extends AbstractServlet
{
if ("data".equals(part.getName()) &&
"application/json".equals(part.getContentType()))
{
- items = mapper.readValue(part.getInputStream(),
LinkedHashMap.class);
+ items =
REQUEST_OBJECT_MAPPER.readValue(part.getInputStream(), LinkedHashMap.class);
}
else
{
@@ -455,7 +453,7 @@ public class RestServlet extends AbstractServlet
}
else
{
- providedObject = mapper.readValue(_request.getInputStream(),
type);
+ providedObject =
REQUEST_OBJECT_MAPPER.readValue(_request.getInputStream(), type);
}
return providedObject;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]