diff --git a/src/docbkx/introduction/requirements.xml b/src/docbkx/introduction/requirements.xml index 79e2cee47..ccbfad8ba 100644 --- a/src/docbkx/introduction/requirements.xml +++ b/src/docbkx/introduction/requirements.xml @@ -7,6 +7,6 @@ 3.2.x and above. - Currently we support Cassandra 1.X using the DataStax Java Driver (1.0.6-dse) + Currently we support Cassandra 2.X using the DataStax Java Driver (2.0.X) \ No newline at end of file diff --git a/src/docbkx/reference/cassandra.xml b/src/docbkx/reference/cassandra.xml index e6fcc2a9e..54b1b01e5 100644 --- a/src/docbkx/reference/cassandra.xml +++ b/src/docbkx/reference/cassandra.xml @@ -1,77 +1,69 @@ - - - - Cassandra support - - The Cassandra support contains a wide range of features which are summarized below. - - - - Spring configuration support using Java based @Configuration classes or an XML namespace - for a Cassandra driver instance and replica sets - - - - CassandraTemplate helper class that increases productivity performing common Cassandra - operations. Includes integrated object mapping between CQL Tables and POJOs. - - - - Exception translation into Spring's portable Data Access Exception - hierarchy - - - - Feature Rich Object Mapping integrated with Spring's Conversion - Service - - - - Annotation based mapping metadata but extensible to support other - metadata formats - - - - Persistence and mapping lifecycle events - - - - Java based Query, Criteria, and Update DSLs - - - - Automatic implementation of Repository interfaces including - support for custom finder methods. - - - - For most tasks you will find yourself using CassandraTemplate or the - Repository support that both leverage the rich mapping functionality. CassandraTemplate is the - place to look for accessing functionality such as incrementing counters or ad-hoc CRUD - operations. CassandraTemplate also provides callback methods so that it is easy for you to get a - hold of the low level API artifacts such as com.datastax.driver.core.Session - to communicate directly with Cassandra. The goal with naming conventions on various API - artifacts is to copy those in the base DataStax Java driver so you can easily map your existing - knowledge onto the Spring APIs. - -
- Getting Started - - Spring Cassandra support requires Cassanra 1.1 or higher (but not Cassandra 2.0) and Java - SE 6 or higher. The latest commerical release (1.2.X as of this writing) is recommended. An - easy way to bootstrap setting up a working environment is to create a Spring based project in - STS. - - First you need to set up a running Cassandra server. - - To create a Spring project in STS go to File -> New -> Spring Template Project -> - Simple Spring Utility Project -> press Yes when prompted. Then enter a project and a - package name such as org.spring.cassandra.example. - - Then add the following to pom.xml dependencies section. - - <dependencies> + + + + Cassandra support + The Cassandra support contains a wide range of features which + are summarized below. + + + Spring configuration support using Java based @Configuration + classes or an XML namespace for a Cassandra driver instance and + replica sets + + + CassandraTemplate helper class that increases productivity + performing common Cassandra operations. Includes integrated object + mapping between CQL Tables and POJOs. + + + Exception translation into Spring's portable Data Access + Exception hierarchy + + + Feature Rich Object Mapping integrated with Spring's + Conversion Service + + + Annotation based mapping metadata but extensible to support + other metadata formats + + + Persistence and mapping lifecycle events + + + Java based Query, Criteria, and Update DSLs + + + Automatic implementation of Repository interfaces including + support for custom finder methods. + + + For most tasks you will find yourself using + CassandraTemplate or the Repository support that both + leverage the rich mapping functionality. CassandraTemplate is the + place to look for accessing functionality such as incrementing + counters or ad-hoc CRUD operations. CassandraTemplate also provides + callback methods so that it is easy for you to get a hold of the low + level API artifacts such as + com.datastax.driver.core.Session to communicate directly + with Cassandra. The goal with naming conventions on various API + artifacts is to copy those in the base DataStax Java driver so you can + easily map your existing knowledge onto the Spring APIs. +
+ Getting Started + Spring Data Cassandra uses the DataStax Java Driver version + 2.X, which supports DataStax Enterprise 4/Cassandra 2.0, and Java SE + 6 or higher. The latest commercial release (2.X as of this writing) + is recommended. An easy way to bootstrap setting up a working + environment is to create a Spring based project in + STS. + First you need to set up a running Cassandra server. + To create a Spring project in STS go to File -> New -> + Spring Template Project -> Simple Spring Utility Project -> + press Yes when prompted. Then enter a project and a package name such + as org.spring.cassandra.example. + Then add the following to pom.xml dependencies section. + <dependencies> <!-- other dependency elements omitted --> @@ -81,165 +73,250 @@ <version>1.0.0.RELEASE</version> </dependency> -</dependencies> - - Also change the version of Spring in the pom.xml to be - - <spring.framework.version>3.2.8.RELEASE</spring.framework.version> - - You will also need to add the location of the Spring Milestone - repository for maven to your pom.xml which is at the same level of your - <dependencies/> element - - <repositories> +</dependencies> + Also change the version of Spring in the pom.xml to be + <spring.framework.version>3.2.8.RELEASE</spring.framework.version> + You will also need to add the location of the Spring Milestone + repository for maven to your pom.xml which is at the same level of + your <dependencies/> element + <repositories> <repository> <id>spring-milestone</id> <name>Spring Maven MILESTONE Repository</name> <url>http://repo.spring.io/libs-milestone</url> </repository> -</repositories> - - The repository is also browseable - here. - TODO -
- -
- Examples Repository - - TODO -
- -
- Connecting to Cassandra with Spring -
- -
- General auditing configuration - Auditing support is not available in the current version. -
- -
- Introduction to CassandraTemplate - -
- Instantiating CassandraTemplate -
-
- -
- Saving, Updating, and Removing Rows - - CassandraTemplate provides a simple way for you to save, update, - and delete your domain objects and map those objects to documents stored in Cassandra. - -
- How the Composite Primary Key fields are handled in the mapping layer - - Cassandra requires that you have at least 1 Partition Key field for a CQL Table. - Alternately, you can have one or more Clustering Key fields. - TODO With Examples -
- -
- Type mapping -
- -
- Methods for saving and inserting rows -
- -
- Updating rows in a CQL table -
- -
- Upserting rows in a CQL table -
- -
- Finding and Upserting rowa in a CQL table -
- -
- Methods for removing rows -
-
- -
- Querying CQL Tables -
- -
- Overriding default mapping with custom converters - - In order to have more fine grained control over the mapping process you can register - Spring converters with the CassandraConverter implementations such as - the MappingCassandraConverter. - - The MappingCassandraConverter checks to see if there are any Spring - converters that can handle a specific class before attempting to map the object itself. To - 'hijack' the normal mapping strategies of the - MappingCassandraConverter, perhaps for increased performance or other - custom mapping needs, you first need to create an implementation of the Spring - Converter interface and then register it with the - MappingConverter. - - - For more information on the Spring type conversion service see the - reference docs here. - - -
- Saving using a registered Spring Converter -
- -
- Reading using a Spring Converter -
- -
- Registering Spring Converters with the CassandraConverter -
- -
- Converter disambiguation -
-
- -
- Executing Commands - -
- Methods for executing commands -
-
- -
- Lifecycle Events -
- -
- Exception Translation - - The Spring framework provides exception translation for a wide variety of database and - mapping technologies. This has traditionally been for JDBC and JPA. The Spring support for - Cassandra extends this feature to the Cassandra Database by providing an implementation of the - org.springframework.dao.support.PersistenceExceptionTranslator - interface. - - The motivation behind mapping to Spring's consistent data access exception hierarchy is that you are then able to write - portable and descriptive exception handling code without resorting to coding against Cassandra - Exceptions. All of Spring's data access exceptions are inherited from the root - DataAccessException class so you can be sure that you will be able to - catch all database related exception within a single try-catch block. -
- -
- Execution callbacks -
-
+</repositories>
+ The repository is also + + browseable here. + Create a simple Employee class to persist. + + package org.spring.cassandra.example; + +import org.springframework.data.cassandra.mapping.PrimaryKey; +import org.springframework.data.cassandra.mapping.Table; + +@Table +public class Person { + + @PrimaryKey + private String id; + + private String name; + private int age; + + public Person(String id, String name, int age) { + this.id = id; + this.name = name; + this.age = age; + } + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + @Override + public String toString() { + return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; + } + +} + + And a main application to run + + package org.spring.cassandra.example; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.cassandra.core.CassandraOperations; +import org.springframework.data.cassandra.core.CassandraTemplate; + +import com.datastax.driver.core.Cluster; +import com.datastax.driver.core.Session; +import com.datastax.driver.core.querybuilder.QueryBuilder; +import com.datastax.driver.core.querybuilder.Select; + +public class CassandraApp { + + private static final Logger LOG = LoggerFactory.getLogger(CassandraApp.class); + + private static Cluster cluster; + private static Session session; + + public static void main(String[] args) { + + try { + + cluster = Cluster.builder().addContactPoints(InetAddress.getLocalHost()).build(); + + session = cluster.connect("mykeyspace"); + + CassandraOperations cassandraOps = new CassandraTemplate(session); + + cassandraOps.insert(new Person("1234567890", "David", 40)); + + Select s = QueryBuilder.select().from("person"); + s.where(QueryBuilder.eq("id", "1234567890")); + + LOG.info(cassandraOps.queryForObject(s, Person.class).getId()); + + cassandraOps.truncate("person"); + + } catch (UnknownHostException e) { + e.printStackTrace(); + } + + } +} + + + Even in this simple example, there are a few things to + observe. + + + You can create an instance of CassandraTemplate with a + Cassandra Session, derived from the Cluster. + + + You must annotate your POJO as a Cassandra @Table, and also + annotate the @PrimaryKey. Optionally you can override these + mapping names to match your Cassandra database table and column + names. + + + You can use CQL String, or the DataStax QueryBuilder to + construct you queries. + + +
+
+ Examples Repository + After the initial release of Spring Data Cassandra 1.0.0, we + will start working on a showcase repository with full examples. +
+
+ Connecting to Cassandra with Spring +
+
+ General auditing configuration + Auditing support is not available in the current version. +
+
+ Introduction to CassandraTemplate +
+ Instantiating CassandraTemplate +
+
+
+ Saving, Updating, and Removing Rows + CassandraTemplate provides a simple way + for you to save, update, and delete your domain objects and map those + objects to documents stored in Cassandra. +
+ How the Composite Primary Key fields are handled in the + mapping layer + Cassandra requires that you have at least 1 Partition Key + field for a CQL Table. Alternately, you can have one or more + Clustering Key fields. + TODO With Examples +
+
+ Type mapping +
+
+ Methods for saving and inserting rows +
+
+ Updating rows in a CQL table +
+
+ Upserting rows in a CQL table +
+
+ Finding and Upserting rowa in a CQL table +
+
+ Methods for removing rows +
+
+
+ Querying CQL Tables +
+
+ Overriding default mapping with custom converters + In order to have more fine grained control over the mapping + process you can register Spring converters with the + CassandraConverter implementations such as the + MappingCassandraConverter. + The MappingCassandraConverter checks to + see if there are any Spring converters that can handle a specific + class before attempting to map the object itself. To + 'hijack' the normal mapping strategies of the + MappingCassandraConverter, perhaps for increased + performance or other custom mapping needs, you first need to create + an implementation of the Spring + Converter interface and then register it with the + MappingConverter. + + For more information on the Spring type conversion service see + the reference docs + + here. + +
+ Saving using a registered Spring Converter +
+
+ Reading using a Spring Converter +
+
+ Registering Spring Converters with the + CassandraConverter +
+
+ Converter disambiguation +
+
+
+ Executing Commands +
+ Methods for executing commands +
+
+
+ Lifecycle Events +
+
+ Exception Translation + The Spring framework provides exception translation for a wide + variety of database and mapping technologies. This has traditionally + been for JDBC and JPA. The Spring support for Cassandra extends this + feature to the Cassandra Database by providing an implementation of + the + org.springframework.dao.support.PersistenceExceptionTranslator + interface. + The motivation behind mapping to Spring's + + consistent data access exception hierarchy is that you are + then able to write portable and descriptive exception handling code + without resorting to coding against Cassandra Exceptions. All of + Spring's data access exceptions are inherited from the root + DataAccessException class so you can be sure + that you will be able to catch all database related exception within + a single try-catch block. +
+
+ Execution callbacks +
+