From 8f3a262e54bed906b94a91e7ce2a63cc3422ec91 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Mon, 7 Dec 2020 11:41:47 +0100 Subject: [PATCH] DATACASS-833 - Deprecate cached PreparedStatementCreator support classes. Since Cassandra driver version 4, the driver itself tracks prepared statements so external prepared statement caching is no longer required. --- .../core/cql/CachedPreparedStatementCreator.java | 12 ++++++------ .../core/cql/SimplePreparedStatementCreator.java | 7 ++----- .../cql/support/CachedPreparedStatementCreator.java | 10 ++++++---- .../core/cql/support/MapPreparedStatementCache.java | 2 ++ .../core/cql/support/PreparedStatementCache.java | 3 +++ src/main/asciidoc/reference/reactive-cassandra.adoc | 2 +- 6 files changed, 20 insertions(+), 16 deletions(-) diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/CachedPreparedStatementCreator.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/CachedPreparedStatementCreator.java index 51616a252..bac93d6f9 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/CachedPreparedStatementCreator.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/CachedPreparedStatementCreator.java @@ -18,15 +18,16 @@ package org.springframework.data.cassandra.core.cql; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import com.datastax.oss.driver.api.core.CqlIdentifier; -import com.datastax.oss.driver.api.core.CqlSession; -import com.datastax.oss.driver.api.core.DriverException; -import com.datastax.oss.driver.api.core.cql.PreparedStatement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.Assert; +import com.datastax.oss.driver.api.core.CqlIdentifier; +import com.datastax.oss.driver.api.core.CqlSession; +import com.datastax.oss.driver.api.core.DriverException; +import com.datastax.oss.driver.api.core.cql.PreparedStatement; + /** * This {@link PreparedStatementCreator} maintains a static cache of all prepared statements for the duration of the JVM * runtime, more specific the lifecycle of the associated {@link ClassLoader}. When preparing statements with Cassandra, @@ -38,8 +39,7 @@ import org.springframework.util.Assert; * @author David Webb * @author Mark Paluch * @deprecated since 2.0. This class uses an unsafe, static held cache and is not able to prepare - * {@link com.datastax.driver.core.querybuilder.BuiltStatement}. Use - * {@link org.springframework.data.cassandra.core.cql.support.CachedPreparedStatementCreator}. + * {@link com.datastax.driver.core.querybuilder.BuiltStatement}. */ @Deprecated public class CachedPreparedStatementCreator implements PreparedStatementCreator { diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/SimplePreparedStatementCreator.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/SimplePreparedStatementCreator.java index d1d938ae1..86dc2adee 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/SimplePreparedStatementCreator.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/SimplePreparedStatementCreator.java @@ -24,14 +24,11 @@ import com.datastax.oss.driver.api.core.cql.SimpleStatement; /** * Trivial implementation of {@link PreparedStatementCreator}. This prepared statement creator simply prepares a - * statement from the CQL string. - *

- * This implementation is useful for testing. It should not be used in production systems with high volume reads and - * writes. Use {@link CachedPreparedStatementCreator} When preparing statements with Cassandra, each Statement should be - * prepared once and only once due to the overhead of preparing the statement. + * statement from the CQL string. Exposes the given CQL statement through {@link CqlProvider#getCql()}, * * @author David Webb * @author Mark Paluch + * @see CqlProvider */ public class SimplePreparedStatementCreator implements PreparedStatementCreator, CqlProvider { diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/CachedPreparedStatementCreator.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/CachedPreparedStatementCreator.java index f54a80f25..744388c77 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/CachedPreparedStatementCreator.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/CachedPreparedStatementCreator.java @@ -15,16 +15,16 @@ */ package org.springframework.data.cassandra.core.cql.support; +import org.springframework.data.cassandra.core.cql.PreparedStatementCreator; +import org.springframework.data.cassandra.core.cql.QueryOptions; +import org.springframework.util.Assert; + import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.DriverException; import com.datastax.oss.driver.api.core.cql.PreparedStatement; import com.datastax.oss.driver.api.core.cql.SimpleStatement; import com.datastax.oss.driver.api.core.cql.Statement; -import org.springframework.data.cassandra.core.cql.PreparedStatementCreator; -import org.springframework.data.cassandra.core.cql.QueryOptions; -import org.springframework.util.Assert; - /** * {@link PreparedStatementCreator} implementation using caching of prepared statements. *

@@ -35,7 +35,9 @@ import org.springframework.util.Assert; * @author Mark Paluch * @since 2.0 * @see PreparedStatementCache + * @deprecated since 3.2, the Cassandra driver has a built-in prepared statement cache with makes external caching of prepared statements superfluous. */ +@Deprecated public class CachedPreparedStatementCreator implements PreparedStatementCreator { private final PreparedStatementCache cache; diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/MapPreparedStatementCache.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/MapPreparedStatementCache.java index 391a4aa8e..850ac5145 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/MapPreparedStatementCache.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/MapPreparedStatementCache.java @@ -36,7 +36,9 @@ import com.datastax.oss.driver.api.core.cql.SimpleStatement; * @author Mark Paluch * @author Aldo Bongio * @since 2.0 + * @deprecated since 3.2, the Cassandra driver has a built-in prepared statement cache with makes external caching of prepared statements superfluous. */ +@Deprecated public class MapPreparedStatementCache implements PreparedStatementCache { private final Map cache; diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/PreparedStatementCache.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/PreparedStatementCache.java index 941ea840b..0b23491b6 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/PreparedStatementCache.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/support/PreparedStatementCache.java @@ -31,7 +31,10 @@ import com.datastax.oss.driver.api.core.cql.SimpleStatement; * @author Mark Paluch * @since 2.0 * @see PreparedStatement + * @deprecated since 3.2, the Cassandra driver has a built-in prepared statement cache with makes external caching of + * prepared statements superfluous. */ +@Deprecated public interface PreparedStatementCache { /** diff --git a/src/main/asciidoc/reference/reactive-cassandra.adoc b/src/main/asciidoc/reference/reactive-cassandra.adoc index 47ffc2adf..7cfb3eb9f 100644 --- a/src/main/asciidoc/reference/reactive-cassandra.adoc +++ b/src/main/asciidoc/reference/reactive-cassandra.adoc @@ -18,7 +18,7 @@ Spring Data for Apache Cassandra uses consistent naming conventions on objects i [[cassandra.reactive.getting-started]] == Getting Started -Spring Data for Apache Cassandra requires Apache Cassandra 2.1 or later and Datastax Java Driver 3.0 or later. +Spring Data for Apache Cassandra requires Apache Cassandra 2.1 or later and Datastax Java Driver 4.0 or later. An easy way to quickly set up and bootstrap a working environment is to create a Spring-based project in https://spring.io/tools/sts[STS] or use https://start.spring.io/[Spring Initializer]. First, you need to set up a running Apache Cassandra server.