diff --git a/samples/hello-world/src/main/resources/cache.properties b/samples/hello-world/src/main/resources/cache.properties new file mode 100644 index 00000000..ec96ee6f --- /dev/null +++ b/samples/hello-world/src/main/resources/cache.properties @@ -0,0 +1 @@ +log-level=warning diff --git a/src/main/java/org/springframework/data/gemfire/GemfireAccessor.java b/src/main/java/org/springframework/data/gemfire/GemfireAccessor.java index 537c02b9..c86d6b1d 100644 --- a/src/main/java/org/springframework/data/gemfire/GemfireAccessor.java +++ b/src/main/java/org/springframework/data/gemfire/GemfireAccessor.java @@ -67,6 +67,20 @@ public class GemfireAccessor implements InitializingBean { return GemfireCacheUtils.convertGemfireAccessException(ex); } + /** + * Converts the given GemFire exception to an appropriate exception from the + * org.springframework.dao hierarchy. Note that this particular implementation + * is called only for GemFire exception that extend {@link IllegalArgumentException}. + * May be overridden in subclasses. + * + * @see com.gemstone.gemfire.cache.query.CqInvalidException + * @param ex GemFireException that occurred + * @return the corresponding DataAccessException instance + */ + public DataAccessException convertGemFireAccessException(IllegalArgumentException ex) { + return GemfireCacheUtils.convertGemfireAccessException(ex); + } + /** * Returns the template region. * diff --git a/src/main/java/org/springframework/data/gemfire/GemfireCacheUtils.java b/src/main/java/org/springframework/data/gemfire/GemfireCacheUtils.java index 7d3671c7..20da530d 100644 --- a/src/main/java/org/springframework/data/gemfire/GemfireCacheUtils.java +++ b/src/main/java/org/springframework/data/gemfire/GemfireCacheUtils.java @@ -72,9 +72,12 @@ import com.gemstone.gemfire.cache.VersionException; import com.gemstone.gemfire.cache.client.ServerConnectivityException; import com.gemstone.gemfire.cache.execute.FunctionException; import com.gemstone.gemfire.cache.query.CqClosedException; +import com.gemstone.gemfire.cache.query.CqInvalidException; +import com.gemstone.gemfire.cache.query.IndexInvalidException; import com.gemstone.gemfire.cache.query.IndexMaintenanceException; import com.gemstone.gemfire.cache.query.QueryException; import com.gemstone.gemfire.cache.query.QueryExecutionTimeoutException; +import com.gemstone.gemfire.cache.query.QueryInvalidException; import com.gemstone.gemfire.distributed.LeaseExpiredException; import com.gemstone.gemfire.security.GemFireSecurityException; @@ -260,4 +263,21 @@ public abstract class GemfireCacheUtils { // fall back return new GemfireSystemException(ex); } + + public static DataAccessException convertGemfireAccessException(IllegalArgumentException ex) { + if (ex instanceof IndexInvalidException) { + return new GemfireIndexException((IndexInvalidException) ex); + } + + if (ex instanceof CqInvalidException) { + return new GemfireQueryException((CqInvalidException) ex); + } + + if (ex instanceof QueryInvalidException) { + return new GemfireQueryException((QueryInvalidException) ex); + } + + // fall back + return new GemfireSystemException(ex); + } } \ No newline at end of file diff --git a/src/main/java/org/springframework/data/gemfire/GemfireIndexException.java b/src/main/java/org/springframework/data/gemfire/GemfireIndexException.java index 57badca1..d691c9da 100644 --- a/src/main/java/org/springframework/data/gemfire/GemfireIndexException.java +++ b/src/main/java/org/springframework/data/gemfire/GemfireIndexException.java @@ -20,6 +20,7 @@ import org.springframework.dao.DataIntegrityViolationException; import com.gemstone.gemfire.cache.query.IndexCreationException; import com.gemstone.gemfire.cache.query.IndexExistsException; +import com.gemstone.gemfire.cache.query.IndexInvalidException; import com.gemstone.gemfire.cache.query.IndexMaintenanceException; import com.gemstone.gemfire.cache.query.IndexNameConflictException; @@ -45,4 +46,8 @@ public class GemfireIndexException extends DataIntegrityViolationException { public GemfireIndexException(IndexMaintenanceException ex) { super(ex.getMessage(), ex); } + + public GemfireIndexException(IndexInvalidException ex) { + super(ex.getMessage(), ex); + } } diff --git a/src/main/java/org/springframework/data/gemfire/GemfireQueryException.java b/src/main/java/org/springframework/data/gemfire/GemfireQueryException.java index 8673bf40..d05bfb6c 100644 --- a/src/main/java/org/springframework/data/gemfire/GemfireQueryException.java +++ b/src/main/java/org/springframework/data/gemfire/GemfireQueryException.java @@ -18,8 +18,10 @@ package org.springframework.data.gemfire; import org.springframework.dao.InvalidDataAccessResourceUsageException; +import com.gemstone.gemfire.cache.query.CqInvalidException; import com.gemstone.gemfire.cache.query.QueryException; import com.gemstone.gemfire.cache.query.QueryExecutionTimeoutException; +import com.gemstone.gemfire.cache.query.QueryInvalidException; /** * GemFire-specific subclass of {@link InvalidDataAccessResourceUsageException} thrown on invalid @@ -36,4 +38,12 @@ public class GemfireQueryException extends InvalidDataAccessResourceUsageExcepti public GemfireQueryException(QueryExecutionTimeoutException ex) { super(ex.getMessage(), ex); } + + public GemfireQueryException(QueryInvalidException ex) { + super(ex.getMessage(), ex); + } + + public GemfireQueryException(CqInvalidException ex) { + super(ex.getMessage(), ex); + } } diff --git a/src/main/java/org/springframework/data/gemfire/GemfireSystemException.java b/src/main/java/org/springframework/data/gemfire/GemfireSystemException.java index 246081f8..534387cb 100644 --- a/src/main/java/org/springframework/data/gemfire/GemfireSystemException.java +++ b/src/main/java/org/springframework/data/gemfire/GemfireSystemException.java @@ -35,4 +35,8 @@ public class GemfireSystemException extends UncategorizedDataAccessException { public GemfireSystemException(GemFireException ex) { super(ex.getMessage(), ex); } + + public GemfireSystemException(IllegalArgumentException ex) { + super(ex.getMessage(), ex); + } } diff --git a/src/main/java/org/springframework/data/gemfire/GemfireTemplate.java b/src/main/java/org/springframework/data/gemfire/GemfireTemplate.java index 76d4b8cb..cdb710ba 100644 --- a/src/main/java/org/springframework/data/gemfire/GemfireTemplate.java +++ b/src/main/java/org/springframework/data/gemfire/GemfireTemplate.java @@ -28,6 +28,9 @@ import org.springframework.util.ClassUtils; import com.gemstone.gemfire.GemFireCheckedException; import com.gemstone.gemfire.GemFireException; import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.query.CqInvalidException; +import com.gemstone.gemfire.cache.query.IndexInvalidException; +import com.gemstone.gemfire.cache.query.QueryInvalidException; import com.gemstone.gemfire.cache.query.SelectResults; /** @@ -118,6 +121,12 @@ public class GemfireTemplate extends GemfireAccessor { throw convertGemFireAccessException(ex); } catch (GemFireException ex) { throw convertGemFireAccessException(ex); + } catch (IndexInvalidException ex) { + throw convertGemFireAccessException(ex); + } catch (CqInvalidException ex) { + throw convertGemFireAccessException(ex); + } catch (QueryInvalidException ex) { + throw convertGemFireAccessException(ex); } catch (RuntimeException ex) { // callback code threw application exception throw ex;