Skip to content

Commit 262e157

Browse files
committed
doc(examples): add single-node connection example
1 parent 40bdce6 commit 262e157

File tree

9 files changed

+352
-0
lines changed

9 files changed

+352
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
title: Connection to nodes
3+
hide:
4+
- toc
5+
---
6+
7+
This section provides examples of connecting to Tarantool using the `tarantool-java-sdk`.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
---
2+
title: Connection to single node Tarantool
3+
---
4+
5+
To connect to a single node, run the following code:
6+
7+
=== "tarantool-java-sdk"
8+
9+
```java title="Connection to single node Tarantool"
10+
--8<-- "src/client/simple/connection/SingleNodeConnectionNewConnectorTest.java:new-simple-connection"
11+
```
12+
13+
```java title="Parent abstract class to create docker container"
14+
--8<-- "src/client/simple/connection/SingleNodeConnection.java:single-node-connection"
15+
```
16+
17+
```java title="Class to create container"
18+
--8<-- "src/testcontainers/single/CreateSingleNode.java:create-single-node"
19+
```
20+
21+
=== "cartridge-java"
22+
23+
```java title="Connection to single node Tarantool"
24+
--8<-- "src/client/simple/connection/SingleNodeConnectionCartridgeJavaTest.java:old-simple-connection"
25+
```
26+
27+
```java title="Parent abstract class to create docker container"
28+
--8<-- "src/client/simple/connection/SingleNodeConnection.java:single-node-connection"
29+
```
30+
31+
```java title="Class to create container"
32+
--8<-- "src/testcontainers/single/CreateSingleNode.java:create-single-node"
33+
```
34+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
---
2+
title: Подключение к одиночному узлу
3+
---
4+
5+
Для того чтобы подключиться к одиночному узлу необходимо выполнить следующий код:
6+
7+
=== "tarantool-java-sdk"
8+
9+
```java title="Подключение к одному узлу Tarantool"
10+
--8<-- "src/client/simple/connection/SingleNodeConnectionNewConnectorTest.java:new-simple-connection"
11+
```
12+
13+
```java title="Родительский класс с созданием контейнера"
14+
--8<-- "src/client/simple/connection/SingleNodeConnection.java:single-node-connection"
15+
```
16+
17+
```java title="Класс, который создает контейнер"
18+
--8<-- "src/testcontainers/single/CreateSingleNode.java:create-single-node"
19+
```
20+
21+
=== "cartridge-java"
22+
23+
```java title="Подключение к одному узлу Tarantool"
24+
--8<-- "src/client/simple/connection/SingleNodeConnectionCartridgeJavaTest.java:old-simple-connection"
25+
```
26+
27+
```java title="Родительский класс с созданием контейнера"
28+
--8<-- "src/client/simple/connection/SingleNodeConnection.java:single-node-connection"
29+
```
30+
31+
```java title="Класс, который создает контейнер"
32+
--8<-- "src/testcontainers/single/CreateSingleNode.java:create-single-node"
33+
```
34+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
title: Usage examples
3+
hide:
4+
- toc
5+
---
6+
7+
This section provides examples of using the `tarantool-java-sdk`.
8+
9+
???+ note
10+
11+
Where possible, the code is compared with
12+
[cartridge-java](https://github.com/tarantool/cartridge-java)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright (c) 2025 VK DIGITAL TECHNOLOGIES LIMITED LIABILITY COMPANY
3+
* All Rights Reserved.
4+
*/
5+
6+
package client.simple.connection;
7+
8+
// --8<-- [start:single-node-connection]
9+
10+
import java.io.IOException;
11+
import java.nio.file.Path;
12+
13+
import org.junit.jupiter.api.AfterAll;
14+
import org.junit.jupiter.api.BeforeAll;
15+
import org.junit.jupiter.api.io.TempDir;
16+
import org.testcontainers.containers.tarantool.Tarantool3Container;
17+
import org.testcontainers.containers.tarantool.TarantoolContainer;
18+
import org.testcontainers.utility.DockerImageName;
19+
import testcontainers.single.CreateSingleNode;
20+
21+
public abstract class SingleNodeConnection {
22+
23+
@TempDir protected static Path TEMP_DIR;
24+
25+
private static final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.4.1");
26+
27+
protected static TarantoolContainer<Tarantool3Container> CONTAINER;
28+
29+
@BeforeAll
30+
static void beforeAll() throws IOException {
31+
CONTAINER = createSingleNodeContainer(TEMP_DIR);
32+
CONTAINER.start();
33+
}
34+
35+
@AfterAll
36+
static void afterAll() throws IOException {
37+
CONTAINER.stop();
38+
}
39+
40+
protected abstract void simpleConnection();
41+
42+
protected static TarantoolContainer<Tarantool3Container> createSingleNodeContainer(Path tempPath)
43+
throws IOException {
44+
final Path pathToConfig = CreateSingleNode.createSingleNodeConfig(tempPath);
45+
return new Tarantool3Container(image, "test-node").withConfigPath(pathToConfig);
46+
}
47+
}
48+
// --8<-- [end:single-node-connection]
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Copyright (c) 2025 VK DIGITAL TECHNOLOGIES LIMITED LIABILITY COMPANY
3+
* All Rights Reserved.
4+
*/
5+
6+
package client.simple.connection;
7+
8+
// --8<-- [start:old-simple-connection]
9+
10+
import java.net.InetSocketAddress;
11+
import java.util.List;
12+
13+
import org.junit.jupiter.api.Assertions;
14+
import org.junit.jupiter.api.Test;
15+
import testcontainers.single.CreateSingleNode;
16+
17+
import io.tarantool.driver.api.TarantoolClient;
18+
import io.tarantool.driver.api.TarantoolClientFactory;
19+
import io.tarantool.driver.api.TarantoolResult;
20+
import io.tarantool.driver.api.tuple.TarantoolTuple;
21+
22+
public class SingleNodeConnectionCartridgeJavaTest extends SingleNodeConnection {
23+
24+
@Test
25+
@Override
26+
protected void simpleConnection() {
27+
try (TarantoolClient<TarantoolTuple, TarantoolResult<TarantoolTuple>> client = setupClient()) {
28+
final List<?> result = client.eval("return _TARANTOOL").join();
29+
30+
Assertions.assertEquals(1, result.size());
31+
32+
final Object object = result.get(0);
33+
34+
Assertions.assertInstanceOf(String.class, object);
35+
Assertions.assertTrue(((String) object).contains("3.4.1"));
36+
} catch (Exception e) {
37+
throw new RuntimeException(e);
38+
}
39+
}
40+
41+
private static TarantoolClient<TarantoolTuple, TarantoolResult<TarantoolTuple>> setupClient() {
42+
// Получаем адрес и порт из докера
43+
// Gets address and port from docker
44+
final InetSocketAddress nodeAddress = CONTAINER.mappedAddress();
45+
46+
return TarantoolClientFactory.createClient()
47+
.withAddress(nodeAddress.getHostName(), nodeAddress.getPort())
48+
.withCredentials(CreateSingleNode.LOGIN, CreateSingleNode.PWD.toString())
49+
.build();
50+
}
51+
}
52+
// --8<-- [end:old-simple-connection]
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Copyright (c) 2025 VK DIGITAL TECHNOLOGIES LIMITED LIABILITY COMPANY
3+
* All Rights Reserved.
4+
*/
5+
6+
package client.simple.connection;
7+
8+
// --8<-- [start:new-simple-connection]
9+
10+
import java.net.InetSocketAddress;
11+
import java.util.Collections;
12+
import java.util.List;
13+
14+
import org.junit.jupiter.api.Assertions;
15+
import org.junit.jupiter.api.Test;
16+
import testcontainers.single.CreateSingleNode;
17+
18+
import io.tarantool.client.box.TarantoolBoxClient;
19+
import io.tarantool.client.factory.TarantoolBoxClientBuilder;
20+
import io.tarantool.client.factory.TarantoolFactory;
21+
import io.tarantool.mapping.TarantoolResponse;
22+
import io.tarantool.pool.InstanceConnectionGroup;
23+
24+
public class SingleNodeConnectionNewConnectorTest extends SingleNodeConnection {
25+
26+
@Test
27+
@Override
28+
protected void simpleConnection() {
29+
// Получаем адрес и порт из докера
30+
// Gets address and port from docker
31+
final InetSocketAddress nodeAddress = CONTAINER.mappedAddress();
32+
33+
// Настраиваем группу подключения
34+
// Set ups connection group
35+
final InstanceConnectionGroup connectionGroup =
36+
InstanceConnectionGroup.builder()
37+
.withHost(nodeAddress.getHostName())
38+
.withPort(nodeAddress.getPort())
39+
.withUser(CreateSingleNode.LOGIN)
40+
.withPassword(CreateSingleNode.PWD.toString())
41+
.build();
42+
43+
final TarantoolBoxClientBuilder clientBuilder =
44+
TarantoolFactory.box().withGroups(Collections.singletonList(connectionGroup));
45+
46+
try (final TarantoolBoxClient singleNodeClient = clientBuilder.build()) {
47+
48+
final TarantoolResponse<List<String>> response =
49+
singleNodeClient.eval("return _TARANTOOL", String.class).join();
50+
final List<String> results = response.get();
51+
52+
Assertions.assertEquals(1, results.size());
53+
Assertions.assertTrue(results.get(0).contains("3.4.1"));
54+
} catch (Exception e) {
55+
throw new RuntimeException(e);
56+
}
57+
}
58+
}
59+
// --8<-- [end:new-simple-connection]
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/*
2+
* Copyright (c) 2025 VK DIGITAL TECHNOLOGIES LIMITED LIABILITY COMPANY
3+
* All Rights Reserved.
4+
*/
5+
6+
package testcontainers.single;
7+
8+
// --8<-- [start:create-single-node]
9+
10+
import java.io.IOException;
11+
import java.nio.file.Files;
12+
import java.nio.file.Path;
13+
import java.util.Collections;
14+
15+
import org.testcontainers.containers.tarantool.config.ConfigurationUtils;
16+
17+
import io.tarantool.autogen.Tarantool3Configuration;
18+
import io.tarantool.autogen.credentials.Credentials;
19+
import io.tarantool.autogen.credentials.users.Users;
20+
import io.tarantool.autogen.credentials.users.usersProperty.UsersProperty;
21+
import io.tarantool.autogen.groups.Groups;
22+
import io.tarantool.autogen.groups.groupsProperty.GroupsProperty;
23+
import io.tarantool.autogen.groups.groupsProperty.replicasets.Replicasets;
24+
import io.tarantool.autogen.groups.groupsProperty.replicasets.replicasetsProperty.ReplicasetsProperty;
25+
import io.tarantool.autogen.groups.groupsProperty.replicasets.replicasetsProperty.instances.Instances;
26+
import io.tarantool.autogen.groups.groupsProperty.replicasets.replicasetsProperty.instances.instancesProperty.InstancesProperty;
27+
import io.tarantool.autogen.groups.groupsProperty.replicasets.replicasetsProperty.instances.instancesProperty.iproto.Iproto;
28+
import io.tarantool.autogen.groups.groupsProperty.replicasets.replicasetsProperty.instances.instancesProperty.iproto.listen.Listen;
29+
30+
public class CreateSingleNode {
31+
32+
public static final String NODE = "test-node";
33+
34+
public static final CharSequence PWD = "secret";
35+
36+
public static final String LOGIN = "test-user";
37+
38+
/*
39+
// Создает конфигурацию вида:
40+
// Creates configuration like:
41+
---
42+
credentials:
43+
users:
44+
test-user:
45+
password: "secret"
46+
roles:
47+
- "super"
48+
groups:
49+
test-group:
50+
replicasets:
51+
test-rs:
52+
instances:
53+
test-node:
54+
iproto:
55+
listen:
56+
- uri: "0.0.0.0:3301"
57+
*/
58+
public static Path createSingleNodeConfig(Path tempDir) throws IOException {
59+
final Path pathToConfigFile = Files.createFile(tempDir.resolve("config.yaml"));
60+
61+
final Credentials credentials =
62+
Credentials.builder()
63+
.withUsers(
64+
Users.builder()
65+
.withAdditionalProperty(
66+
LOGIN,
67+
UsersProperty.builder()
68+
.withRoles(Collections.singletonList("super"))
69+
.withPassword(PWD.toString())
70+
.build())
71+
.build())
72+
.build();
73+
74+
final Iproto iproto =
75+
Iproto.builder()
76+
.withListen(Collections.singletonList(Listen.builder().withUri("0.0.0.0:3301").build()))
77+
.build();
78+
79+
final InstancesProperty instance = InstancesProperty.builder().withIproto(iproto).build();
80+
81+
final ReplicasetsProperty replicaset =
82+
ReplicasetsProperty.builder()
83+
.withInstances(Instances.builder().withAdditionalProperty(NODE, instance).build())
84+
.build();
85+
86+
final GroupsProperty group =
87+
GroupsProperty.builder()
88+
.withReplicasets(
89+
Replicasets.builder().withAdditionalProperty("test-rs", replicaset).build())
90+
.build();
91+
92+
final Tarantool3Configuration configuration =
93+
Tarantool3Configuration.builder()
94+
.withGroups(Groups.builder().withAdditionalProperty("test-group", group).build())
95+
.withCredentials(credentials)
96+
.build();
97+
98+
ConfigurationUtils.writeToFile(configuration, pathToConfigFile);
99+
return pathToConfigFile;
100+
}
101+
}
102+
103+
// --8<-- [end:create-single-node]

documentation/mkdocs.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,9 @@ nav:
124124
- documentation/client/arch/tuple_pojo_mapping.md
125125
- Примеры использования:
126126
- documentation/client/examples/index.md
127+
- Подключение к узлам:
128+
- documentation/client/examples/connection/index.md
129+
- documentation/client/examples/connection/single-node.md
127130
- Tarantool Testcontainers:
128131
- documentation/testcontainers/index.md
129132
- Одиночный узел:

0 commit comments

Comments
 (0)