From a97908e30b38f1bca9eb62163ed7008dbaedcdd9 Mon Sep 17 00:00:00 2001 From: Michael Nitschinger Date: Mon, 8 Apr 2013 15:43:16 +0200 Subject: [PATCH] wrapping client.* calls into execute methods. --- .../{DbCallback.java => BucketCallback.java} | 2 +- .../core/CouchbaseExceptionTranslator.java | 10 ++- .../spring/core/CouchbaseOperations.java | 4 +- .../spring/core/CouchbaseTemplate.java | 88 +++++++++++++------ 4 files changed, 72 insertions(+), 32 deletions(-) rename src/main/java/com/couchbase/spring/core/{DbCallback.java => BucketCallback.java} (60%) diff --git a/src/main/java/com/couchbase/spring/core/DbCallback.java b/src/main/java/com/couchbase/spring/core/BucketCallback.java similarity index 60% rename from src/main/java/com/couchbase/spring/core/DbCallback.java rename to src/main/java/com/couchbase/spring/core/BucketCallback.java index bb98a492..f00b6d34 100644 --- a/src/main/java/com/couchbase/spring/core/DbCallback.java +++ b/src/main/java/com/couchbase/spring/core/BucketCallback.java @@ -1,6 +1,6 @@ package com.couchbase.spring.core; -public interface DbCallback { +public interface BucketCallback { T doInBucket(); } diff --git a/src/main/java/com/couchbase/spring/core/CouchbaseExceptionTranslator.java b/src/main/java/com/couchbase/spring/core/CouchbaseExceptionTranslator.java index 19087640..5f041beb 100644 --- a/src/main/java/com/couchbase/spring/core/CouchbaseExceptionTranslator.java +++ b/src/main/java/com/couchbase/spring/core/CouchbaseExceptionTranslator.java @@ -32,6 +32,8 @@ import com.couchbase.client.ObservedModifiedException; import com.couchbase.client.ObservedTimeoutException; import com.couchbase.client.vbucket.ConnectionException; +import java.io.IOException; + /** * Simple {@link PersistenceExceptionTranslator} for Couchbase. * @@ -51,12 +53,12 @@ public class CouchbaseExceptionTranslator implements PersistenceExceptionTransla @Override public final DataAccessException translateExceptionIfPossible(RuntimeException ex) { if (ex instanceof ConnectionException) { - return new DataAccessResourceFailureException(ex.getMessage(), ex); + return new DataAccessResourceFailureException(ex.getMessage(), ex); } - if (ex instanceof ObservedException || - ex instanceof ObservedTimeoutException || - ex instanceof ObservedModifiedException) { + if (ex instanceof ObservedException + || ex instanceof ObservedTimeoutException + || ex instanceof ObservedModifiedException) { return new DataIntegrityViolationException(ex.getMessage(), ex); } diff --git a/src/main/java/com/couchbase/spring/core/CouchbaseOperations.java b/src/main/java/com/couchbase/spring/core/CouchbaseOperations.java index 62ee81c5..182f3993 100644 --- a/src/main/java/com/couchbase/spring/core/CouchbaseOperations.java +++ b/src/main/java/com/couchbase/spring/core/CouchbaseOperations.java @@ -129,7 +129,7 @@ public interface CouchbaseOperations { void remove(Collection batchToRemove); /** - * Executes a DbCallback translating any exceptions as necessary. + * Executes a BucketCallback translating any exceptions as necessary. * * Allows for returning a result object, that is a domain object or a * collection of domain objects. @@ -138,5 +138,5 @@ public interface CouchbaseOperations { * @param the return type. * @return */ - T execute(DbCallback action); + T execute(BucketCallback action); } diff --git a/src/main/java/com/couchbase/spring/core/CouchbaseTemplate.java b/src/main/java/com/couchbase/spring/core/CouchbaseTemplate.java index 073e8fc5..798d2a6d 100644 --- a/src/main/java/com/couchbase/spring/core/CouchbaseTemplate.java +++ b/src/main/java/com/couchbase/spring/core/CouchbaseTemplate.java @@ -29,6 +29,7 @@ import java.util.Iterator; import java.util.List; import java.util.Set; +import net.spy.memcached.internal.OperationFuture; import org.springframework.data.mapping.context.MappingContext; import com.couchbase.client.CouchbaseClient; @@ -56,70 +57,101 @@ public class CouchbaseTemplate implements CouchbaseOperations { ITERABLE_CLASSES = Collections.unmodifiableCollection(iterableClasses); } - public CouchbaseTemplate(CouchbaseClient client) { + public CouchbaseTemplate(final CouchbaseClient client) { this(client, null); } - public CouchbaseTemplate(CouchbaseClient client, CouchbaseConverter converter) { + public CouchbaseTemplate(final CouchbaseClient client, + final CouchbaseConverter converter) { this.client = client; this.couchbaseConverter = converter == null ? getDefaultConverter(client) : converter; this.mappingContext = this.couchbaseConverter.getMappingContext(); } - private CouchbaseConverter getDefaultConverter(CouchbaseClient client) { + private CouchbaseConverter getDefaultConverter(final CouchbaseClient client) { MappingCouchbaseConverter converter = new MappingCouchbaseConverter( new CouchbaseMappingContext()); converter.afterPropertiesSet(); return converter; } - public void insert(Object objectToSave) { + public final void insert(final Object objectToSave) { ensureNotIterable(objectToSave); - ConvertedCouchbaseDocument converted = new ConvertedCouchbaseDocument(); + final ConvertedCouchbaseDocument converted = + new ConvertedCouchbaseDocument(); couchbaseConverter.write(objectToSave, converted); - client.add(converted.getId(), converted.getExpiry(), converted.getRawValue()); + execute(new BucketCallback>() { + @Override + public OperationFuture doInBucket() { + return client.add( + converted.getId(), converted.getExpiry(), converted.getRawValue()); + } + }); } - public void insert(Collection batchToSave) { + public final void insert(final Collection batchToSave) { Iterator iter = batchToSave.iterator(); while(iter.hasNext()) { insert(iter.next()); } } - public void save(Object objectToSave) { + public void save(final Object objectToSave) { ensureNotIterable(objectToSave); - ConvertedCouchbaseDocument converted = new ConvertedCouchbaseDocument(); + final ConvertedCouchbaseDocument converted = + new ConvertedCouchbaseDocument(); couchbaseConverter.write(objectToSave, converted); - client.set(converted.getId(), converted.getExpiry(), converted.getRawValue()); + + execute(new BucketCallback>() { + @Override + public OperationFuture doInBucket() { + return client.set( + converted.getId(), converted.getExpiry(), converted.getRawValue()); + } + }); } - public void save(Collection batchToSave) { + public void save(final Collection batchToSave) { Iterator iter = batchToSave.iterator(); - while(iter.hasNext()) { + while (iter.hasNext()) { save(iter.next()); } } - public void update(Object objectToSave) { + public void update(final Object objectToSave) { ensureNotIterable(objectToSave); - ConvertedCouchbaseDocument converted = new ConvertedCouchbaseDocument(); + final ConvertedCouchbaseDocument converted = + new ConvertedCouchbaseDocument(); couchbaseConverter.write(objectToSave, converted); - client.replace(converted.getId(), converted.getExpiry(), converted.getRawValue()); + + execute(new BucketCallback>() { + @Override + public OperationFuture doInBucket() { + return client.replace( + converted.getId(), converted.getExpiry(), converted.getRawValue()); + } + }); + } - public void update(Collection batchToSave) { + public void update(final Collection batchToSave) { Iterator iter = batchToSave.iterator(); while (iter.hasNext()) { save(iter.next()); } } - public T findById(String id, Class entityClass) { - String result = (String) client.get(id); + public final T findById(final String id, final Class entityClass) { + String result = execute(new BucketCallback() { + @Override + public String doInBucket() { + return (String) client.get(id); + } + }); + if (result == null) { return null; } @@ -128,22 +160,28 @@ public class CouchbaseTemplate implements CouchbaseOperations { return couchbaseConverter.read(entityClass, converted); } - public void remove(Object objectToRemove) { + public void remove(final Object objectToRemove) { ensureNotIterable(objectToRemove); - ConvertedCouchbaseDocument converted = new ConvertedCouchbaseDocument(); + final ConvertedCouchbaseDocument converted = new ConvertedCouchbaseDocument(); couchbaseConverter.write(objectToRemove, converted); - client.delete(converted.getId()); + + execute(new BucketCallback>() { + @Override + public OperationFuture doInBucket() { + return client.delete(converted.getId()); + } + }); } - public void remove(Collection batchToRemove) { + public void remove(final Collection batchToRemove) { Iterator iter = batchToRemove.iterator(); while (iter.hasNext()) { remove(iter.next()); } } - public T execute(final DbCallback action) { + public T execute(final BucketCallback action) { try { return action.doInBucket(); } catch (RuntimeException e) { @@ -163,8 +201,8 @@ public class CouchbaseTemplate implements CouchbaseOperations { } } } - - private RuntimeException potentiallyConvertRuntimeException(RuntimeException ex) { + + private RuntimeException potentiallyConvertRuntimeException(final RuntimeException ex) { RuntimeException resolved = this.exceptionTranslator.translateExceptionIfPossible(ex); return resolved == null ? ex : resolved; }