Skip to content

Commit be62131

Browse files
connection refactor
1 parent d3b6df4 commit be62131

File tree

7 files changed

+75
-63
lines changed

7 files changed

+75
-63
lines changed

.idea/inspectionProfiles/Project_Default.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gradle/libs.versions.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ jctools = "4.0.5"
3232
jersey = "2.46"
3333
jose4j = "0.9.6"
3434
jsonSchemaValidator = "1.5.6"
35-
junit-jupiter = "5.12.2"
35+
junit-jupiter = "5.11.4"
36+
junit = "4.13.2"
3637
logback = "1.5.18"
3738
milo = "0.6.15"
3839
mockito = "5.17.0"
@@ -103,6 +104,8 @@ jose4j = { module = "org.bitbucket.b_c:jose4j", version.ref = "jose4j" }
103104
jsonSchemaValidator = { module = "com.networknt:json-schema-validator", version.ref = "jsonSchemaValidator" }
104105
julToSlf4j = { module = "org.slf4j:jul-to-slf4j", version.ref = "slf4j" }
105106
junit-bom = { module = "org.junit:junit-bom", version.ref = "junit-jupiter" }
107+
junit = { module = "junit:junit", version.ref = "junit" }
108+
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" }
106109
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }
107110
milo-bsdParserGson = { module = "org.eclipse.milo:bsd-parser-gson", version.ref = "milo" }
108111
milo-client = { module = "org.eclipse.milo:sdk-client", version.ref = "milo" }
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=2025.1-SNAPSHOT
1+
version=2025.8-SNAPSHOT

modules/hivemq-edge-module-databases/src/main/java/com/hivemq/edge/adapters/databases/DatabaseConnection.java

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,63 @@
11
package com.hivemq.edge.adapters.databases;
22

3+
import com.hivemq.edge.adapters.databases.config.DatabaseType;
34
import com.zaxxer.hikari.HikariConfig;
45
import com.zaxxer.hikari.HikariDataSource;
56
import org.jetbrains.annotations.NotNull;
67
import org.jetbrains.annotations.Nullable;
7-
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
810
import java.sql.Connection;
911
import java.sql.SQLException;
1012
import java.util.Properties;
1113

