diff --git a/java-cassandra/pom.xml b/java-cassandra/pom.xml
new file mode 100644
index 0000000000..265a230eb4
--- /dev/null
+++ b/java-cassandra/pom.xml
@@ -0,0 +1,102 @@
+
+ 4.0.0
+ com.baeldung
+ cassandra-java-client
+ 1.0.0-SNAPSHOT
+
+ cassandra-java-client
+
+
+ UTF-8
+
+
+ 1.7.21
+ 1.1.7
+
+
+ 1.3
+ 4.12
+ 1.10.19
+ 6.8
+ 3.5.1
+
+
+ 3.5.1
+
+
+ 3.1.0
+
+
+
+
+
+ com.datastax.cassandra
+ cassandra-driver-core
+ ${cassandra-driver-core.version}
+ true
+
+
+
+
+ org.cassandraunit
+ cassandra-unit
+ 3.0.0.1
+
+
+
+
+ com.google.guava
+ guava
+ 19.0
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+ ${org.slf4j.version}
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+
+ org.slf4j
+ jcl-over-slf4j
+ ${org.slf4j.version}
+
+
+
+ org.slf4j
+ log4j-over-slf4j
+ ${org.slf4j.version}
+
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+
+
+ java-cassandra
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+
+ 1.8
+
+
+
+
+
+
diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraClient.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraClient.java
new file mode 100644
index 0000000000..c67a2c2ddb
--- /dev/null
+++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraClient.java
@@ -0,0 +1,44 @@
+package com.baeldung.cassandra.java.client;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.baeldung.cassandra.java.client.domain.Book;
+import com.baeldung.cassandra.java.client.repository.BookRepository;
+import com.baeldung.cassandra.java.client.repository.KeyspaceRepository;
+import com.datastax.driver.core.Session;
+import com.datastax.driver.core.utils.UUIDs;
+
+public class CassandraClient {
+ private static final Logger LOG = LoggerFactory.getLogger(CassandraClient.class);
+
+ public static void main(String args[]) {
+ CassandraConnector connector = new CassandraConnector();
+ connector.connect("127.0.0.1", null);
+ Session session = connector.getSession();
+
+ KeyspaceRepository sr = new KeyspaceRepository(session);
+ sr.createKeyspace("library", "SimpleStrategy", 1);
+ sr.useKeyspace("library");
+
+ BookRepository br = new BookRepository(session);
+ br.createTable();
+ br.alterTablebooks("publisher", "text");
+
+ br.createTableBooksByTitle();
+
+ Book book = new Book(UUIDs.timeBased(), "Effective Java", "Joshua Bloch", "Programming");
+ br.insertBookBatch(book);
+
+ br.selectAll().forEach(o -> LOG.info("Title in books: " + o.getTitle()));
+ br.selectAllBookByTitle().forEach(o -> LOG.info("Title in booksByTitle: " + o.getTitle()));
+
+ br.deletebookByTitle("Effective Java");
+ br.deleteTable("books");
+ br.deleteTable("booksByTitle");
+
+ sr.deleteKeyspace("library");
+
+ connector.close();
+ }
+}
diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraConnector.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraConnector.java
new file mode 100644
index 0000000000..e035335ca0
--- /dev/null
+++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraConnector.java
@@ -0,0 +1,51 @@
+package com.baeldung.cassandra.java.client;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.datastax.driver.core.Cluster;
+import com.datastax.driver.core.Cluster.Builder;
+import com.datastax.driver.core.Host;
+import com.datastax.driver.core.Metadata;
+import com.datastax.driver.core.Session;
+
+/**
+ *
+ * This is an implementation of a simple Java client.
+ *
+ */
+public class CassandraConnector {
+ private static final Logger LOG = LoggerFactory.getLogger(CassandraConnector.class);
+
+ private Cluster cluster;
+
+ private Session session;
+
+ public void connect(final String node, final Integer port) {
+
+ Builder b = Cluster.builder().addContactPoint(node);
+
+ if (port != null) {
+ b.withPort(port);
+ }
+ cluster = b.build();
+
+ Metadata metadata = cluster.getMetadata();
+ LOG.info("Cluster name: " + metadata.getClusterName());
+
+ for (Host host : metadata.getAllHosts()) {
+ LOG.info("Datacenter: " + host.getDatacenter() + " Host: " + host.getAddress() + " Rack: " + host.getRack());
+ }
+
+ session = cluster.connect();
+ }
+
+ public Session getSession() {
+ return this.session;
+ }
+
+ public void close() {
+ session.close();
+ cluster.close();
+ }
+}
diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java
new file mode 100644
index 0000000000..490aaf7080
--- /dev/null
+++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java
@@ -0,0 +1,67 @@
+package com.baeldung.cassandra.java.client.domain;
+
+import java.util.UUID;
+
+public class Book {
+
+ private UUID id;
+
+ private String title;
+
+ private String author;
+
+ private String subject;
+
+ private String publisher;
+
+ Book() {
+
+ }
+
+ public Book(UUID id, String title, String author, String subject) {
+ this.id = id;
+ this.title = title;
+ this.author = author;
+ this.subject = subject;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+ public String getSubject() {
+ return subject;
+ }
+
+ public void setSubject(String subject) {
+ this.subject = subject;
+ }
+
+ public String getPublisher() {
+ return publisher;
+ }
+
+ public void setPublisher(String publisher) {
+ this.publisher = publisher;
+ }
+}
diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/BookRepository.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/BookRepository.java
new file mode 100644
index 0000000000..31e2969e01
--- /dev/null
+++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/BookRepository.java
@@ -0,0 +1,177 @@
+package com.baeldung.cassandra.java.client.repository;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.baeldung.cassandra.java.client.domain.Book;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Row;
+import com.datastax.driver.core.Session;
+
+public class BookRepository {
+
+ private static final String TABLE_NAME = "books";
+
+ private static final String TABLE_NAME_BY_TITLE = TABLE_NAME + "ByTitle";
+
+ private Session session;
+
+ public BookRepository(Session session) {
+ this.session = session;
+ }
+
+ /**
+ * Creates the books table.
+ */
+ public void createTable() {
+ StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ").append(TABLE_NAME).append("(").append("id uuid PRIMARY KEY, ").append("title text,").append("author text,").append("subject text);");
+
+ final String query = sb.toString();
+ session.execute(query);
+ }
+
+ /**
+ * Creates the books table.
+ */
+ public void createTableBooksByTitle() {
+ StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ").append(TABLE_NAME_BY_TITLE).append("(").append("id uuid, ").append("title text,").append("PRIMARY KEY (title, id));");
+
+ final String query = sb.toString();
+ session.execute(query);
+ }
+
+ /**
+ * Alters the table books and adds an extra column.
+ */
+ public void alterTablebooks(String columnName, String columnType) {
+ StringBuilder sb = new StringBuilder("ALTER TABLE ").append(TABLE_NAME).append(" ADD ").append(columnName).append(" ").append(columnType).append(";");
+
+ final String query = sb.toString();
+ session.execute(query);
+ }
+
+ /**
+ * Insert a row in the table books.
+ *
+ * @param book
+ */
+ public void insertbook(Book book) {
+ StringBuilder sb = new StringBuilder("INSERT INTO ").append(TABLE_NAME).append("(id, title, author, subject) ").append("VALUES (").append(book.getId()).append(", '").append(book.getTitle()).append("', '").append(book.getAuthor()).append("', '")
+ .append(book.getSubject()).append("');");
+
+ final String query = sb.toString();
+ session.execute(query);
+ }
+
+ /**
+ * Insert a row in the table booksByTitle.
+ * @param book
+ */
+ public void insertbookByTitle(Book book) {
+ StringBuilder sb = new StringBuilder("INSERT INTO ").append(TABLE_NAME_BY_TITLE).append("(id, title) ").append("VALUES (").append(book.getId()).append(", '").append(book.getTitle()).append("');");
+
+ final String query = sb.toString();
+ session.execute(query);
+ }
+
+ /**
+ * Insert a book into two identical tables using a batch query.
+ *
+ * @param book
+ */
+ public void insertBookBatch(Book book) {
+ StringBuilder sb = new StringBuilder("BEGIN BATCH ")
+ .append("INSERT INTO ").append(TABLE_NAME).append("(id, title, author, subject) ")
+ .append("VALUES (").append(book.getId()).append(", '").append(book.getTitle()).append("', '").append(book.getAuthor()).append("', '")
+ .append(book.getSubject()).append("');")
+ .append("INSERT INTO ").append(TABLE_NAME_BY_TITLE).append("(id, title) ")
+ .append("VALUES (").append(book.getId()).append(", '").append(book.getTitle()).append("');")
+ .append("APPLY BATCH;");
+
+ final String query = sb.toString();
+ session.execute(query);
+ }
+
+ /**
+ * Select book by id.
+ *
+ * @return
+ */
+ public Book selectByTitle(String title) {
+ StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME_BY_TITLE).append(" WHERE title = '").append(title).append("';");
+
+ final String query = sb.toString();
+
+ ResultSet rs = session.execute(query);
+
+ List books = new ArrayList();
+
+ for (Row r : rs) {
+ Book s = new Book(r.getUUID("id"), r.getString("title"), null, null);
+ books.add(s);
+ }
+
+ return books.get(0);
+ }
+
+ /**
+ * Select all books from books
+ *
+ * @return
+ */
+ public List selectAll() {
+ StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME);
+
+ final String query = sb.toString();
+ ResultSet rs = session.execute(query);
+
+ List books = new ArrayList();
+
+ for (Row r : rs) {
+ Book book = new Book(r.getUUID("id"), r.getString("title"), r.getString("author"), r.getString("subject"));
+ books.add(book);
+ }
+ return books;
+ }
+
+ /**
+ * Select all books from booksByTitle
+ * @return
+ */
+ public List selectAllBookByTitle() {
+ StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME_BY_TITLE);
+
+ final String query = sb.toString();
+ ResultSet rs = session.execute(query);
+
+ List books = new ArrayList();
+
+ for (Row r : rs) {
+ Book book = new Book(r.getUUID("id"), r.getString("title"), null, null);
+ books.add(book);
+ }
+ return books;
+ }
+
+ /**
+ * Delete a book by title.
+ */
+ public void deletebookByTitle(String title) {
+ StringBuilder sb = new StringBuilder("DELETE FROM ").append(TABLE_NAME_BY_TITLE).append(" WHERE title = '").append(title).append("';");
+
+ final String query = sb.toString();
+ session.execute(query);
+ }
+
+ /**
+ * Delete table.
+ *
+ * @param tableName the name of the table to delete.
+ */
+ public void deleteTable(String tableName) {
+ StringBuilder sb = new StringBuilder("DROP TABLE IF EXISTS ").append(tableName);
+
+ final String query = sb.toString();
+ session.execute(query);
+ }
+}
diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java
new file mode 100644
index 0000000000..1b42a6ec21
--- /dev/null
+++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java
@@ -0,0 +1,54 @@
+package com.baeldung.cassandra.java.client.repository;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.datastax.driver.core.Session;
+
+/**
+ * Repository to handle the Cassandra schema.
+ *
+ */
+public class KeyspaceRepository {
+ private static final Logger LOG = LoggerFactory.getLogger(KeyspaceRepository.class);
+
+ private Session session;
+
+ public KeyspaceRepository(Session session) {
+ this.session = session;
+ }
+
+ /**
+ * Method used to create any keyspace - schema.
+ *
+ * @param schemaName the name of the schema.
+ * @param replicatioonStrategy the replication strategy.
+ * @param numberOfReplicas the number of replicas.
+ *
+ */
+ public void createKeyspace(String keyspaceName, String replicatioonStrategy, int numberOfReplicas) {
+ StringBuilder sb = new StringBuilder("CREATE KEYSPACE IF NOT EXISTS ").append(keyspaceName).append(" WITH replication = {").append("'class':'").append(replicatioonStrategy).append("','replication_factor':").append(numberOfReplicas).append("};");
+
+ final String query = sb.toString();
+
+ session.execute(query);
+ }
+
+ public void useKeyspace(String keyspace) {
+ session.execute("USE " + keyspace);
+ }
+
+ /**
+ * Method used to delete the specified schema.
+ * It results in the immediate, irreversable removal of the keyspace, including all tables and data contained in the keyspace.
+ *
+ * @param schemaName the name of the keyspace to delete.
+ */
+ public void deleteKeyspace(String keyspaceName) {
+ StringBuilder sb = new StringBuilder("DROP KEYSPACE ").append(keyspaceName);
+
+ final String query = sb.toString();
+
+ session.execute(query);
+ }
+}
diff --git a/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java b/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java
new file mode 100644
index 0000000000..62eae94c7c
--- /dev/null
+++ b/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java
@@ -0,0 +1,174 @@
+package com.baeldung.cassandra.java.client.repository;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.cassandra.exceptions.ConfigurationException;
+import org.apache.thrift.transport.TTransportException;
+import org.cassandraunit.utils.EmbeddedCassandraServerHelper;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.baeldung.cassandra.java.client.CassandraConnector;
+import com.baeldung.cassandra.java.client.domain.Book;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Session;
+import com.datastax.driver.core.exceptions.InvalidQueryException;
+import com.datastax.driver.core.utils.UUIDs;
+
+public class BookRepositoryIntegrationTest {
+
+ private KeyspaceRepository schemaRepository;
+
+ private BookRepository bookRepository;
+
+ private Session session;
+
+ final String KEYSPACE_NAME = "testLibrary";
+ final String BOOKS = "books";
+ final String BOOKS_BY_TITLE = "booksByTitle";
+
+ @BeforeClass
+ public static void init() throws ConfigurationException, TTransportException, IOException, InterruptedException {
+ // Start an embedded Cassandra Server
+ EmbeddedCassandraServerHelper.startEmbeddedCassandra(20000L);
+ }
+
+ @Before
+ public void connect() {
+ CassandraConnector client = new CassandraConnector();
+ client.connect("127.0.0.1", 9142);
+ this.session = client.getSession();
+ schemaRepository = new KeyspaceRepository(session);
+ schemaRepository.createKeyspace(KEYSPACE_NAME, "SimpleStrategy", 1);
+ schemaRepository.useKeyspace(KEYSPACE_NAME);
+ bookRepository = new BookRepository(session);
+ }
+
+ @Test
+ public void whenCreatingATable_thenCreatedCorrectly() {
+ bookRepository.deleteTable(BOOKS);
+ bookRepository.createTable();
+
+ ResultSet result = session.execute("SELECT * FROM " + KEYSPACE_NAME + "." + BOOKS + ";");
+
+ // Collect all the column names in one list.
+ List columnNames = result.getColumnDefinitions().asList().stream().map(cl -> cl.getName()).collect(Collectors.toList());
+ assertEquals(columnNames.size(), 4);
+ assertTrue(columnNames.contains("id"));
+ assertTrue(columnNames.contains("title"));
+ assertTrue(columnNames.contains("author"));
+ assertTrue(columnNames.contains("subject"));
+ }
+
+ @Test
+ public void whenAlteringTable_thenAddedColumnExists() {
+ bookRepository.deleteTable(BOOKS);
+ bookRepository.createTable();
+
+ bookRepository.alterTablebooks("publisher", "text");
+
+ ResultSet result = session.execute("SELECT * FROM " + KEYSPACE_NAME + "." + BOOKS + ";");
+
+ boolean columnExists = result.getColumnDefinitions().asList().stream().anyMatch(cl -> cl.getName().equals("publisher"));
+ assertTrue(columnExists);
+ }
+
+ @Test
+ public void whenAddingANewBook_thenBookExists() {
+ bookRepository.deleteTable(BOOKS_BY_TITLE);
+ bookRepository.createTableBooksByTitle();
+
+ String title = "Effective Java";
+ String author = "Joshua Bloch";
+ Book book = new Book(UUIDs.timeBased(), title, author, "Programming");
+ bookRepository.insertbookByTitle(book);
+
+ Book savedBook = bookRepository.selectByTitle(title);
+ assertEquals(book.getTitle(), savedBook.getTitle());
+ }
+
+ @Test
+ public void whenAddingANewBookBatch_ThenBookAddedInAllTables() {
+ // Create table books
+ bookRepository.deleteTable(BOOKS);
+ bookRepository.createTable();
+
+ // Create table booksByTitle
+ bookRepository.deleteTable(BOOKS_BY_TITLE);
+ bookRepository.createTableBooksByTitle();
+
+ String title = "Effective Java";
+ String author = "Joshua Bloch";
+ Book book = new Book(UUIDs.timeBased(), title, author, "Programming");
+ bookRepository.insertBookBatch(book);
+
+ List books = bookRepository.selectAll();
+
+ assertEquals(1, books.size());
+ assertTrue(books.stream().anyMatch(b -> b.getTitle().equals("Effective Java")));
+
+ List booksByTitle = bookRepository.selectAllBookByTitle();
+
+ assertEquals(1, booksByTitle.size());
+ assertTrue(booksByTitle.stream().anyMatch(b -> b.getTitle().equals("Effective Java")));
+ }
+
+ @Test
+ public void whenSelectingAll_thenReturnAllRecords() {
+ bookRepository.deleteTable(BOOKS);
+ bookRepository.createTable();
+
+ Book book = new Book(UUIDs.timeBased(), "Effective Java", "Joshua Bloch", "Programming");
+ bookRepository.insertbook(book);
+
+ book = new Book(UUIDs.timeBased(), "Clean Code", "Robert C. Martin", "Programming");
+ bookRepository.insertbook(book);
+
+ List books = bookRepository.selectAll();
+
+ assertEquals(2, books.size());
+ assertTrue(books.stream().anyMatch(b -> b.getTitle().equals("Effective Java")));
+ assertTrue(books.stream().anyMatch(b -> b.getTitle().equals("Clean Code")));
+ }
+
+ @Test
+ public void whenDeletingABookByTitle_thenBookIsDeleted() {
+ bookRepository.deleteTable(BOOKS_BY_TITLE);
+ bookRepository.createTableBooksByTitle();
+
+ Book book = new Book(UUIDs.timeBased(), "Effective Java", "Joshua Bloch", "Programming");
+ bookRepository.insertbookByTitle(book);
+
+ book = new Book(UUIDs.timeBased(), "Clean Code", "Robert C. Martin", "Programming");
+ bookRepository.insertbookByTitle(book);
+
+ bookRepository.deletebookByTitle("Clean Code");
+
+ List books = bookRepository.selectAllBookByTitle();
+ assertEquals(1, books.size());
+ assertTrue(books.stream().anyMatch(b -> b.getTitle().equals("Effective Java")));
+ assertFalse(books.stream().anyMatch(b -> b.getTitle().equals("Clean Code")));
+
+ }
+
+ @Test(expected = InvalidQueryException.class)
+ public void whenDeletingATable_thenUnconfiguredTable() {
+ bookRepository.createTable();
+ bookRepository.deleteTable(BOOKS);
+
+ session.execute("SELECT * FROM " + KEYSPACE_NAME + "." + BOOKS + ";");
+ }
+
+ @AfterClass
+ public static void cleanup() {
+ EmbeddedCassandraServerHelper.cleanEmbeddedCassandra();
+ }
+}
diff --git a/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java b/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java
new file mode 100644
index 0000000000..9df46b3176
--- /dev/null
+++ b/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java
@@ -0,0 +1,77 @@
+package com.baeldung.cassandra.java.client.repository;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.cassandra.exceptions.ConfigurationException;
+import org.apache.thrift.transport.TTransportException;
+import org.cassandraunit.utils.EmbeddedCassandraServerHelper;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+import com.baeldung.cassandra.java.client.CassandraConnector;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Session;
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class KeyspaceRepositoryIntegrationTest {
+
+ private KeyspaceRepository schemaRepository;
+
+ private Session session;
+
+ @BeforeClass
+ public static void init() throws ConfigurationException, TTransportException, IOException, InterruptedException {
+ // Start an embedded Cassandra Server
+ EmbeddedCassandraServerHelper.startEmbeddedCassandra(20000L);
+ }
+
+ @Before
+ public void connect() {
+ CassandraConnector client = new CassandraConnector();
+ client.connect("127.0.0.1", 9142);
+ this.session = client.getSession();
+ schemaRepository = new KeyspaceRepository(session);
+ }
+
+ @Test
+ public void whenCreatingAKeyspace_thenCreated() {
+ String keyspaceName = "testBaeldungKeyspace";
+ schemaRepository.createKeyspace(keyspaceName, "SimpleStrategy", 1);
+
+ // ResultSet result = session.execute("SELECT * FROM system_schema.keyspaces WHERE keyspace_name = 'testBaeldungKeyspace';");
+
+ ResultSet result = session.execute("SELECT * FROM system_schema.keyspaces;");
+
+ // Check if the Keyspace exists in the returned keyspaces.
+ List matchedKeyspaces = result.all().stream().filter(r -> r.getString(0).equals(keyspaceName.toLowerCase())).map(r -> r.getString(0)).collect(Collectors.toList());
+ assertEquals(matchedKeyspaces.size(), 1);
+ assertTrue(matchedKeyspaces.get(0).equals(keyspaceName.toLowerCase()));
+ }
+
+ @Test
+ public void whenDeletingAKeyspace_thenDoesNotExist() {
+ String keyspaceName = "testBaeldungKeyspace";
+
+ // schemaRepository.createKeyspace(keyspaceName, "SimpleStrategy", 1);
+ schemaRepository.deleteKeyspace(keyspaceName);
+
+ ResultSet result = session.execute("SELECT * FROM system_schema.keyspaces;");
+ boolean isKeyspaceCreated = result.all().stream().anyMatch(r -> r.getString(0).equals(keyspaceName.toLowerCase()));
+ assertFalse(isKeyspaceCreated);
+ }
+
+ @AfterClass
+ public static void cleanup() {
+ EmbeddedCassandraServerHelper.cleanEmbeddedCassandra();
+ }
+}
diff --git a/pom.xml b/pom.xml
index db3fa8a21c..2f588c032c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -129,7 +129,7 @@
redis
xstream
-
+ java-cassandra