Skip to content

Commit 80e1558

Browse files
authored
[DE-452] Typed Config (#480)
* setup MicroProfile Config * replaced ConfigProvider with ArangoConfigProperties * extracted ArangoConfigProperties interface * use HostDescription instead of com.arangodb.config.Host * ArangoConfigProperties.fromFile * fixed shaded integration tests * doc upd
1 parent 7376e47 commit 80e1558

File tree

107 files changed

+1283
-444
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+1283
-444
lines changed

ChangeLog.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
3535

3636
### Added
3737

38-
- added `ArangoDB.Builder.loadProperties(ConfigPropertiesProvider)` to register custom configuration providers
39-
- added `FileConfigPropertiesProvider` to load properties from local files
38+
- added `ArangoDB.Builder.loadProperties(ArangoConfigProperties)` to register custom configuration suppliers
39+
- added `ArangoConfigProperties.fromFile()` to load properties from local files
4040
- added support to `HTTP/2` communication protocol
4141
- added optional transitive dependency on `io.vertx:vertx-web-client` (can be excluded if using VST only)
4242
- added transitive dependency on Jackson Core, Databind and Annotations

docs/v7_detailed_changes.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,17 @@ The default communication protocol is now `HTTP2_JSON` (`HTTP/2` with `JSON` con
4242
The default host configuration to `127.0.0.1:8529` has been removed.
4343

4444
Configuration properties are not read automatically from properties files anymore.
45-
A new API for loading properties has been introduced: `ArangoDB.Builder.loadProperties(ConfigPropertiesProvider)`.
45+
A new API for loading properties has been introduced: `ArangoDB.Builder.loadProperties(ArangoConfigProperties)`.
4646
Implementations could supply configuration properties coming from different sources, eg. system properties, remote
47-
stores, frameworks facilities, etc.
48-
An implementation for loading properties from local files is provided by `FileConfigPropertiesProvider`.
47+
stores, frameworks facilities, etc.
48+
An implementation for loading properties from local files is provided by `ArangoConfigProperties.fromFile()` and its
49+
overloaded variants.
4950

50-
Here is an example to read config properties from `arangodb.properties` file (same behavior as in version `6`):
51+
Here is an example to read config properties from `arangodb.properties` file (as in version `6`):
5152

5253
```java
5354
ArangoDB adb = new ArangoDB.Builder()
54-
.loadProperties(new FileConfigPropertiesProvider())
55+
.loadProperties(ArangoConfigProperties.fromFile())
5556
// ...
5657
.build();
5758
```
@@ -67,10 +68,12 @@ are prefixed with `adb`:
6768
// ...
6869

6970
ArangoDB adb = new ArangoDB.Builder()
70-
.loadProperties(new FileConfigPropertiesProvider("adb", "arangodb-with-prefix.properties"))
71+
.loadProperties(new FileConfigPropertiesProvider("arangodb-with-prefix.properties", "adb"))
7172
.build();
7273
```
7374

75+
An example showing how to provide configuration using Eclipse MicroProfile Config can be found
76+
[here](../driver/src/test/java/com/arangodb/config).
7477

7578
## Transitive dependencies
7679

driver/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,12 @@
251251
<version>1.8</version>
252252
<scope>test</scope>
253253
</dependency>
254+
<dependency>
255+
<groupId>io.smallrye.config</groupId>
256+
<artifactId>smallrye-config-core</artifactId>
257+
<version>3.1.1</version>
258+
<scope>test</scope>
259+
</dependency>
254260
</dependencies>
255261

256262
</project>

driver/src/main/java/com/arangodb/ArangoDB.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020

2121
package com.arangodb;
2222

23-
import com.arangodb.config.ConfigPropertiesProvider;
24-
import com.arangodb.config.ConfigPropertyKey;
23+
import com.arangodb.config.ArangoConfigProperties;
2524
import com.arangodb.entity.*;
2625
import com.arangodb.internal.ArangoDBImpl;
2726
import com.arangodb.internal.ArangoDefaults;
@@ -336,19 +335,12 @@ public interface ArangoDB extends ArangoSerdeAccessor {
336335
*/
337336
class Builder extends InternalArangoDBBuilder {
338337

339-
protected Protocol protocol = ArangoDefaults.DEFAULT_NETWORK_PROTOCOL;
340-
341338
public Builder() {
342339
super();
343340
}
344341

345-
private static Protocol loadProtocol(final ConfigPropertiesProvider properties, final Protocol currentValue) {
346-
return Protocol.valueOf(getProperty(properties, ConfigPropertyKey.PROTOCOL, currentValue).toUpperCase(Locale.ROOT));
347-
}
348-
349-
public Builder loadProperties(final ConfigPropertiesProvider properties) {
342+
public Builder loadProperties(final ArangoConfigProperties properties) {
350343
doLoadProperties(properties);
351-
protocol = loadProtocol(properties, protocol);
352344
return this;
353345
}
354346

driver/src/main/java/com/arangodb/async/ArangoDBAsync.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import com.arangodb.async.internal.ArangoDBAsyncImpl;
2525
import com.arangodb.async.internal.velocystream.VstCommunicationAsync;
2626
import com.arangodb.async.internal.velocystream.VstConnectionFactoryAsync;
27-
import com.arangodb.config.ConfigPropertiesProvider;
27+
import com.arangodb.config.ArangoConfigProperties;
2828
import com.arangodb.entity.*;
2929
import com.arangodb.internal.ArangoDefaults;
3030
import com.arangodb.internal.InternalArangoDBBuilder;
@@ -315,7 +315,7 @@ public Builder() {
315315
super();
316316
}
317317

318-
public Builder loadProperties(final ConfigPropertiesProvider config) {
318+
public Builder loadProperties(final ArangoConfigProperties config) {
319319
super.doLoadProperties(config);
320320
return this;
321321
}

driver/src/main/java/com/arangodb/async/internal/velocystream/VstCommunicationAsync.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import com.arangodb.ArangoDBException;
2424
import com.arangodb.internal.net.ArangoDBRedirectException;
25-
import com.arangodb.internal.net.HostDescription;
25+
import com.arangodb.config.HostDescription;
2626
import com.arangodb.internal.net.HostHandle;
2727
import com.arangodb.internal.net.HostHandler;
2828
import com.arangodb.internal.serde.InternalSerde;

driver/src/main/java/com/arangodb/async/internal/velocystream/VstConnectionAsync.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
package com.arangodb.async.internal.velocystream;
2222

2323
import com.arangodb.async.internal.utils.CompletableFutureUtils;
24-
import com.arangodb.internal.net.HostDescription;
24+
import com.arangodb.config.HostDescription;
2525
import com.arangodb.internal.velocystream.internal.Chunk;
2626
import com.arangodb.internal.velocystream.internal.Message;
2727
import com.arangodb.internal.velocystream.internal.MessageStore;

driver/src/main/java/com/arangodb/async/internal/velocystream/VstConnectionFactoryAsync.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import com.arangodb.internal.net.Connection;
2424
import com.arangodb.internal.net.ConnectionFactory;
25-
import com.arangodb.internal.net.HostDescription;
25+
import com.arangodb.config.HostDescription;
2626
import com.arangodb.internal.velocystream.internal.MessageStore;
2727

2828
import javax.net.ssl.SSLContext;
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package com.arangodb.config;
2+
3+
import com.arangodb.Protocol;
4+
import com.arangodb.entity.LoadBalancingStrategy;
5+
import com.arangodb.internal.config.ArangoConfigPropertiesImpl;
6+
7+
import java.util.List;
8+
import java.util.Optional;
9+
10+
public interface ArangoConfigProperties {
11+
12+
/**
13+
* Reads properties from file arangodb.properties.
14+
* Properties must be prefixed with @{code "arangodb"}, eg. @{code "arangodb.hosts=localhost:8529"}.
15+
*/
16+
static ArangoConfigProperties fromFile() {
17+
return new ArangoConfigPropertiesImpl();
18+
}
19+
20+
/**
21+
* Reads properties from file {@code fileName}.
22+
* Properties must be prefixed with @{code "arangodb"}, eg. @{code "arangodb.hosts=localhost:8529"}.
23+
*/
24+
static ArangoConfigProperties fromFile(final String fileName) {
25+
return new ArangoConfigPropertiesImpl(fileName);
26+
}
27+
28+
/**
29+
* Reads properties from file {@code fileName}.
30+
* Properties must be prefixed with @{code prefix}, eg. @{code "<prefix>.hosts=localhost:8529"}.
31+
*/
32+
static ArangoConfigProperties fromFile(final String fileName, final String prefix) {
33+
return new ArangoConfigPropertiesImpl(fileName, prefix);
34+
}
35+
36+
default Optional<List<HostDescription>> getHosts() {
37+
return Optional.empty();
38+
}
39+
40+
default Optional<Protocol> getProtocol() {
41+
return Optional.empty();
42+
}
43+
44+
default Optional<String> getUser() {
45+
return Optional.empty();
46+
}
47+
48+
default Optional<String> getPassword() {
49+
return Optional.empty();
50+
}
51+
52+
default Optional<String> getJwt() {
53+
return Optional.empty();
54+
}
55+
56+
default Optional<Integer> getTimeout() {
57+
return Optional.empty();
58+
}
59+
60+
default Optional<Boolean> getUseSsl() {
61+
return Optional.empty();
62+
}
63+
64+
default Optional<Boolean> getVerifyHost() {
65+
return Optional.empty();
66+
}
67+
68+
default Optional<Integer> getChunkSize() {
69+
return Optional.empty();
70+
}
71+
72+
default Optional<Integer> getMaxConnections() {
73+
return Optional.empty();
74+
}
75+
76+
default Optional<Long> getConnectionTtl() {
77+
return Optional.empty();
78+
}
79+
80+
default Optional<Integer> getKeepAliveInterval() {
81+
return Optional.empty();
82+
}
83+
84+
default Optional<Boolean> getAcquireHostList() {
85+
return Optional.empty();
86+
}
87+
88+
default Optional<Integer> getAcquireHostListInterval() {
89+
return Optional.empty();
90+
}
91+
92+
default Optional<LoadBalancingStrategy> getLoadBalancingStrategy() {
93+
return Optional.empty();
94+
}
95+
96+
default Optional<Integer> getResponseQueueTimeSamples() {
97+
return Optional.empty();
98+
}
99+
100+
}

driver/src/main/java/com/arangodb/config/ConfigPropertiesProvider.java

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)