diff --git a/persistence-modules/java-cassandra/pom.xml b/persistence-modules/java-cassandra/pom.xml index 0dd148e528..6479ae3312 100644 --- a/persistence-modules/java-cassandra/pom.xml +++ b/persistence-modules/java-cassandra/pom.xml @@ -13,26 +13,11 @@ - com.datastax.cassandra cassandra-driver-core ${cassandra-driver-core.version} - true - - - com.google.guava - guava - - - - - org.cassandraunit - cassandra-unit - ${cassandra-unit.version} - - com.datastax.oss java-driver-core @@ -48,32 +33,28 @@ netty-transport ${netty-transport-version} + + org.testcontainers + cassandra + ${cassandra-testcontainer.version} + test + - - - integration-lite-first - - - - - org.apache.maven.plugins - maven-surefire-plugin - - 1 - true - - - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + + + 3.1.2 - 3.1.1.0 4.1.0 + 1.15.3 4.1.71.Final diff --git a/persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/batch/CassandraConnector.java b/persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/batch/CassandraConnector.java index 02d63c62f6..7c9a00f088 100644 --- a/persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/batch/CassandraConnector.java +++ b/persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/batch/CassandraConnector.java @@ -5,8 +5,6 @@ import com.datastax.oss.driver.api.core.CqlSessionBuilder; import java.net.InetSocketAddress; -import org.apache.commons.lang3.StringUtils; - public class CassandraConnector { private CqlSession session; @@ -14,11 +12,11 @@ public class CassandraConnector { public void connect(final String node, final Integer port, final String dataCenter) { CqlSessionBuilder builder = CqlSession.builder(); builder.addContactPoint(new InetSocketAddress(node, port)); - if (StringUtils.isNotBlank(dataCenter)) { + if (dataCenter != null && !dataCenter.isEmpty()) { builder.withLocalDatacenter(dataCenter); } - session = builder.build(); + session = builder.build(); } public CqlSession getSession() { diff --git a/persistence-modules/java-cassandra/src/main/java/com/baeldung/datastax/cassandra/Application.java b/persistence-modules/java-cassandra/src/main/java/com/baeldung/datastax/cassandra/Application.java index f067ee8b73..57f5d8cf0e 100644 --- a/persistence-modules/java-cassandra/src/main/java/com/baeldung/datastax/cassandra/Application.java +++ b/persistence-modules/java-cassandra/src/main/java/com/baeldung/datastax/cassandra/Application.java @@ -1,5 +1,6 @@ package com.baeldung.datastax.cassandra; +import com.baeldung.cassandra.batch.repository.ProductRepository; import com.baeldung.datastax.cassandra.domain.Video; import com.baeldung.datastax.cassandra.repository.KeyspaceRepository; import com.baeldung.datastax.cassandra.repository.VideoRepository; @@ -30,9 +31,11 @@ public class Application { keyspaceRepository.useKeyspace("testKeyspace"); VideoRepository videoRepository = new VideoRepository(session); + ProductRepository productRepository = new ProductRepository(session); videoRepository.createTable(); + productRepository.createProductTableByName("testKeyspace"); videoRepository.insertVideo(new Video("Video Title 1", Instant.now())); videoRepository.insertVideo(new Video("Video Title 2", Instant.now().minus(1, ChronoUnit.DAYS))); diff --git a/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/batch/epository/ProductRepositoryIntegrationTest.java b/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/batch/epository/ProductRepositoryLiveTest.java similarity index 80% rename from persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/batch/epository/ProductRepositoryIntegrationTest.java rename to persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/batch/epository/ProductRepositoryLiveTest.java index 55dc3dad9f..9e6839b2b4 100644 --- a/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/batch/epository/ProductRepositoryIntegrationTest.java +++ b/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/batch/epository/ProductRepositoryLiveTest.java @@ -1,24 +1,5 @@ package com.baeldung.cassandra.batch.epository; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.util.ArrayList; -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.batch.CassandraConnector; import com.baeldung.cassandra.batch.domain.Product; import com.baeldung.cassandra.batch.repository.KeyspaceRepository; import com.baeldung.cassandra.batch.repository.ProductRepository; @@ -26,10 +7,25 @@ import com.datastax.oss.driver.api.core.CqlIdentifier; import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.cql.ColumnDefinition; import com.datastax.oss.driver.api.core.cql.ResultSet; +import org.junit.Before; +import org.junit.FixMethodOrder; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runners.MethodSorters; +import org.testcontainers.containers.CassandraContainer; + +import java.net.InetSocketAddress; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; @FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class ProductRepositoryIntegrationTest { - +public class ProductRepositoryLiveTest { + @Rule + public CassandraContainer cassandra = new CassandraContainer<>("cassandra:3.11.2"); private KeyspaceRepository schemaRepository; private ProductRepository productRepository; @@ -39,21 +35,20 @@ public class ProductRepositoryIntegrationTest { private final String KEYSPACE_NAME = "testBaeldungKeyspace"; private final String PRODUCT = "product"; - @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,"datacenter1"); - session = client.getSession(); - schemaRepository = new KeyspaceRepository(client.getSession()); + cassandra.start(); + + this.session = CqlSession + .builder() + .addContactPoint(new InetSocketAddress(cassandra.getHost(),cassandra.getFirstMappedPort())) + .withLocalDatacenter("datacenter1") + .build(); + + schemaRepository = new KeyspaceRepository(this.session); schemaRepository.createKeyspace(KEYSPACE_NAME, 1); schemaRepository.useKeyspace(KEYSPACE_NAME); - productRepository = new ProductRepository(client.getSession()); + productRepository = new ProductRepository(this.session); } @Test @@ -114,14 +109,7 @@ public class ProductRepositoryIntegrationTest { assertEquals(productList.get(0).getPrice(), 12f,0f); assertEquals(productList.get(1).getPrice(), 12f,0f); } - - - @AfterClass - public static void cleanup() { - EmbeddedCassandraServerHelper.cleanEmbeddedCassandra(); - } - private Product getTestProduct() { Product product = new Product(); product.setProductName("Banana"); diff --git a/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java b/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryLiveTest.java similarity index 82% rename from persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java rename to persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryLiveTest.java index 62eae94c7c..2fa39113c6 100644 --- a/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java +++ b/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryLiveTest.java @@ -1,31 +1,24 @@ 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.Cluster; 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; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.testcontainers.containers.CassandraContainer; -public class BookRepositoryIntegrationTest { +import java.util.List; +import java.util.stream.Collectors; - private KeyspaceRepository schemaRepository; +import static org.junit.Assert.*; + +public class BookRepositoryLiveTest { + @Rule + public CassandraContainer cassandra = new CassandraContainer<>("cassandra:3.11.2"); private BookRepository bookRepository; @@ -35,18 +28,18 @@ public class BookRepositoryIntegrationTest { 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); + cassandra.start(); + + this.session = Cluster + .builder() + .addContactPoint(cassandra.getHost()) + .withPort(cassandra.getMappedPort(CassandraContainer.CQL_PORT)) + .build() + .newSession(); + + KeyspaceRepository schemaRepository = new KeyspaceRepository(session); schemaRepository.createKeyspace(KEYSPACE_NAME, "SimpleStrategy", 1); schemaRepository.useKeyspace(KEYSPACE_NAME); bookRepository = new BookRepository(session); @@ -166,9 +159,4 @@ public class BookRepositoryIntegrationTest { session.execute("SELECT * FROM " + KEYSPACE_NAME + "." + BOOKS + ";"); } - - @AfterClass - public static void cleanup() { - EmbeddedCassandraServerHelper.cleanEmbeddedCassandra(); - } } diff --git a/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java b/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryLiveTest.java similarity index 61% rename from persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java rename to persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryLiveTest.java index 9df46b3176..3a8411ddce 100644 --- a/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java +++ b/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryLiveTest.java @@ -1,45 +1,38 @@ 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 com.datastax.driver.core.Cluster; +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Session; +import org.junit.Before; +import org.junit.FixMethodOrder; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runners.MethodSorters; +import org.testcontainers.containers.CassandraContainer; -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; +import static org.junit.Assert.*; @FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class KeyspaceRepositoryIntegrationTest { - +public class KeyspaceRepositoryLiveTest { + @Rule + public CassandraContainer cassandra = new CassandraContainer<>("cassandra:3.11.2"); 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(); + cassandra.start(); + + this.session = Cluster + .builder() + .addContactPoint(cassandra.getHost()) + .withPort(cassandra.getMappedPort(CassandraContainer.CQL_PORT)) + .build() + .newSession(); + schemaRepository = new KeyspaceRepository(session); } @@ -62,16 +55,11 @@ public class KeyspaceRepositoryIntegrationTest { public void whenDeletingAKeyspace_thenDoesNotExist() { String keyspaceName = "testBaeldungKeyspace"; - // schemaRepository.createKeyspace(keyspaceName, "SimpleStrategy", 1); + 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/persistence-modules/pom.xml b/persistence-modules/pom.xml index f370347aea..e2d6ef67f3 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -35,6 +35,7 @@ hibernate-queries hibernate-enterprise influxdb + java-cassandra java-cockroachdb java-jdbi java-jpa diff --git a/pom.xml b/pom.xml index 114a34f3f9..1618ac684f 100644 --- a/pom.xml +++ b/pom.xml @@ -366,7 +366,6 @@ web-modules/restx persistence-modules/deltaspike persistence-modules/hibernate-ogm - persistence-modules/java-cassandra persistence-modules/spring-data-cassandra-reactive java-nashorn jeromq @@ -542,7 +541,6 @@ web-modules/restx persistence-modules/deltaspike persistence-modules/hibernate-ogm - persistence-modules/java-cassandra persistence-modules/spring-data-cassandra-reactive java-nashorn spring-ejb-modules/ejb-beans