1214
public class DatabaseConnection {
15+
private static final @NotNull Logger log = LoggerFactory.getLogger(DatabaseConnection.class);
1316
private final @NotNull HikariConfig config;
1417
private @Nullable HikariDataSource ds;
1518

16-
public DatabaseConnection(final @NotNull String jdbcUrl, final @NotNull String username, final @NotNull String password, final int connectionTimeout, final boolean encrypt) {
17-
config = new HikariConfig();
18-
config.setJdbcUrl(jdbcUrl);
19-
config.setUsername(username);
20-
config.setPassword(password);
21-
config.setConnectionTimeout(connectionTimeout * 1000L);
19+
public DatabaseConnection(final @NotNull DatabaseType dbType,
20+
final @NotNull String server,
21+
final @NotNull Integer port,
22+
final @NotNull String database,
23+
final @NotNull String username,
24+
final @NotNull String password,
25+
final int connectionTimeout,
26+
final boolean encrypt) {
2227

28+
config = new HikariConfig();
2329

24-
String[] dataSource = config.getJdbcUrl().split(":");
25-
switch (dataSource[1]){
26-
case "mysql", "postgresql" -> {
30+
switch (dbType){
31+
case POSTGRESQL -> {
32+
config.setDataSourceClassName("org.postgresql.ds.PGSimpleDataSource");
33+
config.addDataSourceProperty("serverName", server);
34+
config.addDataSourceProperty("portNumber", port);
35+
config.addDataSourceProperty("databaseName", database);
36+
config.addDataSourceProperty("user", username);
37+
config.addDataSourceProperty("password", password);
38+
config.setConnectionTimeout(connectionTimeout * 2000L);
39+
}
40+
case MYSQL -> {
41+
config.setJdbcUrl(String.format("jdbc:mysql://%s:%s/%s?allowPublicKeyRetrieval=true&useSSL=%s",
42+
server,
43+
port,
44+
database,
45+
encrypt));
46+
config.addDataSourceProperty("user", username);
47+
config.addDataSourceProperty("password", password);
2748
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
2849
config.addDataSourceProperty("cachePrepStmts", "true");
2950
config.addDataSourceProperty("prepStmtCacheSize", "250");
51+
config.setConnectionTimeout(connectionTimeout * 2000L);
3052
}
31-
case "sqlserver" -> {
53+
case MSSQL -> {
3254
config.setDataSourceClassName("com.microsoft.sqlserver.jdbc.SQLServerDataSource");
55+
config.addDataSourceProperty("serverName", server);
56+
config.addDataSourceProperty("portNumber", port);
57+
config.addDataSourceProperty("databaseName", database);
58+
config.addDataSourceProperty("user", username);
59+
config.addDataSourceProperty("password", password);
60+
config.setConnectionTimeout(connectionTimeout * 2000L);
3361
Properties properties = new Properties();
3462
if (encrypt) {
3563
properties.setProperty("encrypt", "true");
@@ -41,6 +69,7 @@ public DatabaseConnection(final @NotNull String jdbcUrl, final @NotNull String u
4169
}
4270

4371
public void connect() {
72+
log.debug("Connection settings : {}", config.toString());
4473
this.ds = new HikariDataSource(config);
4574
}
4675

modules/hivemq-edge-module-databases/src/main/java/com/hivemq/edge/adapters/databases/DatabasesPollingProtocolAdapter.java

Lines changed: 10 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -71,44 +71,17 @@ public DatabasesPollingProtocolAdapter(
7171
this.tags = input.getTags();
7272

7373
log.debug("Building connection string");
74-
String compiledUri = getConnectionString(adapterConfig.getType());
75-
assert compiledUri != null;
76-
log.debug(compiledUri);
77-
this.databaseConnection = new DatabaseConnection(compiledUri,
74+
75+
this.databaseConnection = new DatabaseConnection(adapterConfig.getType(),
76+
adapterConfig.getServer(),
77+
adapterConfig.getPort(),
78+
adapterConfig.getDatabase(),
7879
adapterConfig.getUsername(),
7980
adapterConfig.getPassword(),
8081
adapterConfig.getConnectionTimeout(),
8182
adapterConfig.getEncrypt());
8283
}
8384

84-
private @Nullable String getConnectionString(DatabaseType inputType) {
85-
switch (inputType){
86-
case POSTGRESQL -> {
87-
return String.format("jdbc:postgresql://%s:%s/%s?ssl=%s",
88-
adapterConfig.getServer(),
89-
adapterConfig.getPort(),
90-
adapterConfig.getDatabase(),
91-
adapterConfig.getEncrypt());
92-
}
93-
case MYSQL -> {
94-
return String.format("jdbc:mysql://%s:%s/%s?allowPublicKeyRetrieval=true&useSSL=%s",
95-
adapterConfig.getServer(),
96-
adapterConfig.getPort(),
97-
adapterConfig.getDatabase(),
98-
adapterConfig.getEncrypt());
99-
}
100-
case MSSQL -> {
101-
return String.format("jdbc:sqlserver://%s:%s;databaseName=%s;",
102-
adapterConfig.getServer(),
103-
adapterConfig.getPort(),
104-
adapterConfig.getDatabase());
105-
}
106-
default -> {
107-
return null;
108-
}
109-
}
110-
}
111-
11285
@Override
11386
public @NotNull String getId() {
11487
return adapterId;
@@ -199,9 +172,9 @@ private void loadDataFromDB(final @NotNull PollingOutput output, final @NotNull
199172
log.debug("Getting tag definition");
200173
/* Get the tag definition (Query, RowLimit and Split Lines)*/
201174
final DatabasesAdapterTagDefinition definition = tag.getDefinition();
202-
175+
log.debug("Executing query : {}", definition.getQuery());
203176
/* Execute query and handle result */
204-
final PreparedStatement preparedStatement = connection.prepareStatement(tag.getDefinition().getQuery());
177+
final PreparedStatement preparedStatement = connection.prepareStatement(definition.getQuery());
205178
final ResultSet result = preparedStatement.executeQuery();
206179
assert result != null;
207180
final ArrayList<ObjectNode> resultObject = new ArrayList<>();
@@ -215,7 +188,8 @@ private void loadDataFromDB(final @NotNull PollingOutput output, final @NotNull
215188

216189
/* Publish datapoint with a single line if split is required */
217190
if (definition.getSpiltLinesInIndividualMessages()) {
218-
log.debug("Splitting lines in multiple messages");
191+
log.debug("Creating unique message");
192+
log.debug("Value : {}", node);
219193
output.addDataPoint("queryResult", node);
220194
} else {
221195
resultObject.add(node);
@@ -225,6 +199,7 @@ private void loadDataFromDB(final @NotNull PollingOutput output, final @NotNull
225199
/* Publish datapoint with all lines if no split is required */
226200
if (!definition.getSpiltLinesInIndividualMessages()) {
227201
log.debug("Publishing all lines in a single message");
202+
log.debug("Value : {}", resultObject);
228203
output.addDataPoint("queryResult", resultObject);
229204
}
230205
} catch (final Exception e) {

modules/hivemq-edge-module-databases/src/main/java/com/hivemq/edge/adapters/databases/config/DatabasesAdapterConfig.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,15 +99,13 @@ public class DatabasesAdapterConfig implements ProtocolSpecificAdapterConfig {
9999
@JsonProperty(value = "encrypt")
100100
@ModuleConfigField(title = "Encrypt",
101101
description = "Use TLS to communicate with the remote database",
102-
format = ModuleConfigField.FieldType.BOOLEAN,
103-
required = true)
102+
format = ModuleConfigField.FieldType.BOOLEAN)
104103
protected Boolean encrypt;
105104

106105
@JsonProperty(value = "trustCertificate")
107106
@ModuleConfigField(title = "Trust Certificate",
108107
description = "Do you want to trust remote certificate",
109-
format = ModuleConfigField.FieldType.BOOLEAN,
110-
required = true)
108+
format = ModuleConfigField.FieldType.BOOLEAN)
111109
protected Boolean trustCertificate;
112110

113111
@JsonProperty(value = "connectionTimeoutSeconds")

modules/hivemq-edge-module-databases/src/main/java/com/hivemq/edge/adapters/databases/config/DatabasesAdapterTagDefinition.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ public class DatabasesAdapterTagDefinition implements TagDefinition {
3131
format = ModuleConfigField.FieldType.UNSPECIFIED)
3232
private final @Nullable String query;
3333

34-
@JsonProperty(value = "rowLimit", required = true)
35-
@ModuleConfigField(title = "Row Limit",
36-
description = "Number of row to retrieve (default 10, maximum 99)",
37-
required = true,
38-
numberMin = 1,
39-
numberMax = 99)
40-
private final int rowLimit;
34+
// @JsonProperty(value = "rowLimit", required = true)
35+
// @ModuleConfigField(title = "Row Limit",
36+
// description = "Number of row to retrieve (default 10, maximum 99)",
37+
// required = true,
38+
// numberMin = 1,
39+
// numberMax = 99)
40+
// private final int rowLimit;
4141

4242
@JsonProperty(value = "spiltLinesInIndividualMessages")
4343
@ModuleConfigField(title = "Split lines into individual messages ?",
@@ -51,17 +51,17 @@ public DatabasesAdapterTagDefinition(
5151
@JsonProperty(value = "spiltLinesInIndividualMessages") final @Nullable Boolean spiltLinesInIndividualMessages) {
5252
this.query = query;
5353
assert rowLimit != null;
54-
this.rowLimit = rowLimit;
54+
//this.rowLimit = rowLimit;
5555
this.spiltLinesInIndividualMessages = Objects.requireNonNullElse(spiltLinesInIndividualMessages, false);
5656
}
5757

5858
public @Nullable String getQuery() {
5959
return query;
6060
}
6161

62-
public int getRowLimit() {
63-
return rowLimit;
64-
}
62+
//public int getRowLimit() {
63+
// return rowLimit;
64+
//}
6565

6666
public @NotNull Boolean getSpiltLinesInIndividualMessages() {
6767
return spiltLinesInIndividualMessages;

0 commit comments

Comments
 (0)