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
|
* @return
|
||||||
*/
|
*/
|
||||||
private static boolean isCouchbaseBasicType(Class<?> type) {
|
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;
|
package org.springframework.data.couchbase.core.mapping;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Map;
|
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.
|
* 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;
|
private int expiration;
|
||||||
|
|
||||||
/**
|
|
||||||
* Holds types considered simple and allowed to be stored.
|
|
||||||
*/
|
|
||||||
private SimpleTypeHolder simpleTypeHolder;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a completely empty {@link CouchbaseDocument}.
|
* Creates a completely empty {@link CouchbaseDocument}.
|
||||||
*/
|
*/
|
||||||
@@ -89,11 +80,6 @@ public class CouchbaseDocument implements CouchbaseStorable {
|
|||||||
this.id = id;
|
this.id = id;
|
||||||
this.expiration = expiration;
|
this.expiration = expiration;
|
||||||
payload = new HashMap<String, Object>();
|
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;
|
return;
|
||||||
}
|
}
|
||||||
final Class<?> clazz = value.getClass();
|
final Class<?> clazz = value.getClass();
|
||||||
if (simpleTypeHolder.isSimpleType(clazz)) {
|
if (CouchbaseSimpleTypes.DOCUMENT_TYPES.isSimpleType(clazz)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
throw new IllegalArgumentException("Attribute of type " + clazz.getCanonicalName() + " cannot be stored and must be converted.");
|
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) {
|
public CouchbaseList(final List<Object> initialPayload, final SimpleTypeHolder simpleTypeHolder) {
|
||||||
this.payload = initialPayload;
|
this.payload = initialPayload;
|
||||||
Set<Class<?>> additionalTypes = new HashSet<Class<?>>();
|
|
||||||
additionalTypes.add(CouchbaseDocument.class);
|
|
||||||
additionalTypes.add(CouchbaseList.class);
|
|
||||||
if (simpleTypeHolder != null) {
|
if (simpleTypeHolder != null) {
|
||||||
|
Set<Class<?>> additionalTypes = new HashSet<Class<?>>();
|
||||||
|
additionalTypes.add(CouchbaseDocument.class);
|
||||||
|
additionalTypes.add(CouchbaseList.class);
|
||||||
this.simpleTypeHolder = new SimpleTypeHolder(additionalTypes, simpleTypeHolder);
|
this.simpleTypeHolder = new SimpleTypeHolder(additionalTypes, simpleTypeHolder);
|
||||||
}
|
} else {
|
||||||
else {
|
this.simpleTypeHolder = CouchbaseSimpleTypes.DOCUMENT_TYPES;
|
||||||
this.simpleTypeHolder = new SimpleTypeHolder(additionalTypes, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
package org.springframework.data.couchbase.core.mapping;
|
package org.springframework.data.couchbase.core.mapping;
|
||||||
|
|
||||||
|
|
||||||
import java.util.Collections;
|
import static java.util.stream.Collectors.toSet;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import com.couchbase.client.java.document.RawJsonDocument;
|
import com.couchbase.client.java.document.RawJsonDocument;
|
||||||
import com.couchbase.client.java.document.json.JsonArray;
|
import com.couchbase.client.java.document.json.JsonArray;
|
||||||
@@ -28,18 +28,18 @@ import org.springframework.data.mapping.model.SimpleTypeHolder;
|
|||||||
|
|
||||||
public abstract class CouchbaseSimpleTypes {
|
public abstract class CouchbaseSimpleTypes {
|
||||||
|
|
||||||
static {
|
public static final SimpleTypeHolder JSON_TYPES = new SimpleTypeHolder(
|
||||||
Set<Class<?>> simpleTypes = new HashSet<Class<?>>();
|
Stream.of(RawJsonDocument.class,
|
||||||
simpleTypes.add(RawJsonDocument.class);
|
JsonArray.class,
|
||||||
simpleTypes.add(JsonArray.class);
|
Number.class).collect(toSet()),
|
||||||
simpleTypes.add(Number.class);
|
true);
|
||||||
COUCHBASE_SIMPLE_TYPES = Collections.unmodifiableSet(simpleTypes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final Set<Class<?>> COUCHBASE_SIMPLE_TYPES;
|
public static final SimpleTypeHolder DOCUMENT_TYPES = new SimpleTypeHolder(
|
||||||
public static final SimpleTypeHolder HOLDER = new SimpleTypeHolder(COUCHBASE_SIMPLE_TYPES, true);
|
Stream.of(CouchbaseDocument.class,
|
||||||
|
CouchbaseList.class).collect(toSet()),
|
||||||
|
true);
|
||||||
|
|
||||||
private CouchbaseSimpleTypes() {
|
private CouchbaseSimpleTypes() {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user