Skip to content

Commit 63b714f

Browse files
BAEL-6073 added scylladb code (#13307)
* BAEL-6073 added scylladb code * BAEL-6073 renamed test class name
1 parent 0fbdb11 commit 63b714f

6 files changed

Lines changed: 265 additions & 0 deletions

File tree

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<groupId>com.baeldung.examples.scylladb</groupId>
6+
<artifactId>scylladb</artifactId>
7+
<version>0.0.1-SNAPSHOT</version>
8+
<name>scylladb</name>
9+
<description>Sample ScyllaDB Project</description>
10+
<properties>
11+
<testcontainers.version>1.17.6</testcontainers.version>
12+
</properties>
13+
<parent>
14+
<groupId>com.baeldung</groupId>
15+
<artifactId>parent-boot-2</artifactId>
16+
<version>0.0.1-SNAPSHOT</version>
17+
<relativePath>../../parent-boot-2</relativePath>
18+
</parent>
19+
<dependencies>
20+
<dependency>
21+
<groupId>org.springframework.boot</groupId>
22+
<artifactId>spring-boot-starter</artifactId>
23+
</dependency>
24+
<dependency>
25+
<groupId>com.scylladb</groupId>
26+
<artifactId>java-driver-core</artifactId>
27+
<version>4.14.1.0</version>
28+
</dependency>
29+
<dependency>
30+
<groupId>com.scylladb</groupId>
31+
<artifactId>java-driver-query-builder</artifactId>
32+
<version>4.14.1.0</version>
33+
</dependency>
34+
35+
<dependency>
36+
<groupId>org.projectlombok</groupId>
37+
<artifactId>lombok</artifactId>
38+
<optional>true</optional>
39+
</dependency>
40+
<dependency>
41+
<groupId>org.springframework.boot</groupId>
42+
<artifactId>spring-boot-starter-test</artifactId>
43+
<scope>test</scope>
44+
</dependency>
45+
<dependency>
46+
<groupId>org.testcontainers</groupId>
47+
<artifactId>testcontainers</artifactId>
48+
<scope>test</scope>
49+
</dependency>
50+
<dependency>
51+
<groupId>org.testcontainers</groupId>
52+
<artifactId>junit-jupiter</artifactId>
53+
<scope>test</scope>
54+
</dependency>
55+
</dependencies>
56+
<dependencyManagement>
57+
<dependencies>
58+
<dependency>
59+
<groupId>org.testcontainers</groupId>
60+
<artifactId>testcontainers-bom</artifactId>
61+
<version>${testcontainers.version}</version>
62+
<type>pom</type>
63+
<scope>import</scope>
64+
</dependency>
65+
</dependencies>
66+
</dependencyManagement>
67+
68+
<build>
69+
<plugins>
70+
<plugin>
71+
<groupId>org.springframework.boot</groupId>
72+
<artifactId>spring-boot-maven-plugin</artifactId>
73+
<configuration>
74+
<excludes>
75+
<exclude>
76+
<groupId>org.projectlombok</groupId>
77+
<artifactId>lombok</artifactId>
78+
</exclude>
79+
</excludes>
80+
</configuration>
81+
</plugin>
82+
</plugins>
83+
</build>
84+
85+
</project>
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package com.baeldung.scylladb;
2+
3+
import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.insertInto;
4+
import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.literal;
5+
import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.selectFrom;
6+
import static com.datastax.oss.driver.api.querybuilder.SchemaBuilder.createKeyspace;
7+
import static com.datastax.oss.driver.api.querybuilder.SchemaBuilder.createTable;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
import com.baeldung.scylladb.model.User;
13+
import com.datastax.oss.driver.api.core.CqlSession;
14+
import com.datastax.oss.driver.api.core.cql.ResultSet;
15+
import com.datastax.oss.driver.api.core.cql.Row;
16+
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
17+
import com.datastax.oss.driver.api.core.type.DataTypes;
18+
import com.datastax.oss.driver.api.querybuilder.insert.InsertInto;
19+
import com.datastax.oss.driver.api.querybuilder.schema.CreateKeyspaceStart;
20+
import com.datastax.oss.driver.api.querybuilder.schema.CreateTableStart;
21+
import com.datastax.oss.driver.api.querybuilder.select.Select;
22+
23+
public class ScylladbApplication {
24+
25+
private String keySpaceName;
26+
private String tableName;
27+
28+
public ScylladbApplication(String keySpaceName, String tableName) {
29+
this.keySpaceName = keySpaceName;
30+
this.tableName = tableName;
31+
CreateKeyspaceStart createKeyspace = createKeyspace(keySpaceName);
32+
SimpleStatement keypaceStatement = createKeyspace.ifNotExists()
33+
.withSimpleStrategy(3)
34+
.build();
35+
36+
CreateTableStart createTable = createTable(keySpaceName, tableName);
37+
SimpleStatement tableStatement = createTable.ifNotExists()
38+
.withPartitionKey("id", DataTypes.BIGINT)
39+
.withColumn("name", DataTypes.TEXT)
40+
.build();
41+
42+
try (CqlSession session = CqlSession.builder().build()) {
43+
ResultSet rs = session.execute(keypaceStatement);
44+
if (null == rs.getExecutionInfo().getErrors() || rs.getExecutionInfo().getErrors().isEmpty()) {
45+
rs = session.execute(tableStatement);
46+
}
47+
}
48+
}
49+
50+
public List<String> getAllUserNames() {
51+
List<String> userNames = new ArrayList<>();
52+
try (CqlSession session = CqlSession.builder().build()) {
53+
String query = String.format("select * from %s.%s",keySpaceName,tableName);
54+
ResultSet rs = session.execute(query);
55+
for (Row r : rs.all())
56+
userNames.add(r.getString("name"));
57+
}
58+
return userNames;
59+
}
60+
61+
public List<User> getUsersByUserName(String userName) {
62+
List<User> userList = new ArrayList<>();
63+
try (CqlSession session = CqlSession.builder().build()) {
64+
Select query = selectFrom(keySpaceName, tableName).all()
65+
.whereColumn("name")
66+
.isEqualTo(literal(userName))
67+
.allowFiltering();
68+
SimpleStatement statement = query.build();
69+
ResultSet rs = session.execute(statement);
70+
for (Row r : rs)
71+
userList.add(new User(r.getLong("id"), r.getString("name")));
72+
}
73+
return userList;
74+
}
75+
76+
public boolean addNewUser(User user) {
77+
boolean response = false;
78+
try (CqlSession session = CqlSession.builder().build()) {
79+
InsertInto insert = insertInto(keySpaceName, tableName);
80+
SimpleStatement statement = insert.value("id", literal(user.getId()))
81+
.value("name", literal(user.getName()))
82+
.build();
83+
ResultSet rs = session.execute(statement);
84+
response = null == rs.getExecutionInfo().getErrors() || rs.getExecutionInfo().getErrors().isEmpty();
85+
}
86+
return response;
87+
}
88+
89+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.baeldung.scylladb.model;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
import lombok.Setter;
7+
8+
@Getter
9+
@Setter
10+
@NoArgsConstructor
11+
@AllArgsConstructor
12+
public class User {
13+
14+
private long id;
15+
16+
private String name;
17+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
datastax-java-driver:
2+
basic:
3+
contact-points: 127.0.0.1:9042
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.baeldung.scylladb;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import java.util.List;
6+
import java.util.function.Consumer;
7+
8+
import org.junit.jupiter.api.BeforeAll;
9+
import org.junit.jupiter.api.Test;
10+
import org.junit.jupiter.api.TestInstance;
11+
import org.testcontainers.containers.GenericContainer;
12+
import org.testcontainers.junit.jupiter.Container;
13+
import org.testcontainers.junit.jupiter.Testcontainers;
14+
import org.testcontainers.utility.DockerImageName;
15+
16+
import com.baeldung.scylladb.model.User;
17+
import com.github.dockerjava.api.command.CreateContainerCmd;
18+
import com.github.dockerjava.api.model.ExposedPort;
19+
import com.github.dockerjava.api.model.PortBinding;
20+
import com.github.dockerjava.api.model.Ports;
21+
22+
@Testcontainers
23+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
24+
public class ScyllaDBApplicationLiveTest {
25+
26+
private static final String IMAGE_NAME = "scylladb/scylla";
27+
private static final int hostPort = 9042;
28+
private static final int containerExposedPort = 9042;
29+
private static Consumer<CreateContainerCmd> cmd = e -> e.withPortBindings(new PortBinding(Ports.Binding.bindPort(hostPort),
30+
new ExposedPort(containerExposedPort)));
31+
32+
@Container
33+
private static final GenericContainer scyllaDbContainer = new GenericContainer(DockerImageName.parse(IMAGE_NAME))
34+
.withExposedPorts(containerExposedPort)
35+
.withCreateContainerCmdModifier(cmd);
36+
37+
private ScylladbApplication scylladbApplication;
38+
39+
@BeforeAll
40+
void setUp() {
41+
scylladbApplication = new ScylladbApplication("baeldung", "User");
42+
}
43+
44+
@Test
45+
public void givenKeySpaceAndTable_whenInsertData_thenShouldBeAbleToFindData() {
46+
User user = new User(10, "John");
47+
scylladbApplication.addNewUser(user);
48+
49+
List<User> userList = scylladbApplication.getUsersByUserName("John");
50+
assertEquals(1, userList.size());
51+
assertEquals("John", userList.get(0).getName());
52+
assertEquals(10, userList.get(0).getId());
53+
54+
}
55+
56+
@Test
57+
public void givenKeySpaceAndTable_whenInsertData_thenRowCountIncreases() {
58+
int initialCount = scylladbApplication.getAllUserNames().size();
59+
User user = new User(11, "Doe");
60+
scylladbApplication.addNewUser(user);
61+
62+
int expectedCount = initialCount+1;
63+
int updatedCount = scylladbApplication.getAllUserNames().size();
64+
assertEquals(expectedCount, updatedCount);
65+
66+
}
67+
68+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
datastax-java-driver:
2+
basic:
3+
contact-points: 127.0.0.1:9042

0 commit comments

Comments
 (0)