Class SerializerCache
java.lang.Object
edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.databind.ser.SerializerCache
Simple cache object that allows for doing 2-level lookups: first level is
by "local" read-only lookup Map (used without locking)
and second backup level is by a shared modifiable HashMap.
The idea is that after a while, most serializers are found from the
local Map (to optimize performance, reduce lock contention),
but that during buildup we can use a shared map to reduce both
number of distinct read-only maps constructed, and number of
serializers constructed.
Cache contains three kinds of entries, based on combination of class pair key. First class in key is for the type to serialize, and second one is type used for determining how to resolve value type. One (but not both) of entries can be null.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
By default, allow caching of up to 4000 serializer entries (for possibly up to 1000 types; but depending access patterns may be as few as half of that). -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addAndResolveNonTypedSerializer
(JavaType type, JsonSerializer<Object> ser, SerializerProvider provider) void
addAndResolveNonTypedSerializer
(Class<?> rawType, JavaType fullType, JsonSerializer<Object> ser, SerializerProvider provider) Another alternative that will cover both access via raw type and matching fully resolved type, in one fell swoop.void
addAndResolveNonTypedSerializer
(Class<?> type, JsonSerializer<Object> ser, SerializerProvider provider) void
addTypedSerializer
(JavaType type, JsonSerializer<Object> ser) Method called if none of lookups succeeded, and caller had to construct a serializer.void
addTypedSerializer
(Class<?> cls, JsonSerializer<Object> ser) void
flush()
Method called by StdSerializerProvider#flushCachedSerializers() to clear all cached serializersMethod that can be called to get a read-only instance populated from the most recent version of the shared lookup Map.int
size()
typedValueSerializer
(JavaType type) typedValueSerializer
(Class<?> cls) untypedValueSerializer
(Class<?> type) Method that checks if the shared (and hence, synchronized) lookup Map might have untyped serializer for given type.
-
Field Details
-
DEFAULT_MAX_CACHED
public static final int DEFAULT_MAX_CACHEDBy default, allow caching of up to 4000 serializer entries (for possibly up to 1000 types; but depending access patterns may be as few as half of that).- See Also:
-
-
Constructor Details
-
SerializerCache
public SerializerCache() -
SerializerCache
public SerializerCache(int maxCached)
-
-
Method Details
-
getReadOnlyLookupMap
Method that can be called to get a read-only instance populated from the most recent version of the shared lookup Map. -
size
public int size() -
untypedValueSerializer
Method that checks if the shared (and hence, synchronized) lookup Map might have untyped serializer for given type. -
untypedValueSerializer
-
typedValueSerializer
-
typedValueSerializer
-
addTypedSerializer
Method called if none of lookups succeeded, and caller had to construct a serializer. If so, we will update the shared lookup map so that it can be resolved via it next time. -
addTypedSerializer
-
addAndResolveNonTypedSerializer
public void addAndResolveNonTypedSerializer(Class<?> type, JsonSerializer<Object> ser, SerializerProvider provider) throws JsonMappingException - Throws:
JsonMappingException
-
addAndResolveNonTypedSerializer
public void addAndResolveNonTypedSerializer(JavaType type, JsonSerializer<Object> ser, SerializerProvider provider) throws JsonMappingException - Throws:
JsonMappingException
-
addAndResolveNonTypedSerializer
public void addAndResolveNonTypedSerializer(Class<?> rawType, JavaType fullType, JsonSerializer<Object> ser, SerializerProvider provider) throws JsonMappingException Another alternative that will cover both access via raw type and matching fully resolved type, in one fell swoop.- Throws:
JsonMappingException
- Since:
- 2.7
-
flush
public void flush()Method called by StdSerializerProvider#flushCachedSerializers() to clear all cached serializers
-