DATACOUCH-415 - Improve performance by re-using the same set instance
Reuse the same instance of the set instead of recreating each time Original PR: #176
This commit is contained in:
@@ -111,6 +111,6 @@ class ConverterRegistration {
|
||||
* @return
|
||||
*/
|
||||
private static boolean isCouchbaseBasicType(Class<?> type) {
|
||||
return CouchbaseSimpleTypes.HOLDER.isSimpleType(type);
|
||||
return CouchbaseSimpleTypes.JSON_TYPES.isSimpleType(type);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,11 +17,7 @@
|
||||
package org.springframework.data.couchbase.core.mapping;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.springframework.data.mapping.model.SimpleTypeHolder;
|
||||
|
||||
/**
|
||||
* A {@link CouchbaseDocument} is an abstract representation of a document stored inside Couchbase Server.
|
||||
@@ -58,11 +54,6 @@ public class CouchbaseDocument implements CouchbaseStorable {
|
||||
*/
|
||||
private int expiration;
|
||||
|
||||
/**
|
||||
* Holds types considered simple and allowed to be stored.
|
||||
*/
|
||||
private SimpleTypeHolder simpleTypeHolder;
|
||||
|
||||
/**
|
||||
* Creates a completely empty {@link CouchbaseDocument}.
|
||||
*/
|
||||
@@ -89,11 +80,6 @@ public class CouchbaseDocument implements CouchbaseStorable {
|
||||
this.id = id;
|
||||
this.expiration = expiration;
|
||||
payload = new HashMap<String, Object>();
|
||||
|
||||
Set<Class<?>> additionalTypes = new HashSet<Class<?>>();
|
||||
additionalTypes.add(CouchbaseDocument.class);
|
||||
additionalTypes.add(CouchbaseList.class);
|
||||
simpleTypeHolder = new SimpleTypeHolder(additionalTypes, true);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -271,7 +257,7 @@ public class CouchbaseDocument implements CouchbaseStorable {
|
||||
return;
|
||||
}
|
||||
final Class<?> clazz = value.getClass();
|
||||
if (simpleTypeHolder.isSimpleType(clazz)) {
|
||||
if (CouchbaseSimpleTypes.DOCUMENT_TYPES.isSimpleType(clazz)) {
|
||||
return;
|
||||
}
|
||||
throw new IllegalArgumentException("Attribute of type " + clazz.getCanonicalName() + " cannot be stored and must be converted.");
|
||||
|
||||
@@ -74,14 +74,13 @@ public class CouchbaseList implements CouchbaseStorable {
|
||||
*/
|
||||
public CouchbaseList(final List<Object> initialPayload, final SimpleTypeHolder simpleTypeHolder) {
|
||||
this.payload = initialPayload;
|
||||
Set<Class<?>> additionalTypes = new HashSet<Class<?>>();
|
||||
additionalTypes.add(CouchbaseDocument.class);
|
||||
additionalTypes.add(CouchbaseList.class);
|
||||
if (simpleTypeHolder != null) {
|
||||
Set<Class<?>> additionalTypes = new HashSet<Class<?>>();
|
||||
additionalTypes.add(CouchbaseDocument.class);
|
||||
additionalTypes.add(CouchbaseList.class);
|
||||
this.simpleTypeHolder = new SimpleTypeHolder(additionalTypes, simpleTypeHolder);
|
||||
}
|
||||
else {
|
||||
this.simpleTypeHolder = new SimpleTypeHolder(additionalTypes, true);
|
||||
} else {
|
||||
this.simpleTypeHolder = CouchbaseSimpleTypes.DOCUMENT_TYPES;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
package org.springframework.data.couchbase.core.mapping;
|
||||
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import static java.util.stream.Collectors.toSet;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import com.couchbase.client.java.document.RawJsonDocument;
|
||||
import com.couchbase.client.java.document.json.JsonArray;
|
||||
@@ -28,18 +28,18 @@ import org.springframework.data.mapping.model.SimpleTypeHolder;
|
||||
|
||||
public abstract class CouchbaseSimpleTypes {
|
||||
|
||||
static {
|
||||
Set<Class<?>> simpleTypes = new HashSet<Class<?>>();
|
||||
simpleTypes.add(RawJsonDocument.class);
|
||||
simpleTypes.add(JsonArray.class);
|
||||
simpleTypes.add(Number.class);
|
||||
COUCHBASE_SIMPLE_TYPES = Collections.unmodifiableSet(simpleTypes);
|
||||
}
|
||||
public static final SimpleTypeHolder JSON_TYPES = new SimpleTypeHolder(
|
||||
Stream.of(RawJsonDocument.class,
|
||||
JsonArray.class,
|
||||
Number.class).collect(toSet()),
|
||||
true);
|
||||
|
||||
private static final Set<Class<?>> COUCHBASE_SIMPLE_TYPES;
|
||||
public static final SimpleTypeHolder HOLDER = new SimpleTypeHolder(COUCHBASE_SIMPLE_TYPES, true);
|
||||
public static final SimpleTypeHolder DOCUMENT_TYPES = new SimpleTypeHolder(
|
||||
Stream.of(CouchbaseDocument.class,
|
||||
CouchbaseList.class).collect(toSet()),
|
||||
true);
|
||||
|
||||
private CouchbaseSimpleTypes() {
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user