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:
Subhashni Balakrishnan
2019-02-12 16:18:26 -08:00
parent 580a50b40f
commit 2f0e255fbb
4 changed files with 20 additions and 35 deletions

View File

@@ -111,6 +111,6 @@ class ConverterRegistration {
* @return
*/
private static boolean isCouchbaseBasicType(Class<?> type) {
return CouchbaseSimpleTypes.HOLDER.isSimpleType(type);
return CouchbaseSimpleTypes.JSON_TYPES.isSimpleType(type);
}
}

View File

@@ -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.");

View File

@@ -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;
}
}

View File

@@ -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() {
}
}
}