From 89e56d63423ac2b54c6b5d26ed6dc853e1affb8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Basl=C3=A9?= Date: Mon, 31 Aug 2015 19:04:01 +0200 Subject: [PATCH] DATACOUCH-159 - Improved performance of decoding of longs. Original pull requests: #67. Cherry-pick of e5bed8e, adapted with polishing from 6fec488. --- .../core/CouchbaseTemplateTests.java | 55 +++++++++++++------ .../JacksonTranslationService.java | 14 ++--- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateTests.java b/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateTests.java index 394adefa..50dc1dee 100644 --- a/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateTests.java +++ b/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateTests.java @@ -31,6 +31,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Random; import com.couchbase.client.java.Bucket; import com.couchbase.client.java.document.RawJsonDocument; @@ -59,7 +60,8 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author Michael Nitschinger - */ + * @author Simon Baslé + * @author Anastasiia Smirnova */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = IntegrationTestApplicationConfig.class) @TestExecutionListeners(CouchbaseTemplateViewListener.class) @@ -251,14 +253,25 @@ public class CouchbaseTemplateTests { assertEquals("test2", fragments.get(0).value); } + /** + * @see DATACOUCH-159 + */ @Test - public void shouldDeserialiseLongs() { - final long time = new Date().getTime(); - SimpleWithLong simpleWithLong = new SimpleWithLong("simpleWithLong:simple", time); - template.save(simpleWithLong); - simpleWithLong = template.findById("simpleWithLong:simple", SimpleWithLong.class); - assertNotNull(simpleWithLong); - assertEquals(time, simpleWithLong.getValue()); + public void shouldDeserialiseLongsAndInts() { + final long longValue = new Date().getTime(); + final int intValue = new Random().nextInt(); + + template.save(new SimpleWithLongAndInt("simpleWithLong:simple", longValue, intValue)); + SimpleWithLongAndInt document = template.findById("simpleWithLong:simple", SimpleWithLongAndInt.class); + assertNotNull(document); + assertEquals(longValue, document.getLongValue()); + assertEquals(intValue, document.getIntValue()); + + template.save(new SimpleWithLongAndInt("simpleWithLong:simple:other", intValue, intValue)); + document = template.findById("simpleWithLong:simple:other", SimpleWithLongAndInt.class); + assertNotNull(document); + assertEquals(intValue, document.getLongValue()); + assertEquals(intValue, document.getIntValue()); } @Test @@ -463,28 +476,38 @@ public class CouchbaseTemplateTests { } @Document - static class SimpleWithLong { + static class SimpleWithLongAndInt { @Id private String id; - private long value; + private long longValue; + private int intValue; - SimpleWithLong(final String id, final long value) { + SimpleWithLongAndInt(final String id, final long longValue, int intValue) { this.id = id; - this.value = value; + this.longValue = longValue; + this.intValue = intValue; } String getId() { return id; } - long getValue() { - return value; + long getLongValue() { + return longValue; } - void setValue(final long value) { - this.value = value; + void setLongValue(final long value) { + this.longValue = value; + } + + public int getIntValue() { + return intValue; + } + + public void setIntValue(int intValue) { + this.intValue = intValue; } } diff --git a/src/main/java/org/springframework/data/couchbase/core/convert/translation/JacksonTranslationService.java b/src/main/java/org/springframework/data/couchbase/core/convert/translation/JacksonTranslationService.java index 228e8f6a..187eaaf5 100644 --- a/src/main/java/org/springframework/data/couchbase/core/convert/translation/JacksonTranslationService.java +++ b/src/main/java/org/springframework/data/couchbase/core/convert/translation/JacksonTranslationService.java @@ -23,7 +23,6 @@ import java.util.Map; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.ObjectMapper; @@ -39,6 +38,8 @@ import org.springframework.data.mapping.model.SimpleTypeHolder; * A Jackson JSON Translator that implements the {@link TranslationService} contract. * * @author Michael Nitschinger + * @author Simon Baslé + * @author Anastasiia Smirnova */ public class JacksonTranslationService implements TranslationService, InitializingBean { @@ -221,18 +222,13 @@ public class JacksonTranslationService implements TranslationService, Initializi switch (token) { case VALUE_TRUE: case VALUE_FALSE: - return parser.getValueAsBoolean(); + return parser.getBooleanValue(); case VALUE_STRING: return parser.getValueAsString(); case VALUE_NUMBER_INT: - try { - return parser.getValueAsInt(); - } - catch (final JsonParseException e) { - return parser.getValueAsLong(); - } + return parser.getNumberValue(); case VALUE_NUMBER_FLOAT: - return parser.getValueAsDouble(); + return parser.getDoubleValue(); case VALUE_NULL: return null; default: