diff --git a/ChangeLog.md b/ChangeLog.md index df64c397b..09a65730a 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -6,7 +6,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a ## [Unreleased] -## [7.0.0-ALPHA.1] +## [7.0.0-ALPHA.2] ### Changed diff --git a/core/pom.xml b/core/pom.xml new file mode 100644 index 000000000..2ea81eb5c --- /dev/null +++ b/core/pom.xml @@ -0,0 +1,91 @@ + + + 4.0.0 + + com.arangodb + arangodb-java-driver-parent + 7.0.0-ALPHA.2 + + + core + core + Core module for ArangoDB Java Driver + + + com.arangodb.core + + + + + org.slf4j + slf4j-api + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-annotations + + + com.google.code.findbugs + jsr305 + 3.0.2 + provided + + + + + + + com.google.code.maven-replacer-plugin + replacer + 1.5.3 + + + generate-sources + + replace + + + + + ${project.basedir}/src/main/java/com/arangodb/PackageVersion.java.in + ${project.build.directory}/generated-sources/replacer/com/arangodb/PackageVersion.java + + + + @project.version@ + ${project.version} + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.3.0 + + + generate-sources + + add-source + + + + ${project.build.directory}/generated-sources/replacer + + + + + + + + \ No newline at end of file diff --git a/driver/src/main/java/com/arangodb/ArangoCollection.java b/core/src/main/java/com/arangodb/ArangoCollection.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoCollection.java rename to core/src/main/java/com/arangodb/ArangoCollection.java diff --git a/driver/src/main/java/com/arangodb/ArangoCursor.java b/core/src/main/java/com/arangodb/ArangoCursor.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoCursor.java rename to core/src/main/java/com/arangodb/ArangoCursor.java diff --git a/driver/src/main/java/com/arangodb/ArangoDB.java b/core/src/main/java/com/arangodb/ArangoDB.java similarity index 51% rename from driver/src/main/java/com/arangodb/ArangoDB.java rename to core/src/main/java/com/arangodb/ArangoDB.java index 5533c9bef..1a22d50c3 100644 --- a/driver/src/main/java/com/arangodb/ArangoDB.java +++ b/core/src/main/java/com/arangodb/ArangoDB.java @@ -20,32 +20,17 @@ package com.arangodb; -import com.arangodb.config.ArangoConfigProperties; import com.arangodb.entity.*; import com.arangodb.internal.ArangoDBImpl; -import com.arangodb.internal.ArangoDefaults; import com.arangodb.internal.InternalArangoDBBuilder; -import com.arangodb.internal.http.HttpCommunication; -import com.arangodb.internal.http.HttpConnectionFactory; -import com.arangodb.internal.net.ConnectionFactory; -import com.arangodb.internal.net.Host; -import com.arangodb.internal.net.HostHandler; -import com.arangodb.internal.net.HostResolver; -import com.arangodb.internal.serde.ContentTypeFactory; -import com.arangodb.internal.serde.InternalSerde; -import com.arangodb.internal.serde.InternalSerdeProvider; -import com.arangodb.internal.velocystream.VstCommunicationSync; -import com.arangodb.internal.velocystream.VstConnectionFactorySync; +import com.arangodb.internal.net.*; import com.arangodb.model.DBCreateOptions; import com.arangodb.model.LogOptions; import com.arangodb.model.UserCreateOptions; import com.arangodb.model.UserUpdateOptions; -import com.arangodb.serde.ArangoSerde; import javax.annotation.concurrent.ThreadSafe; -import javax.net.ssl.SSLContext; import java.util.Collection; -import java.util.Locale; /** * Central access point for applications to communicate with an ArangoDB server. @@ -333,238 +318,10 @@ public interface ArangoDB extends ArangoSerdeAccessor { * * @author Mark Vollmary */ - class Builder extends InternalArangoDBBuilder { - - public Builder() { - super(); - } - - public Builder loadProperties(final ArangoConfigProperties properties) { - doLoadProperties(properties); - return this; - } + class Builder extends InternalArangoDBBuilder { public Builder useProtocol(final Protocol protocol) { - this.protocol = protocol; - return this; - } - - /** - * Adds a host to connect to. Multiple hosts can be added to provide fallbacks. - * - * @param host address of the host - * @param port port of the host - * @return {@link ArangoDB.Builder} - */ - public Builder host(final String host, final int port) { - setHost(host, port); - return this; - } - - /** - * Sets the connection and request timeout in milliseconds. - * - * @param timeout timeout in milliseconds - * @return {@link ArangoDB.Builder} - */ - public Builder timeout(final Integer timeout) { - setTimeout(timeout); - return this; - } - - /** - * Sets the username to use for authentication. - * - * @param user the user in the database (default: {@code root}) - * @return {@link ArangoDB.Builder} - */ - public Builder user(final String user) { - setUser(user); - return this; - } - - /** - * Sets the password for the user for authentication. - * - * @param password the password of the user in the database (default: {@code null}) - * @return {@link ArangoDB.Builder} - */ - public Builder password(final String password) { - setPassword(password); - return this; - } - - /** - * Sets the JWT for the user authentication. - * - * @param jwt token to use (default: {@code null}) - * @return {@link ArangoDB.Builder} - */ - public Builder jwt(final String jwt) { - setJwt(jwt); - return this; - } - - /** - * If set to {@code true} SSL will be used when connecting to an ArangoDB server. - * - * @param useSsl whether or not use SSL (default: {@code false}) - * @return {@link ArangoDB.Builder} - */ - public Builder useSsl(final Boolean useSsl) { - setUseSsl(useSsl); - return this; - } - - /** - * Sets the SSL context to be used when {@code true} is passed through {@link #useSsl(Boolean)}. - * - * @param sslContext SSL context to be used - * @return {@link ArangoDB.Builder} - */ - public Builder sslContext(final SSLContext sslContext) { - setSslContext(sslContext); - return this; - } - - /** - * Set whether hostname verification is enabled - * - * @param verifyHost {@code true} if enabled - * @return {@link ArangoDB.Builder} - */ - public Builder verifyHost(final Boolean verifyHost) { - setVerifyHost(verifyHost); - return this; - } - - /** - * Sets the chunk size when {@link Protocol#VST} is used. - * - * @param chunksize size of a chunk in bytes - * @return {@link ArangoDB.Builder} - */ - public Builder chunksize(final Integer chunksize) { - setChunkSize(chunksize); - return this; - } - - /** - * Sets the maximum number of connections the built in connection pool will open per host. - * - *

- * Defaults: - *

- * - *
-         * {@link Protocol#VST} == 1
-         * {@link Protocol#HTTP_JSON} == 20
-         * {@link Protocol#HTTP_VPACK} == 20
-         * 
- * - * @param maxConnections max number of connections - * @return {@link ArangoDB.Builder} - */ - public Builder maxConnections(final Integer maxConnections) { - setMaxConnections(maxConnections); - return this; - } - - /** - * Set the maximum time to life of a connection. After this time the connection will be closed automatically. - * - * @param connectionTtl the maximum time to life of a connection in milliseconds - * @return {@link ArangoDB.Builder} - */ - public Builder connectionTtl(final Long connectionTtl) { - setConnectionTtl(connectionTtl); - return this; - } - - /** - * Set the keep-alive interval for VST connections. If set, every VST connection will perform a no-op request - * every {@code keepAliveInterval} seconds, to avoid to be closed due to inactivity by the server (or by the - * external environment, eg. firewall, intermediate routers, operating system). - * - * @param keepAliveInterval interval in seconds - * @return {@link ArangoDB.Builder} - */ - public Builder keepAliveInterval(final Integer keepAliveInterval) { - setKeepAliveInterval(keepAliveInterval); - return this; - } - - /** - * Whether or not the driver should acquire a list of available coordinators in an ArangoDB cluster or a single - * server with active failover. In case of Active-Failover deployment set to {@code true} to enable automatic - * master discovery. - * - *

- * The host list will be used for failover and load balancing. - *

- * - * @param acquireHostList whether or not automatically acquire a list of available hosts (default: false) - * @return {@link ArangoDB.Builder} - */ - public Builder acquireHostList(final Boolean acquireHostList) { - setAcquireHostList(acquireHostList); - return this; - } - - /** - * Setting the Interval for acquireHostList - * - * @param acquireHostListInterval Interval in milliseconds - * @return {@link ArangoDB.Builder} - */ - public Builder acquireHostListInterval(final Integer acquireHostListInterval) { - setAcquireHostListInterval(acquireHostListInterval); - return this; - } - - /** - * Sets the load balancing strategy to be used in an ArangoDB cluster setup. In case of Active-Failover - * deployment set to {@link LoadBalancingStrategy#NONE} or not set at all, since that would be the default. - * - * @param loadBalancingStrategy the load balancing strategy to be used (default: - * {@link LoadBalancingStrategy#NONE} - * @return {@link ArangoDB.Builder} - */ - public Builder loadBalancingStrategy(final LoadBalancingStrategy loadBalancingStrategy) { - setLoadBalancingStrategy(loadBalancingStrategy); - return this; - } - - /** - * Setting the amount of samples kept for queue time metrics - * - * @param responseQueueTimeSamples amount of samples to keep - * @return {@link ArangoDB.Builder} - */ - public Builder responseQueueTimeSamples(final Integer responseQueueTimeSamples) { - setResponseQueueTimeSamples(responseQueueTimeSamples); - return this; - } - - /** - * Sets the serde for the user data. - * This is used to serialize and deserialize all the data payload such as: - * - documents, vertexes, edges - * - AQL bind vars - * - body payload of requests and responses in {@link ArangoDB#execute(Request, Class)} - *

- * However, note that the following types will always be serialized and deserialized using the internal serde: - * - {@link com.fasterxml.jackson.databind.JsonNode} - * - {@link com.arangodb.util.RawJson} - * - {@link com.arangodb.util.RawBytes} - * - {@link com.arangodb.entity.BaseDocument} - * - {@link com.arangodb.entity.BaseEdgeDocument} - * - * @param serde custom serde for the user data - * @return {@link ArangoDB.Builder} - */ - public Builder serde(final ArangoSerde serde) { - setUserDataSerde(serde); + config.setProtocol(protocol); return this; } @@ -574,53 +331,25 @@ public Builder serde(final ArangoSerde serde) { * @return {@link ArangoDB} */ public ArangoDB build() { - if (hosts.isEmpty()) { + if (config.getHosts().isEmpty()) { throw new ArangoDBException("No host has been set!"); } - final ArangoSerde userSerde = this.userDataSerde != null ? this.userDataSerde : - serdeProvider().of(ContentTypeFactory.of(protocol)); - final InternalSerde serde = InternalSerdeProvider.create(ContentTypeFactory.of(protocol), userSerde); - - int protocolMaxConnections; - switch (protocol) { - case VST: - protocolMaxConnections = ArangoDefaults.MAX_CONNECTIONS_VST_DEFAULT; - break; - case HTTP_JSON: - case HTTP_VPACK: - protocolMaxConnections = ArangoDefaults.MAX_CONNECTIONS_HTTP_DEFAULT; - break; - case HTTP2_JSON: - case HTTP2_VPACK: - protocolMaxConnections = ArangoDefaults.MAX_CONNECTIONS_HTTP2_DEFAULT; - break; - default: - throw new IllegalArgumentException(); - } - - final int max = maxConnections != null ? Math.max(1, maxConnections) : protocolMaxConnections; - - final ConnectionFactory connectionFactory = Protocol.VST == protocol - ? new VstConnectionFactorySync(timeout, connectionTtl, keepAliveInterval, useSsl, sslContext) - : new HttpConnectionFactory(timeout, user, password, useSsl, sslContext, verifyHost, serde, - protocol, connectionTtl); + ProtocolProvider protocolProvider = protocolProvider(config.getProtocol()); + config.setProtocolModule(protocolProvider.protocolModule()); - final Collection hostList = createHostList(max, connectionFactory); - final HostResolver hostResolver = createHostResolver(hostList, max, connectionFactory); - final HostHandler hostHandler = createHostHandler(hostResolver); - hostHandler.setJwt(jwt); + ConnectionFactory connectionFactory = protocolProvider.createConnectionFactory(); + Collection hostList = createHostList(connectionFactory); + HostResolver hostResolver = createHostResolver(hostList, connectionFactory); + HostHandler hostHandler = createHostHandler(hostResolver); + hostHandler.setJwt(config.getJwt()); return new ArangoDBImpl( - new VstCommunicationSync.Builder(hostHandler).timeout(timeout).user(user).password(password) - .jwt(jwt).useSsl(useSsl).sslContext(sslContext).chunksize(chunkSize) - .maxConnections(maxConnections).connectionTtl(connectionTtl), - new HttpCommunication.Builder().hostHandler(hostHandler), - serde, - protocol, + config, hostResolver, - hostHandler, - responseQueueTimeSamples, timeout); + protocolProvider, + hostHandler + ); } } diff --git a/driver/src/main/java/com/arangodb/ArangoDBException.java b/core/src/main/java/com/arangodb/ArangoDBException.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoDBException.java rename to core/src/main/java/com/arangodb/ArangoDBException.java diff --git a/driver/src/main/java/com/arangodb/ArangoDBMultipleException.java b/core/src/main/java/com/arangodb/ArangoDBMultipleException.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoDBMultipleException.java rename to core/src/main/java/com/arangodb/ArangoDBMultipleException.java diff --git a/driver/src/main/java/com/arangodb/ArangoDatabase.java b/core/src/main/java/com/arangodb/ArangoDatabase.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoDatabase.java rename to core/src/main/java/com/arangodb/ArangoDatabase.java diff --git a/driver/src/main/java/com/arangodb/ArangoEdgeCollection.java b/core/src/main/java/com/arangodb/ArangoEdgeCollection.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoEdgeCollection.java rename to core/src/main/java/com/arangodb/ArangoEdgeCollection.java diff --git a/driver/src/main/java/com/arangodb/ArangoGraph.java b/core/src/main/java/com/arangodb/ArangoGraph.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoGraph.java rename to core/src/main/java/com/arangodb/ArangoGraph.java diff --git a/driver/src/main/java/com/arangodb/ArangoIterable.java b/core/src/main/java/com/arangodb/ArangoIterable.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoIterable.java rename to core/src/main/java/com/arangodb/ArangoIterable.java diff --git a/driver/src/main/java/com/arangodb/ArangoIterator.java b/core/src/main/java/com/arangodb/ArangoIterator.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoIterator.java rename to core/src/main/java/com/arangodb/ArangoIterator.java diff --git a/driver/src/main/java/com/arangodb/ArangoMetrics.java b/core/src/main/java/com/arangodb/ArangoMetrics.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoMetrics.java rename to core/src/main/java/com/arangodb/ArangoMetrics.java diff --git a/driver/src/main/java/com/arangodb/ArangoSearch.java b/core/src/main/java/com/arangodb/ArangoSearch.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoSearch.java rename to core/src/main/java/com/arangodb/ArangoSearch.java diff --git a/driver/src/main/java/com/arangodb/ArangoSerdeAccessor.java b/core/src/main/java/com/arangodb/ArangoSerdeAccessor.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoSerdeAccessor.java rename to core/src/main/java/com/arangodb/ArangoSerdeAccessor.java diff --git a/driver/src/main/java/com/arangodb/ArangoVertexCollection.java b/core/src/main/java/com/arangodb/ArangoVertexCollection.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoVertexCollection.java rename to core/src/main/java/com/arangodb/ArangoVertexCollection.java diff --git a/driver/src/main/java/com/arangodb/ArangoView.java b/core/src/main/java/com/arangodb/ArangoView.java similarity index 100% rename from driver/src/main/java/com/arangodb/ArangoView.java rename to core/src/main/java/com/arangodb/ArangoView.java diff --git a/serde-api/src/main/java/com/arangodb/ContentType.java b/core/src/main/java/com/arangodb/ContentType.java similarity index 100% rename from serde-api/src/main/java/com/arangodb/ContentType.java rename to core/src/main/java/com/arangodb/ContentType.java diff --git a/driver/src/main/java/com/arangodb/DbName.java b/core/src/main/java/com/arangodb/DbName.java similarity index 100% rename from driver/src/main/java/com/arangodb/DbName.java rename to core/src/main/java/com/arangodb/DbName.java diff --git a/driver/src/main/java/com/arangodb/PackageVersion.java.in b/core/src/main/java/com/arangodb/PackageVersion.java.in similarity index 100% rename from driver/src/main/java/com/arangodb/PackageVersion.java.in rename to core/src/main/java/com/arangodb/PackageVersion.java.in diff --git a/driver/src/main/java/com/arangodb/Protocol.java b/core/src/main/java/com/arangodb/Protocol.java similarity index 100% rename from driver/src/main/java/com/arangodb/Protocol.java rename to core/src/main/java/com/arangodb/Protocol.java diff --git a/driver/src/main/java/com/arangodb/QueueTimeMetrics.java b/core/src/main/java/com/arangodb/QueueTimeMetrics.java similarity index 100% rename from driver/src/main/java/com/arangodb/QueueTimeMetrics.java rename to core/src/main/java/com/arangodb/QueueTimeMetrics.java diff --git a/driver/src/main/java/com/arangodb/Request.java b/core/src/main/java/com/arangodb/Request.java similarity index 100% rename from driver/src/main/java/com/arangodb/Request.java rename to core/src/main/java/com/arangodb/Request.java diff --git a/driver/src/main/java/com/arangodb/Response.java b/core/src/main/java/com/arangodb/Response.java similarity index 100% rename from driver/src/main/java/com/arangodb/Response.java rename to core/src/main/java/com/arangodb/Response.java diff --git a/driver/src/main/java/com/arangodb/SearchAlias.java b/core/src/main/java/com/arangodb/SearchAlias.java similarity index 100% rename from driver/src/main/java/com/arangodb/SearchAlias.java rename to core/src/main/java/com/arangodb/SearchAlias.java diff --git a/driver/src/main/java/com/arangodb/async/ArangoCollectionAsync.java b/core/src/main/java/com/arangodb/async/ArangoCollectionAsync.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/ArangoCollectionAsync.java rename to core/src/main/java/com/arangodb/async/ArangoCollectionAsync.java diff --git a/driver/src/main/java/com/arangodb/async/ArangoCursorAsync.java b/core/src/main/java/com/arangodb/async/ArangoCursorAsync.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/ArangoCursorAsync.java rename to core/src/main/java/com/arangodb/async/ArangoCursorAsync.java diff --git a/driver/src/main/java/com/arangodb/async/ArangoDBAsync.java b/core/src/main/java/com/arangodb/async/ArangoDBAsync.java similarity index 54% rename from driver/src/main/java/com/arangodb/async/ArangoDBAsync.java rename to core/src/main/java/com/arangodb/async/ArangoDBAsync.java index 46ab0d422..98386c500 100644 --- a/driver/src/main/java/com/arangodb/async/ArangoDBAsync.java +++ b/core/src/main/java/com/arangodb/async/ArangoDBAsync.java @@ -22,28 +22,17 @@ import com.arangodb.*; import com.arangodb.async.internal.ArangoDBAsyncImpl; -import com.arangodb.async.internal.velocystream.VstCommunicationAsync; -import com.arangodb.async.internal.velocystream.VstConnectionFactoryAsync; -import com.arangodb.config.ArangoConfigProperties; import com.arangodb.entity.*; -import com.arangodb.internal.ArangoDefaults; import com.arangodb.internal.InternalArangoDBBuilder; -import com.arangodb.internal.net.ConnectionFactory; -import com.arangodb.internal.net.HostHandler; -import com.arangodb.internal.net.HostResolver; -import com.arangodb.internal.serde.InternalSerde; -import com.arangodb.internal.serde.InternalSerdeProvider; -import com.arangodb.internal.velocystream.VstCommunicationSync; -import com.arangodb.internal.velocystream.VstConnectionFactorySync; +import com.arangodb.internal.net.*; import com.arangodb.model.DBCreateOptions; import com.arangodb.model.LogOptions; import com.arangodb.model.UserCreateOptions; import com.arangodb.model.UserUpdateOptions; -import com.arangodb.serde.ArangoSerde; import javax.annotation.concurrent.ThreadSafe; -import javax.net.ssl.SSLContext; import java.util.Collection; +import java.util.ServiceLoader; import java.util.concurrent.CompletableFuture; /** @@ -276,8 +265,7 @@ public interface ArangoDBAsync extends ArangoSerdeAccessor { * * @param options Additional options, can be null * @return the log messages - * @see - * API + * @see API * Documentation * @since ArangoDB 3.8 */ @@ -309,201 +297,16 @@ public interface ArangoDBAsync extends ArangoSerdeAccessor { * * @author Mark Vollmary */ - class Builder extends InternalArangoDBBuilder { - - public Builder() { - super(); - } - - public Builder loadProperties(final ArangoConfigProperties config) { - super.doLoadProperties(config); - return this; - } - - /** - * Adds a host to connect to. Multiple hosts can be added to provide fallbacks. - * - * @param host address of the host - * @param port port of the host - * @return {@link ArangoDBAsync.Builder} - */ - public Builder host(final String host, final int port) { - setHost(host, port); - return this; - } - - /** - * Sets the timeout in milliseconds. It is used as socket timeout when opening a VecloyStream. - * - * @param timeout timeout in milliseconds - * @return {@link ArangoDBAsync.Builder} - */ - public Builder timeout(final Integer timeout) { - setTimeout(timeout); - return this; - } - - /** - * Sets the username to use for authentication. - * - * @param user the user in the database (default: root) - * @return {@link ArangoDBAsync.Builder} - */ - public Builder user(final String user) { - setUser(user); - return this; - } - - /** - * Sets the password for the user for authentication. - * - * @param password the password of the user in the database (default: null) - * @return {@link ArangoDBAsync.Builder} - */ - public Builder password(final String password) { - setPassword(password); - return this; - } - - /** - * Sets the JWT for the user authentication. - * - * @param jwt token to use (default: {@code null}) - * @return {@link ArangoDBAsync.Builder} - */ - public Builder jwt(final String jwt) { - setJwt(jwt); - return this; - } - - /** - * If set to true SSL will be used when connecting to an ArangoDB server. - * - * @param useSsl whether or not use SSL (default: false) - * @return {@link ArangoDBAsync.Builder} - */ - public Builder useSsl(final Boolean useSsl) { - setUseSsl(useSsl); - return this; - } - - /** - * Sets the SSL context to be used when true is passed through {@link #useSsl(Boolean)}. - * - * @param sslContext SSL context to be used - * @return {@link ArangoDBAsync.Builder} - */ - public Builder sslContext(final SSLContext sslContext) { - setSslContext(sslContext); - return this; - } - - /** - * Sets the chunk size when {@link Protocol#VST} is used. - * - * @param chunksize size of a chunk in bytes - * @return {@link ArangoDBAsync.Builder} - */ - public Builder chunksize(final Integer chunksize) { - setChunkSize(chunksize); - return this; - } - - /** - * Sets the maximum number of connections the built in connection pool will open. - * - *

- * In an ArangoDB cluster setup with {@link LoadBalancingStrategy#ROUND_ROBIN} set, this value should be at - * least as high as the number of ArangoDB coordinators in the cluster. - *

- * - * @param maxConnections max number of connections (default: 1) - * @return {@link ArangoDBAsync.Builder} - */ - public Builder maxConnections(final Integer maxConnections) { - setMaxConnections(maxConnections); - return this; - } - - /** - * Set the maximum time to life of a connection. After this time the connection will be closed automatically. - * - * @param connectionTtl the maximum time to life of a connection. - * @return {@link ArangoDBAsync.Builder} - */ - public Builder connectionTtl(final Long connectionTtl) { - setConnectionTtl(connectionTtl); - return this; - } - - /** - * Set the keep-alive interval for VST connections. If set, every VST connection will perform a no-op request - * every - * {@code keepAliveInterval} seconds, to avoid to be closed due to inactivity by the server (or by the external - * environment, eg. firewall, intermediate routers, operating system). - * - * @param keepAliveInterval interval in seconds - * @return {@link ArangoDBAsync.Builder} - */ - public Builder keepAliveInterval(final Integer keepAliveInterval) { - setKeepAliveInterval(keepAliveInterval); - return this; - } - - /** - * Whether or not the driver should acquire a list of available coordinators in an ArangoDB cluster or a single - * server with active failover. - * In case of Active-Failover deployment set to {@code true} to enable automatic master discovery. - * - *

- * The host list will be used for failover and load balancing. - *

- * - * @param acquireHostList whether or not automatically acquire a list of available hosts (default: false) - * @return {@link ArangoDBAsync.Builder} - */ - public Builder acquireHostList(final Boolean acquireHostList) { - setAcquireHostList(acquireHostList); - return this; - } - - /** - * Setting the amount of samples kept for queue time metrics - * - * @param responseQueueTimeSamples amount of samples to keep - * @return {@link ArangoDBAsync.Builder} - */ - public Builder responseQueueTimeSamples(final Integer responseQueueTimeSamples) { - setResponseQueueTimeSamples(responseQueueTimeSamples); - return this; - } - - /** - * Sets the load balancing strategy to be used in an ArangoDB cluster setup. - * In case of Active-Failover deployment set to {@link LoadBalancingStrategy#NONE} or not set at all, since that - * would be the default. - * - * @param loadBalancingStrategy the load balancing strategy to be used (default: - * {@link LoadBalancingStrategy#NONE} - * @return {@link ArangoDBAsync.Builder} - */ - public Builder loadBalancingStrategy(final LoadBalancingStrategy loadBalancingStrategy) { - setLoadBalancingStrategy(loadBalancingStrategy); - return this; - } - - /** - * Replace the built-in serializer/deserializer with the given one. - *

- *
- * ATTENTION!: Any registered custom serializer/deserializer or module will be ignored. - * - * @param serialization custom serializer/deserializer - * @return {@link ArangoDBAsync.Builder} - */ - public Builder serializer(final ArangoSerde serialization) { - setUserDataSerde(serialization); - return this; + class Builder extends InternalArangoDBBuilder { + + private AsyncProtocolProvider asyncProtocolProvider(Protocol protocol) { + ServiceLoader loader = ServiceLoader.load(AsyncProtocolProvider.class); + for (AsyncProtocolProvider p : loader) { + if (p.supportsProtocol(protocol)) { + return p; + } + } + throw new ArangoDBException("No ProtocolProvider found for protocol: " + protocol); } /** @@ -512,48 +315,31 @@ public Builder serializer(final ArangoSerde serialization) { * @return {@link ArangoDBAsync} */ public ArangoDBAsync build() { - if (hosts.isEmpty()) { + if (config.getHosts().isEmpty()) { throw new ArangoDBException("No host has been set!"); } - final ArangoSerde userSerde = this.userDataSerde != null ? this.userDataSerde : serdeProvider().of(ContentType.VPACK); - final InternalSerde serde = InternalSerdeProvider.create(ContentType.VPACK, userSerde); - - final int max = maxConnections != null ? Math.max(1, maxConnections) - : ArangoDefaults.MAX_CONNECTIONS_VST_DEFAULT; - final ConnectionFactory syncConnectionFactory = new VstConnectionFactorySync(timeout, connectionTtl, - keepAliveInterval, useSsl, sslContext); - final ConnectionFactory asyncConnectionFactory = new VstConnectionFactoryAsync(timeout, connectionTtl, - keepAliveInterval, useSsl, sslContext); - final HostResolver syncHostResolver = createHostResolver(createHostList(max, syncConnectionFactory), max, - syncConnectionFactory); - final HostResolver asyncHostResolver = createHostResolver(createHostList(max, asyncConnectionFactory), max, - asyncConnectionFactory); - final HostHandler syncHostHandler = createHostHandler(syncHostResolver); + AsyncProtocolProvider asyncProtocolProvider = asyncProtocolProvider(Protocol.VST); + ProtocolProvider protocolProvider = protocolProvider(Protocol.VST); + + config.setProtocol(Protocol.VST); + config.setProtocolModule(asyncProtocolProvider.protocolModule()); + + final ConnectionFactory asyncConnectionFactory = asyncProtocolProvider.createConnectionFactory(); + final ConnectionFactory syncConnectionFactory = protocolProvider.createConnectionFactory(); + final HostResolver asyncHostResolver = createHostResolver(createHostList(asyncConnectionFactory), asyncConnectionFactory); + final HostResolver syncHostResolver = createHostResolver(createHostList(syncConnectionFactory), syncConnectionFactory); final HostHandler asyncHostHandler = createHostHandler(asyncHostResolver); + final HostHandler syncHostHandler = createHostHandler(syncHostResolver); return new ArangoDBAsyncImpl( - asyncBuilder(asyncHostHandler), - serde, - syncBuilder(syncHostHandler), + config, asyncHostResolver, syncHostResolver, + asyncProtocolProvider, + protocolProvider, asyncHostHandler, - syncHostHandler, - responseQueueTimeSamples, - timeout); + syncHostHandler + ); } - - private VstCommunicationAsync.Builder asyncBuilder(final HostHandler hostHandler) { - return new VstCommunicationAsync.Builder(hostHandler).timeout(timeout).user(user).password(password) - .jwt(jwt).useSsl(useSsl).sslContext(sslContext).chunksize(chunkSize).maxConnections(maxConnections) - .connectionTtl(connectionTtl); - } - - private VstCommunicationSync.Builder syncBuilder(final HostHandler hostHandler) { - return new VstCommunicationSync.Builder(hostHandler).timeout(timeout).user(user).password(password) - .jwt(jwt).useSsl(useSsl).sslContext(sslContext).chunksize(chunkSize).maxConnections(maxConnections) - .connectionTtl(connectionTtl); - } - } } diff --git a/driver/src/main/java/com/arangodb/async/ArangoDatabaseAsync.java b/core/src/main/java/com/arangodb/async/ArangoDatabaseAsync.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/ArangoDatabaseAsync.java rename to core/src/main/java/com/arangodb/async/ArangoDatabaseAsync.java diff --git a/driver/src/main/java/com/arangodb/async/ArangoEdgeCollectionAsync.java b/core/src/main/java/com/arangodb/async/ArangoEdgeCollectionAsync.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/ArangoEdgeCollectionAsync.java rename to core/src/main/java/com/arangodb/async/ArangoEdgeCollectionAsync.java diff --git a/driver/src/main/java/com/arangodb/async/ArangoGraphAsync.java b/core/src/main/java/com/arangodb/async/ArangoGraphAsync.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/ArangoGraphAsync.java rename to core/src/main/java/com/arangodb/async/ArangoGraphAsync.java diff --git a/driver/src/main/java/com/arangodb/async/ArangoRouteAsync.java b/core/src/main/java/com/arangodb/async/ArangoRouteAsync.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/ArangoRouteAsync.java rename to core/src/main/java/com/arangodb/async/ArangoRouteAsync.java diff --git a/driver/src/main/java/com/arangodb/async/ArangoSearchAsync.java b/core/src/main/java/com/arangodb/async/ArangoSearchAsync.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/ArangoSearchAsync.java rename to core/src/main/java/com/arangodb/async/ArangoSearchAsync.java diff --git a/driver/src/main/java/com/arangodb/async/ArangoVertexCollectionAsync.java b/core/src/main/java/com/arangodb/async/ArangoVertexCollectionAsync.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/ArangoVertexCollectionAsync.java rename to core/src/main/java/com/arangodb/async/ArangoVertexCollectionAsync.java diff --git a/driver/src/main/java/com/arangodb/async/ArangoViewAsync.java b/core/src/main/java/com/arangodb/async/ArangoViewAsync.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/ArangoViewAsync.java rename to core/src/main/java/com/arangodb/async/ArangoViewAsync.java diff --git a/driver/src/main/java/com/arangodb/async/SearchAliasAsync.java b/core/src/main/java/com/arangodb/async/SearchAliasAsync.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/SearchAliasAsync.java rename to core/src/main/java/com/arangodb/async/SearchAliasAsync.java diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoCollectionAsyncImpl.java b/core/src/main/java/com/arangodb/async/internal/ArangoCollectionAsyncImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/internal/ArangoCollectionAsyncImpl.java rename to core/src/main/java/com/arangodb/async/internal/ArangoCollectionAsyncImpl.java diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoCursorAsyncImpl.java b/core/src/main/java/com/arangodb/async/internal/ArangoCursorAsyncImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/internal/ArangoCursorAsyncImpl.java rename to core/src/main/java/com/arangodb/async/internal/ArangoCursorAsyncImpl.java diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java b/core/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java similarity index 83% rename from driver/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java rename to core/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java index 2ad1b2b0d..12e946976 100644 --- a/driver/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java +++ b/core/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java @@ -26,23 +26,17 @@ import com.arangodb.Response; import com.arangodb.async.ArangoDBAsync; import com.arangodb.async.ArangoDatabaseAsync; -import com.arangodb.async.internal.velocystream.VstCommunicationAsync; import com.arangodb.entity.*; -import com.arangodb.internal.*; -import com.arangodb.internal.net.CommunicationProtocol; -import com.arangodb.internal.net.HostHandler; -import com.arangodb.internal.net.HostResolver; -import com.arangodb.internal.serde.InternalSerde; +import com.arangodb.internal.ArangoExecutorSync; +import com.arangodb.internal.ArangoMetricsImpl; +import com.arangodb.internal.InternalArangoDB; +import com.arangodb.internal.config.ArangoConfig; +import com.arangodb.internal.net.*; import com.arangodb.internal.serde.SerdeUtils; -import com.arangodb.internal.velocystream.VstCommunication; -import com.arangodb.internal.velocystream.VstCommunicationSync; -import com.arangodb.internal.velocystream.VstProtocol; -import com.arangodb.internal.velocystream.internal.VstConnectionSync; import com.arangodb.model.DBCreateOptions; import com.arangodb.model.LogOptions; import com.arangodb.model.UserCreateOptions; import com.arangodb.model.UserUpdateOptions; -import com.arangodb.internal.InternalResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,31 +56,22 @@ public class ArangoDBAsyncImpl extends InternalArangoDB imp private final HostHandler syncHostHandler; public ArangoDBAsyncImpl( - final VstCommunicationAsync.Builder asyncCommBuilder, - final InternalSerde util, - final VstCommunicationSync.Builder syncCommBuilder, + final ArangoConfig config, final HostResolver asyncHostResolver, final HostResolver syncHostResolver, + final AsyncProtocolProvider asyncProtocolProvider, + final ProtocolProvider protocolProvider, final HostHandler asyncHostHandler, - final HostHandler syncHostHandler, - final int responseQueueTimeSamples, - final int timeoutMs + final HostHandler syncHostHandler ) { - - super(new ArangoExecutorAsync(asyncCommBuilder.build(util), util, - new QueueTimeMetricsImpl(responseQueueTimeSamples), timeoutMs), util); - - final VstCommunication cacheCom = syncCommBuilder.build(util); - - cp = new VstProtocol(cacheCom); + super(new ArangoExecutorAsync(asyncProtocolProvider.createCommunication(config, asyncHostHandler), config), config.getInternalSerde()); + cp = protocolProvider.createProtocol(config, syncHostHandler); this.asyncHostHandler = asyncHostHandler; this.syncHostHandler = syncHostHandler; - ArangoExecutorSync arangoExecutorSync = new ArangoExecutorSync(cp, util, - new QueueTimeMetricsImpl(responseQueueTimeSamples), timeoutMs); - asyncHostResolver.init(arangoExecutorSync, util); - syncHostResolver.init(arangoExecutorSync, util); - + ArangoExecutorSync arangoExecutorSync = new ArangoExecutorSync(cp, config); + asyncHostResolver.init(arangoExecutorSync, config.getInternalSerde()); + syncHostResolver.init(arangoExecutorSync, config.getInternalSerde()); } @Override diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoDatabaseAsyncImpl.java b/core/src/main/java/com/arangodb/async/internal/ArangoDatabaseAsyncImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/internal/ArangoDatabaseAsyncImpl.java rename to core/src/main/java/com/arangodb/async/internal/ArangoDatabaseAsyncImpl.java diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoEdgeCollectionAsyncImpl.java b/core/src/main/java/com/arangodb/async/internal/ArangoEdgeCollectionAsyncImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/internal/ArangoEdgeCollectionAsyncImpl.java rename to core/src/main/java/com/arangodb/async/internal/ArangoEdgeCollectionAsyncImpl.java diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoExecutorAsync.java b/core/src/main/java/com/arangodb/async/internal/ArangoExecutorAsync.java similarity index 85% rename from driver/src/main/java/com/arangodb/async/internal/ArangoExecutorAsync.java rename to core/src/main/java/com/arangodb/async/internal/ArangoExecutorAsync.java index 831b64e40..7c85ef495 100644 --- a/driver/src/main/java/com/arangodb/async/internal/ArangoExecutorAsync.java +++ b/core/src/main/java/com/arangodb/async/internal/ArangoExecutorAsync.java @@ -21,12 +21,11 @@ package com.arangodb.async.internal; import com.arangodb.ArangoDBException; -import com.arangodb.async.internal.velocystream.VstCommunicationAsync; import com.arangodb.internal.ArangoExecutor; -import com.arangodb.internal.QueueTimeMetricsImpl; -import com.arangodb.internal.net.HostHandle; -import com.arangodb.internal.serde.InternalSerde; import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.config.ArangoConfig; +import com.arangodb.internal.net.AsyncCommunication; +import com.arangodb.internal.net.HostHandle; import java.io.IOException; import java.lang.reflect.Type; @@ -40,12 +39,11 @@ */ public class ArangoExecutorAsync extends ArangoExecutor { - private final VstCommunicationAsync communication; + private final AsyncCommunication communication; private final ExecutorService outgoingExecutor = Executors.newSingleThreadExecutor(); - public ArangoExecutorAsync(final VstCommunicationAsync communication, final InternalSerde util, - final QueueTimeMetricsImpl qtMetrics, final int timeoutMs) { - super(util, qtMetrics, timeoutMs); + public ArangoExecutorAsync(final AsyncCommunication communication, final ArangoConfig config) { + super(config); this.communication = communication; } diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoGraphAsyncImpl.java b/core/src/main/java/com/arangodb/async/internal/ArangoGraphAsyncImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/internal/ArangoGraphAsyncImpl.java rename to core/src/main/java/com/arangodb/async/internal/ArangoGraphAsyncImpl.java diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoRouteAsyncImpl.java b/core/src/main/java/com/arangodb/async/internal/ArangoRouteAsyncImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/internal/ArangoRouteAsyncImpl.java rename to core/src/main/java/com/arangodb/async/internal/ArangoRouteAsyncImpl.java diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoSearchAsyncImpl.java b/core/src/main/java/com/arangodb/async/internal/ArangoSearchAsyncImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/internal/ArangoSearchAsyncImpl.java rename to core/src/main/java/com/arangodb/async/internal/ArangoSearchAsyncImpl.java diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoVertexCollectionAsyncImpl.java b/core/src/main/java/com/arangodb/async/internal/ArangoVertexCollectionAsyncImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/internal/ArangoVertexCollectionAsyncImpl.java rename to core/src/main/java/com/arangodb/async/internal/ArangoVertexCollectionAsyncImpl.java diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoViewAsyncImpl.java b/core/src/main/java/com/arangodb/async/internal/ArangoViewAsyncImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/internal/ArangoViewAsyncImpl.java rename to core/src/main/java/com/arangodb/async/internal/ArangoViewAsyncImpl.java diff --git a/driver/src/main/java/com/arangodb/async/internal/ExceptionUtil.java b/core/src/main/java/com/arangodb/async/internal/ExceptionUtil.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/internal/ExceptionUtil.java rename to core/src/main/java/com/arangodb/async/internal/ExceptionUtil.java diff --git a/driver/src/main/java/com/arangodb/async/internal/SearchAliasAsyncImpl.java b/core/src/main/java/com/arangodb/async/internal/SearchAliasAsyncImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/internal/SearchAliasAsyncImpl.java rename to core/src/main/java/com/arangodb/async/internal/SearchAliasAsyncImpl.java diff --git a/driver/src/main/java/com/arangodb/async/internal/utils/CompletableFutureUtils.java b/core/src/main/java/com/arangodb/async/internal/utils/CompletableFutureUtils.java similarity index 100% rename from driver/src/main/java/com/arangodb/async/internal/utils/CompletableFutureUtils.java rename to core/src/main/java/com/arangodb/async/internal/utils/CompletableFutureUtils.java diff --git a/driver/src/main/java/com/arangodb/config/ArangoConfigProperties.java b/core/src/main/java/com/arangodb/config/ArangoConfigProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/config/ArangoConfigProperties.java rename to core/src/main/java/com/arangodb/config/ArangoConfigProperties.java diff --git a/driver/src/main/java/com/arangodb/config/HostDescription.java b/core/src/main/java/com/arangodb/config/HostDescription.java similarity index 100% rename from driver/src/main/java/com/arangodb/config/HostDescription.java rename to core/src/main/java/com/arangodb/config/HostDescription.java diff --git a/driver/src/main/java/com/arangodb/entity/AbstractBaseDocument.java b/core/src/main/java/com/arangodb/entity/AbstractBaseDocument.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/AbstractBaseDocument.java rename to core/src/main/java/com/arangodb/entity/AbstractBaseDocument.java diff --git a/driver/src/main/java/com/arangodb/entity/AqlExecutionExplainEntity.java b/core/src/main/java/com/arangodb/entity/AqlExecutionExplainEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/AqlExecutionExplainEntity.java rename to core/src/main/java/com/arangodb/entity/AqlExecutionExplainEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/AqlFunctionEntity.java b/core/src/main/java/com/arangodb/entity/AqlFunctionEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/AqlFunctionEntity.java rename to core/src/main/java/com/arangodb/entity/AqlFunctionEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/AqlParseEntity.java b/core/src/main/java/com/arangodb/entity/AqlParseEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/AqlParseEntity.java rename to core/src/main/java/com/arangodb/entity/AqlParseEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/ArangoDBEngine.java b/core/src/main/java/com/arangodb/entity/ArangoDBEngine.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/ArangoDBEngine.java rename to core/src/main/java/com/arangodb/entity/ArangoDBEngine.java diff --git a/driver/src/main/java/com/arangodb/entity/ArangoDBVersion.java b/core/src/main/java/com/arangodb/entity/ArangoDBVersion.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/ArangoDBVersion.java rename to core/src/main/java/com/arangodb/entity/ArangoDBVersion.java diff --git a/driver/src/main/java/com/arangodb/entity/BaseDocument.java b/core/src/main/java/com/arangodb/entity/BaseDocument.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/BaseDocument.java rename to core/src/main/java/com/arangodb/entity/BaseDocument.java diff --git a/driver/src/main/java/com/arangodb/entity/BaseEdgeDocument.java b/core/src/main/java/com/arangodb/entity/BaseEdgeDocument.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/BaseEdgeDocument.java rename to core/src/main/java/com/arangodb/entity/BaseEdgeDocument.java diff --git a/driver/src/main/java/com/arangodb/entity/CollectionEntity.java b/core/src/main/java/com/arangodb/entity/CollectionEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/CollectionEntity.java rename to core/src/main/java/com/arangodb/entity/CollectionEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/CollectionPropertiesEntity.java b/core/src/main/java/com/arangodb/entity/CollectionPropertiesEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/CollectionPropertiesEntity.java rename to core/src/main/java/com/arangodb/entity/CollectionPropertiesEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/CollectionRevisionEntity.java b/core/src/main/java/com/arangodb/entity/CollectionRevisionEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/CollectionRevisionEntity.java rename to core/src/main/java/com/arangodb/entity/CollectionRevisionEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/CollectionStatus.java b/core/src/main/java/com/arangodb/entity/CollectionStatus.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/CollectionStatus.java rename to core/src/main/java/com/arangodb/entity/CollectionStatus.java diff --git a/driver/src/main/java/com/arangodb/entity/CollectionType.java b/core/src/main/java/com/arangodb/entity/CollectionType.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/CollectionType.java rename to core/src/main/java/com/arangodb/entity/CollectionType.java diff --git a/driver/src/main/java/com/arangodb/entity/CursorWarning.java b/core/src/main/java/com/arangodb/entity/CursorWarning.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/CursorWarning.java rename to core/src/main/java/com/arangodb/entity/CursorWarning.java diff --git a/driver/src/main/java/com/arangodb/entity/DatabaseEntity.java b/core/src/main/java/com/arangodb/entity/DatabaseEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/DatabaseEntity.java rename to core/src/main/java/com/arangodb/entity/DatabaseEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/DocumentCreateEntity.java b/core/src/main/java/com/arangodb/entity/DocumentCreateEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/DocumentCreateEntity.java rename to core/src/main/java/com/arangodb/entity/DocumentCreateEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/DocumentDeleteEntity.java b/core/src/main/java/com/arangodb/entity/DocumentDeleteEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/DocumentDeleteEntity.java rename to core/src/main/java/com/arangodb/entity/DocumentDeleteEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/DocumentEntity.java b/core/src/main/java/com/arangodb/entity/DocumentEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/DocumentEntity.java rename to core/src/main/java/com/arangodb/entity/DocumentEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/DocumentImportEntity.java b/core/src/main/java/com/arangodb/entity/DocumentImportEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/DocumentImportEntity.java rename to core/src/main/java/com/arangodb/entity/DocumentImportEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/DocumentUpdateEntity.java b/core/src/main/java/com/arangodb/entity/DocumentUpdateEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/DocumentUpdateEntity.java rename to core/src/main/java/com/arangodb/entity/DocumentUpdateEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/EdgeDefinition.java b/core/src/main/java/com/arangodb/entity/EdgeDefinition.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/EdgeDefinition.java rename to core/src/main/java/com/arangodb/entity/EdgeDefinition.java diff --git a/driver/src/main/java/com/arangodb/entity/EdgeEntity.java b/core/src/main/java/com/arangodb/entity/EdgeEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/EdgeEntity.java rename to core/src/main/java/com/arangodb/entity/EdgeEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/EdgeUpdateEntity.java b/core/src/main/java/com/arangodb/entity/EdgeUpdateEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/EdgeUpdateEntity.java rename to core/src/main/java/com/arangodb/entity/EdgeUpdateEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/ErrorEntity.java b/core/src/main/java/com/arangodb/entity/ErrorEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/ErrorEntity.java rename to core/src/main/java/com/arangodb/entity/ErrorEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/GraphEntity.java b/core/src/main/java/com/arangodb/entity/GraphEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/GraphEntity.java rename to core/src/main/java/com/arangodb/entity/GraphEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/IndexEntity.java b/core/src/main/java/com/arangodb/entity/IndexEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/IndexEntity.java rename to core/src/main/java/com/arangodb/entity/IndexEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/IndexType.java b/core/src/main/java/com/arangodb/entity/IndexType.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/IndexType.java rename to core/src/main/java/com/arangodb/entity/IndexType.java diff --git a/driver/src/main/java/com/arangodb/entity/InvertedIndexEntity.java b/core/src/main/java/com/arangodb/entity/InvertedIndexEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/InvertedIndexEntity.java rename to core/src/main/java/com/arangodb/entity/InvertedIndexEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/InvertedIndexField.java b/core/src/main/java/com/arangodb/entity/InvertedIndexField.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/InvertedIndexField.java rename to core/src/main/java/com/arangodb/entity/InvertedIndexField.java diff --git a/driver/src/main/java/com/arangodb/entity/InvertedIndexPrimarySort.java b/core/src/main/java/com/arangodb/entity/InvertedIndexPrimarySort.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/InvertedIndexPrimarySort.java rename to core/src/main/java/com/arangodb/entity/InvertedIndexPrimarySort.java diff --git a/driver/src/main/java/com/arangodb/entity/KeyOptions.java b/core/src/main/java/com/arangodb/entity/KeyOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/KeyOptions.java rename to core/src/main/java/com/arangodb/entity/KeyOptions.java diff --git a/driver/src/main/java/com/arangodb/entity/KeyType.java b/core/src/main/java/com/arangodb/entity/KeyType.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/KeyType.java rename to core/src/main/java/com/arangodb/entity/KeyType.java diff --git a/driver/src/main/java/com/arangodb/entity/License.java b/core/src/main/java/com/arangodb/entity/License.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/License.java rename to core/src/main/java/com/arangodb/entity/License.java diff --git a/driver/src/main/java/com/arangodb/entity/LoadBalancingStrategy.java b/core/src/main/java/com/arangodb/entity/LoadBalancingStrategy.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/LoadBalancingStrategy.java rename to core/src/main/java/com/arangodb/entity/LoadBalancingStrategy.java diff --git a/driver/src/main/java/com/arangodb/entity/LogEntriesEntity.java b/core/src/main/java/com/arangodb/entity/LogEntriesEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/LogEntriesEntity.java rename to core/src/main/java/com/arangodb/entity/LogEntriesEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/LogLevel.java b/core/src/main/java/com/arangodb/entity/LogLevel.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/LogLevel.java rename to core/src/main/java/com/arangodb/entity/LogLevel.java diff --git a/driver/src/main/java/com/arangodb/entity/LogLevelEntity.java b/core/src/main/java/com/arangodb/entity/LogLevelEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/LogLevelEntity.java rename to core/src/main/java/com/arangodb/entity/LogLevelEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/MetaAware.java b/core/src/main/java/com/arangodb/entity/MetaAware.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/MetaAware.java rename to core/src/main/java/com/arangodb/entity/MetaAware.java diff --git a/driver/src/main/java/com/arangodb/entity/MultiDocumentEntity.java b/core/src/main/java/com/arangodb/entity/MultiDocumentEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/MultiDocumentEntity.java rename to core/src/main/java/com/arangodb/entity/MultiDocumentEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/Permissions.java b/core/src/main/java/com/arangodb/entity/Permissions.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/Permissions.java rename to core/src/main/java/com/arangodb/entity/Permissions.java diff --git a/driver/src/main/java/com/arangodb/entity/QueryCachePropertiesEntity.java b/core/src/main/java/com/arangodb/entity/QueryCachePropertiesEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/QueryCachePropertiesEntity.java rename to core/src/main/java/com/arangodb/entity/QueryCachePropertiesEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/QueryEntity.java b/core/src/main/java/com/arangodb/entity/QueryEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/QueryEntity.java rename to core/src/main/java/com/arangodb/entity/QueryEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/QueryExecutionState.java b/core/src/main/java/com/arangodb/entity/QueryExecutionState.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/QueryExecutionState.java rename to core/src/main/java/com/arangodb/entity/QueryExecutionState.java diff --git a/driver/src/main/java/com/arangodb/entity/QueryOptimizerRule.java b/core/src/main/java/com/arangodb/entity/QueryOptimizerRule.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/QueryOptimizerRule.java rename to core/src/main/java/com/arangodb/entity/QueryOptimizerRule.java diff --git a/driver/src/main/java/com/arangodb/entity/QueryTrackingPropertiesEntity.java b/core/src/main/java/com/arangodb/entity/QueryTrackingPropertiesEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/QueryTrackingPropertiesEntity.java rename to core/src/main/java/com/arangodb/entity/QueryTrackingPropertiesEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/ReplicationFactor.java b/core/src/main/java/com/arangodb/entity/ReplicationFactor.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/ReplicationFactor.java rename to core/src/main/java/com/arangodb/entity/ReplicationFactor.java diff --git a/driver/src/main/java/com/arangodb/entity/ServerMode.java b/core/src/main/java/com/arangodb/entity/ServerMode.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/ServerMode.java rename to core/src/main/java/com/arangodb/entity/ServerMode.java diff --git a/driver/src/main/java/com/arangodb/entity/ServerRole.java b/core/src/main/java/com/arangodb/entity/ServerRole.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/ServerRole.java rename to core/src/main/java/com/arangodb/entity/ServerRole.java diff --git a/driver/src/main/java/com/arangodb/entity/ShardEntity.java b/core/src/main/java/com/arangodb/entity/ShardEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/ShardEntity.java rename to core/src/main/java/com/arangodb/entity/ShardEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/ShardingStrategy.java b/core/src/main/java/com/arangodb/entity/ShardingStrategy.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/ShardingStrategy.java rename to core/src/main/java/com/arangodb/entity/ShardingStrategy.java diff --git a/driver/src/main/java/com/arangodb/entity/StreamTransactionEntity.java b/core/src/main/java/com/arangodb/entity/StreamTransactionEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/StreamTransactionEntity.java rename to core/src/main/java/com/arangodb/entity/StreamTransactionEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/StreamTransactionStatus.java b/core/src/main/java/com/arangodb/entity/StreamTransactionStatus.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/StreamTransactionStatus.java rename to core/src/main/java/com/arangodb/entity/StreamTransactionStatus.java diff --git a/driver/src/main/java/com/arangodb/entity/TransactionEntity.java b/core/src/main/java/com/arangodb/entity/TransactionEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/TransactionEntity.java rename to core/src/main/java/com/arangodb/entity/TransactionEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/UserEntity.java b/core/src/main/java/com/arangodb/entity/UserEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/UserEntity.java rename to core/src/main/java/com/arangodb/entity/UserEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/VertexEntity.java b/core/src/main/java/com/arangodb/entity/VertexEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/VertexEntity.java rename to core/src/main/java/com/arangodb/entity/VertexEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/VertexUpdateEntity.java b/core/src/main/java/com/arangodb/entity/VertexUpdateEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/VertexUpdateEntity.java rename to core/src/main/java/com/arangodb/entity/VertexUpdateEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/ViewEntity.java b/core/src/main/java/com/arangodb/entity/ViewEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/ViewEntity.java rename to core/src/main/java/com/arangodb/entity/ViewEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/ViewType.java b/core/src/main/java/com/arangodb/entity/ViewType.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/ViewType.java rename to core/src/main/java/com/arangodb/entity/ViewType.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/AnalyzerFeature.java b/core/src/main/java/com/arangodb/entity/arangosearch/AnalyzerFeature.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/AnalyzerFeature.java rename to core/src/main/java/com/arangodb/entity/arangosearch/AnalyzerFeature.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/AnalyzerType.java b/core/src/main/java/com/arangodb/entity/arangosearch/AnalyzerType.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/AnalyzerType.java rename to core/src/main/java/com/arangodb/entity/arangosearch/AnalyzerType.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/ArangoSearchCompression.java b/core/src/main/java/com/arangodb/entity/arangosearch/ArangoSearchCompression.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/ArangoSearchCompression.java rename to core/src/main/java/com/arangodb/entity/arangosearch/ArangoSearchCompression.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/ArangoSearchPropertiesEntity.java b/core/src/main/java/com/arangodb/entity/arangosearch/ArangoSearchPropertiesEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/ArangoSearchPropertiesEntity.java rename to core/src/main/java/com/arangodb/entity/arangosearch/ArangoSearchPropertiesEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/CollectionLink.java b/core/src/main/java/com/arangodb/entity/arangosearch/CollectionLink.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/CollectionLink.java rename to core/src/main/java/com/arangodb/entity/arangosearch/CollectionLink.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/ConsolidationPolicy.java b/core/src/main/java/com/arangodb/entity/arangosearch/ConsolidationPolicy.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/ConsolidationPolicy.java rename to core/src/main/java/com/arangodb/entity/arangosearch/ConsolidationPolicy.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/ConsolidationType.java b/core/src/main/java/com/arangodb/entity/arangosearch/ConsolidationType.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/ConsolidationType.java rename to core/src/main/java/com/arangodb/entity/arangosearch/ConsolidationType.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/FieldLink.java b/core/src/main/java/com/arangodb/entity/arangosearch/FieldLink.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/FieldLink.java rename to core/src/main/java/com/arangodb/entity/arangosearch/FieldLink.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/PrimarySort.java b/core/src/main/java/com/arangodb/entity/arangosearch/PrimarySort.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/PrimarySort.java rename to core/src/main/java/com/arangodb/entity/arangosearch/PrimarySort.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/SearchAliasIndex.java b/core/src/main/java/com/arangodb/entity/arangosearch/SearchAliasIndex.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/SearchAliasIndex.java rename to core/src/main/java/com/arangodb/entity/arangosearch/SearchAliasIndex.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/SearchAliasPropertiesEntity.java b/core/src/main/java/com/arangodb/entity/arangosearch/SearchAliasPropertiesEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/SearchAliasPropertiesEntity.java rename to core/src/main/java/com/arangodb/entity/arangosearch/SearchAliasPropertiesEntity.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/StoreValuesType.java b/core/src/main/java/com/arangodb/entity/arangosearch/StoreValuesType.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/StoreValuesType.java rename to core/src/main/java/com/arangodb/entity/arangosearch/StoreValuesType.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/StoredValue.java b/core/src/main/java/com/arangodb/entity/arangosearch/StoredValue.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/StoredValue.java rename to core/src/main/java/com/arangodb/entity/arangosearch/StoredValue.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/AQLAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/AQLAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/AQLAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/AQLAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/AQLAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/AQLAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/AQLAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/AQLAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/ClassificationAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/ClassificationAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/ClassificationAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/ClassificationAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/ClassificationAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/ClassificationAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/ClassificationAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/ClassificationAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/CollationAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/CollationAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/CollationAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/CollationAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/CollationAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/CollationAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/CollationAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/CollationAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/DelimiterAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/DelimiterAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/DelimiterAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/DelimiterAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/DelimiterAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/DelimiterAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/DelimiterAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/DelimiterAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/EdgeNgram.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/EdgeNgram.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/EdgeNgram.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/EdgeNgram.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoAnalyzerOptions.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoAnalyzerOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoAnalyzerOptions.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoAnalyzerOptions.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoJSONAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoJSONAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoJSONAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoJSONAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoJSONAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoJSONAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoJSONAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoJSONAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoPointAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoPointAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoPointAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoPointAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoPointAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoPointAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoPointAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/GeoPointAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/IdentityAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/IdentityAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/IdentityAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/IdentityAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/MinHashAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/MinHashAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/MinHashAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/MinHashAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/MinHashAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/MinHashAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/MinHashAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/MinHashAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/NGramAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/NGramAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/NGramAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/NGramAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/NGramAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/NGramAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/NGramAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/NGramAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/NearestNeighborsAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/NearestNeighborsAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/NearestNeighborsAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/NearestNeighborsAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/NearestNeighborsAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/NearestNeighborsAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/NearestNeighborsAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/NearestNeighborsAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/NormAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/NormAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/NormAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/NormAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/NormAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/NormAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/NormAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/NormAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/PipelineAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/PipelineAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/PipelineAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/PipelineAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/PipelineAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/PipelineAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/PipelineAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/PipelineAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/SearchAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/SearchAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/SearchAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/SearchAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/SearchAnalyzerCase.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/SearchAnalyzerCase.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/SearchAnalyzerCase.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/SearchAnalyzerCase.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/SegmentationAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/SegmentationAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/SegmentationAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/SegmentationAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/SegmentationAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/SegmentationAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/SegmentationAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/SegmentationAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/StemAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/StemAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/StemAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/StemAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/StemAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/StemAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/StemAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/StemAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/StopwordsAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/StopwordsAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/StopwordsAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/StopwordsAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/StopwordsAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/StopwordsAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/StopwordsAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/StopwordsAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/StreamType.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/StreamType.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/StreamType.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/StreamType.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/TextAnalyzer.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/TextAnalyzer.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/TextAnalyzer.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/TextAnalyzer.java diff --git a/driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/TextAnalyzerProperties.java b/core/src/main/java/com/arangodb/entity/arangosearch/analyzer/TextAnalyzerProperties.java similarity index 100% rename from driver/src/main/java/com/arangodb/entity/arangosearch/analyzer/TextAnalyzerProperties.java rename to core/src/main/java/com/arangodb/entity/arangosearch/analyzer/TextAnalyzerProperties.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoCollectionImpl.java b/core/src/main/java/com/arangodb/internal/ArangoCollectionImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoCollectionImpl.java rename to core/src/main/java/com/arangodb/internal/ArangoCollectionImpl.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoCursorExecute.java b/core/src/main/java/com/arangodb/internal/ArangoCursorExecute.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoCursorExecute.java rename to core/src/main/java/com/arangodb/internal/ArangoCursorExecute.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoDBImpl.java b/core/src/main/java/com/arangodb/internal/ArangoDBImpl.java similarity index 78% rename from driver/src/main/java/com/arangodb/internal/ArangoDBImpl.java rename to core/src/main/java/com/arangodb/internal/ArangoDBImpl.java index 22a0e95a1..52801b51e 100644 --- a/driver/src/main/java/com/arangodb/internal/ArangoDBImpl.java +++ b/core/src/main/java/com/arangodb/internal/ArangoDBImpl.java @@ -22,15 +22,11 @@ import com.arangodb.*; import com.arangodb.entity.*; -import com.arangodb.internal.http.HttpCommunication; -import com.arangodb.internal.http.HttpProtocol; -import com.arangodb.internal.net.CommunicationProtocol; +import com.arangodb.internal.config.ArangoConfig; import com.arangodb.internal.net.HostHandler; import com.arangodb.internal.net.HostResolver; -import com.arangodb.internal.serde.InternalSerde; +import com.arangodb.internal.net.ProtocolProvider; import com.arangodb.internal.serde.SerdeUtils; -import com.arangodb.internal.velocystream.VstCommunicationSync; -import com.arangodb.internal.velocystream.VstProtocol; import com.arangodb.model.DBCreateOptions; import com.arangodb.model.LogOptions; import com.arangodb.model.UserCreateOptions; @@ -50,43 +46,15 @@ public class ArangoDBImpl extends InternalArangoDB implement private static final Logger LOGGER = LoggerFactory.getLogger(ArangoDBImpl.class); private final HostHandler hostHandler; - public ArangoDBImpl(final VstCommunicationSync.Builder vstBuilder, final HttpCommunication.Builder httpBuilder, - final InternalSerde util, final Protocol protocol, final HostResolver hostResolver, - final HostHandler hostHandler, int responseQueueTimeSamples, - final int timeoutMs) { - - super(new ArangoExecutorSync( - createProtocol(vstBuilder, httpBuilder, util, protocol), - util, new QueueTimeMetricsImpl(responseQueueTimeSamples), timeoutMs), - util); - + public ArangoDBImpl(final ArangoConfig config, + final HostResolver hostResolver, final ProtocolProvider protocolProvider, + final HostHandler hostHandler) { + super(new ArangoExecutorSync(protocolProvider.createProtocol(config, hostHandler), config), config.getInternalSerde()); this.hostHandler = hostHandler; hostResolver.init(this.executor(), getSerde()); LOGGER.debug("ArangoDB Client is ready to use"); } - private static CommunicationProtocol createProtocol( - final VstCommunicationSync.Builder vstBuilder, - final HttpCommunication.Builder httpBuilder, - final InternalSerde util, - final Protocol protocol) { - - return (protocol == null || Protocol.VST == protocol) ? createVST(vstBuilder, util) - : createHTTP(httpBuilder, util); - } - - private static CommunicationProtocol createVST( - final VstCommunicationSync.Builder builder, - final InternalSerde util) { - return new VstProtocol(builder.build(util)); - } - - private static CommunicationProtocol createHTTP( - final HttpCommunication.Builder builder, - final InternalSerde util) { - return new HttpProtocol(builder.serde(util).build()); - } - @Override protected ArangoExecutorSync executor() { return executor; diff --git a/driver/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java b/core/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java rename to core/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoDefaults.java b/core/src/main/java/com/arangodb/internal/ArangoDefaults.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoDefaults.java rename to core/src/main/java/com/arangodb/internal/ArangoDefaults.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoEdgeCollectionImpl.java b/core/src/main/java/com/arangodb/internal/ArangoEdgeCollectionImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoEdgeCollectionImpl.java rename to core/src/main/java/com/arangodb/internal/ArangoEdgeCollectionImpl.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoErrors.java b/core/src/main/java/com/arangodb/internal/ArangoErrors.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoErrors.java rename to core/src/main/java/com/arangodb/internal/ArangoErrors.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoExecuteable.java b/core/src/main/java/com/arangodb/internal/ArangoExecuteable.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoExecuteable.java rename to core/src/main/java/com/arangodb/internal/ArangoExecuteable.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoExecutor.java b/core/src/main/java/com/arangodb/internal/ArangoExecutor.java similarity index 84% rename from driver/src/main/java/com/arangodb/internal/ArangoExecutor.java rename to core/src/main/java/com/arangodb/internal/ArangoExecutor.java index ad9e0acda..a37f4b11c 100644 --- a/driver/src/main/java/com/arangodb/internal/ArangoExecutor.java +++ b/core/src/main/java/com/arangodb/internal/ArangoExecutor.java @@ -21,6 +21,7 @@ package com.arangodb.internal; import com.arangodb.QueueTimeMetrics; +import com.arangodb.internal.config.ArangoConfig; import com.arangodb.internal.serde.InternalSerde; import java.lang.reflect.Type; @@ -34,11 +35,11 @@ public abstract class ArangoExecutor { private final InternalSerde serde; private final String timeoutS; - protected ArangoExecutor(final InternalSerde serde, final QueueTimeMetricsImpl qtMetrics, final int timeoutMs) { + protected ArangoExecutor(final ArangoConfig config) { super(); - this.qtMetrics = qtMetrics; - this.serde = serde; - timeoutS = timeoutMs >= 1000 ? Integer.toString(timeoutMs / 1000) : null; + qtMetrics = new QueueTimeMetricsImpl(config.getResponseQueueTimeSamples()); + serde = config.getInternalSerde(); + timeoutS = config.getTimeout() >= 1000 ? Integer.toString(config.getTimeout() / 1000) : null; } protected T createResult(final Type type, final InternalResponse response) { diff --git a/driver/src/main/java/com/arangodb/internal/ArangoExecutorSync.java b/core/src/main/java/com/arangodb/internal/ArangoExecutorSync.java similarity index 92% rename from driver/src/main/java/com/arangodb/internal/ArangoExecutorSync.java rename to core/src/main/java/com/arangodb/internal/ArangoExecutorSync.java index 88b2f6f0f..00a6ae6f7 100644 --- a/driver/src/main/java/com/arangodb/internal/ArangoExecutorSync.java +++ b/core/src/main/java/com/arangodb/internal/ArangoExecutorSync.java @@ -22,9 +22,9 @@ import com.arangodb.ArangoDBException; import com.arangodb.entity.MetaAware; +import com.arangodb.internal.config.ArangoConfig; import com.arangodb.internal.net.CommunicationProtocol; import com.arangodb.internal.net.HostHandle; -import com.arangodb.internal.serde.InternalSerde; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,9 +40,8 @@ public class ArangoExecutorSync extends ArangoExecutor { private final CommunicationProtocol protocol; - public ArangoExecutorSync(final CommunicationProtocol protocol, final InternalSerde util, - final QueueTimeMetricsImpl qtMetrics, final int timeoutMs) { - super(util, qtMetrics, timeoutMs); + public ArangoExecutorSync(final CommunicationProtocol protocol, final ArangoConfig config) { + super(config); this.protocol = protocol; } diff --git a/driver/src/main/java/com/arangodb/internal/ArangoGraphImpl.java b/core/src/main/java/com/arangodb/internal/ArangoGraphImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoGraphImpl.java rename to core/src/main/java/com/arangodb/internal/ArangoGraphImpl.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoMetricsImpl.java b/core/src/main/java/com/arangodb/internal/ArangoMetricsImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoMetricsImpl.java rename to core/src/main/java/com/arangodb/internal/ArangoMetricsImpl.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoRequestParam.java b/core/src/main/java/com/arangodb/internal/ArangoRequestParam.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoRequestParam.java rename to core/src/main/java/com/arangodb/internal/ArangoRequestParam.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoResponseField.java b/core/src/main/java/com/arangodb/internal/ArangoResponseField.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoResponseField.java rename to core/src/main/java/com/arangodb/internal/ArangoResponseField.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoSearchImpl.java b/core/src/main/java/com/arangodb/internal/ArangoSearchImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoSearchImpl.java rename to core/src/main/java/com/arangodb/internal/ArangoSearchImpl.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoVertexCollectionImpl.java b/core/src/main/java/com/arangodb/internal/ArangoVertexCollectionImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoVertexCollectionImpl.java rename to core/src/main/java/com/arangodb/internal/ArangoVertexCollectionImpl.java diff --git a/driver/src/main/java/com/arangodb/internal/ArangoViewImpl.java b/core/src/main/java/com/arangodb/internal/ArangoViewImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/ArangoViewImpl.java rename to core/src/main/java/com/arangodb/internal/ArangoViewImpl.java diff --git a/driver/src/main/java/com/arangodb/internal/DocumentFields.java b/core/src/main/java/com/arangodb/internal/DocumentFields.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/DocumentFields.java rename to core/src/main/java/com/arangodb/internal/DocumentFields.java diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoCollection.java b/core/src/main/java/com/arangodb/internal/InternalArangoCollection.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/InternalArangoCollection.java rename to core/src/main/java/com/arangodb/internal/InternalArangoCollection.java diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoDB.java b/core/src/main/java/com/arangodb/internal/InternalArangoDB.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/InternalArangoDB.java rename to core/src/main/java/com/arangodb/internal/InternalArangoDB.java diff --git a/core/src/main/java/com/arangodb/internal/InternalArangoDBBuilder.java b/core/src/main/java/com/arangodb/internal/InternalArangoDBBuilder.java new file mode 100644 index 000000000..e482e405c --- /dev/null +++ b/core/src/main/java/com/arangodb/internal/InternalArangoDBBuilder.java @@ -0,0 +1,349 @@ +/* + * DISCLAIMER + * + * Copyright 2018 ArangoDB GmbH, Cologne, Germany + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Copyright holder is ArangoDB GmbH, Cologne, Germany + */ + +package com.arangodb.internal; + +import com.arangodb.ArangoDB; +import com.arangodb.ArangoDBException; +import com.arangodb.Protocol; +import com.arangodb.Request; +import com.arangodb.config.ArangoConfigProperties; +import com.arangodb.config.HostDescription; +import com.arangodb.entity.LoadBalancingStrategy; +import com.arangodb.internal.config.ArangoConfig; +import com.arangodb.internal.net.*; +import com.arangodb.internal.util.HostUtils; +import com.arangodb.serde.ArangoSerde; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.SSLContext; +import java.util.ArrayList; +import java.util.Collection; +import java.util.ServiceLoader; + + +/** + * @author Mark Vollmary + */ +public abstract class InternalArangoDBBuilder> { + private static final Logger LOG = LoggerFactory.getLogger(InternalArangoDBBuilder.class); + protected final ArangoConfig config = new ArangoConfig(); + + @SuppressWarnings("unchecked") + public T loadProperties(final ArangoConfigProperties properties) { + config.loadProperties(properties); + return (T) this; + } + + /** + * Adds a host to connect to. Multiple hosts can be added to provide fallbacks. + * + * @param host address of the host + * @param port port of the host + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T host(final String host, final int port) { + config.addHost(new HostDescription(host, port)); + return (T) this; + } + + /** + * Sets the connection and request timeout in milliseconds. + * + * @param timeout timeout in milliseconds + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T timeout(final Integer timeout) { + config.setTimeout(timeout); + return (T) this; + } + + /** + * Sets the username to use for authentication. + * + * @param user the user in the database (default: {@code root}) + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T user(final String user) { + config.setUser(user); + return (T) this; + } + + /** + * Sets the password for the user for authentication. + * + * @param password the password of the user in the database (default: {@code null}) + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T password(final String password) { + config.setPassword(password); + return (T) this; + } + + /** + * Sets the JWT for the user authentication. + * + * @param jwt token to use (default: {@code null}) + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T jwt(final String jwt) { + config.setJwt(jwt); + return (T) this; + } + + /** + * If set to {@code true} SSL will be used when connecting to an ArangoDB server. + * + * @param useSsl whether or not use SSL (default: {@code false}) + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T useSsl(final Boolean useSsl) { + config.setUseSsl(useSsl); + return (T) this; + } + + /** + * Sets the SSL context to be used when {@code true} is passed through {@link #useSsl(Boolean)}. + * + * @param sslContext SSL context to be used + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T sslContext(final SSLContext sslContext) { + config.setSslContext(sslContext); + return (T) this; + } + + /** + * Set whether hostname verification is enabled + * + * @param verifyHost {@code true} if enabled + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T verifyHost(final Boolean verifyHost) { + config.setVerifyHost(verifyHost); + return (T) this; + } + + /** + * Sets the chunk size when {@link Protocol#VST} is used. + * + * @param chunksize size of a chunk in bytes + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T chunksize(final Integer chunksize) { + config.setChunkSize(chunksize); + return (T) this; + } + + /** + * Sets the maximum number of connections the built in connection pool will open per host. + * + *

+ * Defaults: + *

+ * + *
+     * {@link Protocol#VST} == 1
+     * {@link Protocol#HTTP_JSON} == 20
+     * {@link Protocol#HTTP_VPACK} == 20
+     * 
+ * + * @param maxConnections max number of connections + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T maxConnections(final Integer maxConnections) { + config.setMaxConnections(maxConnections); + return (T) this; + } + + /** + * Set the maximum time to life of a connection. After this time the connection will be closed automatically. + * + * @param connectionTtl the maximum time to life of a connection in milliseconds + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T connectionTtl(final Long connectionTtl) { + config.setConnectionTtl(connectionTtl); + return (T) this; + } + + /** + * Set the keep-alive interval for VST connections. If set, every VST connection will perform a no-op request + * every {@code keepAliveInterval} seconds, to avoid to be closed due to inactivity by the server (or by the + * external environment, eg. firewall, intermediate routers, operating system). + * + * @param keepAliveInterval interval in seconds + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T keepAliveInterval(final Integer keepAliveInterval) { + config.setKeepAliveInterval(keepAliveInterval); + return (T) this; + } + + /** + * Whether or not the driver should acquire a list of available coordinators in an ArangoDB cluster or a single + * server with active failover. In case of Active-Failover deployment set to {@code true} to enable automatic + * master discovery. + * + *

+ * The host list will be used for failover and load balancing. + *

+ * + * @param acquireHostList whether or not automatically acquire a list of available hosts (default: false) + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T acquireHostList(final Boolean acquireHostList) { + config.setAcquireHostList(acquireHostList); + return (T) this; + } + + /** + * Setting the Interval for acquireHostList + * + * @param acquireHostListInterval Interval in milliseconds + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T acquireHostListInterval(final Integer acquireHostListInterval) { + config.setAcquireHostListInterval(acquireHostListInterval); + return (T) this; + } + + /** + * Sets the load balancing strategy to be used in an ArangoDB cluster setup. In case of Active-Failover + * deployment set to {@link LoadBalancingStrategy#NONE} or not set at all, since that would be the default. + * + * @param loadBalancingStrategy the load balancing strategy to be used (default: + * {@link LoadBalancingStrategy#NONE} + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T loadBalancingStrategy(final LoadBalancingStrategy loadBalancingStrategy) { + config.setLoadBalancingStrategy(loadBalancingStrategy); + return (T) this; + } + + /** + * Setting the amount of samples kept for queue time metrics + * + * @param responseQueueTimeSamples amount of samples to keep + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T responseQueueTimeSamples(final Integer responseQueueTimeSamples) { + config.setResponseQueueTimeSamples(responseQueueTimeSamples); + return (T) this; + } + + /** + * Sets the serde for the user data. + * This is used to serialize and deserialize all the data payload such as: + * - documents, vertexes, edges + * - AQL bind vars + * - body payload of requests and responses in {@link ArangoDB#execute(Request, Class)} + *

+ * However, note that the following types will always be serialized and deserialized using the internal serde: + * - {@link com.fasterxml.jackson.databind.JsonNode} + * - {@link com.arangodb.util.RawJson} + * - {@link com.arangodb.util.RawBytes} + * - {@link com.arangodb.entity.BaseDocument} + * - {@link com.arangodb.entity.BaseEdgeDocument} + * + * @param serde custom serde for the user data + * @return {@link ArangoDB.Builder} + */ + @SuppressWarnings("unchecked") + public T serde(final ArangoSerde serde) { + config.setUserDataSerde(serde); + return (T) this; + } + + protected ProtocolProvider protocolProvider(Protocol protocol) { + ServiceLoader loader = ServiceLoader.load(ProtocolProvider.class); + for (ProtocolProvider p : loader) { + if (p.supportsProtocol(protocol)) { + return p; + } + } + throw new ArangoDBException("No ProtocolProvider found for protocol: " + protocol); + } + + protected HostHandler createHostHandler(final HostResolver hostResolver) { + + final HostHandler hostHandler; + + LoadBalancingStrategy loadBalancingStrategy = config.getLoadBalancingStrategy(); + if (loadBalancingStrategy != null) { + switch (loadBalancingStrategy) { + case ONE_RANDOM: + hostHandler = new RandomHostHandler(hostResolver, new FallbackHostHandler(hostResolver)); + break; + case ROUND_ROBIN: + hostHandler = new RoundRobinHostHandler(hostResolver); + break; + case NONE: + default: + hostHandler = new FallbackHostHandler(hostResolver); + break; + } + } else { + hostHandler = new FallbackHostHandler(hostResolver); + } + + LOG.debug("HostHandler is {}", hostHandler.getClass().getSimpleName()); + + return new DirtyReadHostHandler(hostHandler, new RoundRobinHostHandler(hostResolver)); + } + + protected HostResolver createHostResolver(final Collection hosts, final ConnectionFactory connectionFactory) { + Boolean acquireHostList = config.getAcquireHostList(); + if (acquireHostList != null && acquireHostList) { + LOG.debug("acquireHostList -> Use ExtendedHostResolver"); + return new ExtendedHostResolver(new ArrayList<>(hosts), config, connectionFactory, + config.getAcquireHostListInterval()); + } else { + LOG.debug("Use SimpleHostResolver"); + return new SimpleHostResolver(new ArrayList<>(hosts)); + } + + } + + protected Collection createHostList(final ConnectionFactory connectionFactory) { + final Collection hostList = new ArrayList<>(); + for (final HostDescription host : config.getHosts()) { + hostList.add(HostUtils.createHost(host, config, connectionFactory)); + } + return hostList; + } +} diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoDatabase.java b/core/src/main/java/com/arangodb/internal/InternalArangoDatabase.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/InternalArangoDatabase.java rename to core/src/main/java/com/arangodb/internal/InternalArangoDatabase.java diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java b/core/src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java rename to core/src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoGraph.java b/core/src/main/java/com/arangodb/internal/InternalArangoGraph.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/InternalArangoGraph.java rename to core/src/main/java/com/arangodb/internal/InternalArangoGraph.java diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoRoute.java b/core/src/main/java/com/arangodb/internal/InternalArangoRoute.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/InternalArangoRoute.java rename to core/src/main/java/com/arangodb/internal/InternalArangoRoute.java diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoSearch.java b/core/src/main/java/com/arangodb/internal/InternalArangoSearch.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/InternalArangoSearch.java rename to core/src/main/java/com/arangodb/internal/InternalArangoSearch.java diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java b/core/src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java rename to core/src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoView.java b/core/src/main/java/com/arangodb/internal/InternalArangoView.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/InternalArangoView.java rename to core/src/main/java/com/arangodb/internal/InternalArangoView.java diff --git a/driver/src/main/java/com/arangodb/internal/InternalRequest.java b/core/src/main/java/com/arangodb/internal/InternalRequest.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/InternalRequest.java rename to core/src/main/java/com/arangodb/internal/InternalRequest.java diff --git a/driver/src/main/java/com/arangodb/internal/InternalResponse.java b/core/src/main/java/com/arangodb/internal/InternalResponse.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/InternalResponse.java rename to core/src/main/java/com/arangodb/internal/InternalResponse.java diff --git a/driver/src/main/java/com/arangodb/internal/InternalSearchAlias.java b/core/src/main/java/com/arangodb/internal/InternalSearchAlias.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/InternalSearchAlias.java rename to core/src/main/java/com/arangodb/internal/InternalSearchAlias.java diff --git a/driver/src/main/java/com/arangodb/internal/QueueTimeMetricsImpl.java b/core/src/main/java/com/arangodb/internal/QueueTimeMetricsImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/QueueTimeMetricsImpl.java rename to core/src/main/java/com/arangodb/internal/QueueTimeMetricsImpl.java diff --git a/driver/src/main/java/com/arangodb/internal/RequestType.java b/core/src/main/java/com/arangodb/internal/RequestType.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/RequestType.java rename to core/src/main/java/com/arangodb/internal/RequestType.java diff --git a/driver/src/main/java/com/arangodb/internal/SearchAliasImpl.java b/core/src/main/java/com/arangodb/internal/SearchAliasImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/SearchAliasImpl.java rename to core/src/main/java/com/arangodb/internal/SearchAliasImpl.java diff --git a/core/src/main/java/com/arangodb/internal/config/ArangoConfig.java b/core/src/main/java/com/arangodb/internal/config/ArangoConfig.java new file mode 100644 index 000000000..987200ad6 --- /dev/null +++ b/core/src/main/java/com/arangodb/internal/config/ArangoConfig.java @@ -0,0 +1,275 @@ +package com.arangodb.internal.config; + +import com.arangodb.ArangoDBException; +import com.arangodb.Protocol; +import com.arangodb.config.ArangoConfigProperties; +import com.arangodb.config.HostDescription; +import com.arangodb.entity.LoadBalancingStrategy; +import com.arangodb.internal.ArangoDefaults; +import com.arangodb.internal.serde.ContentTypeFactory; +import com.arangodb.internal.serde.InternalSerde; +import com.arangodb.internal.serde.InternalSerdeProvider; +import com.arangodb.serde.ArangoSerde; +import com.arangodb.serde.ArangoSerdeProvider; +import com.fasterxml.jackson.databind.Module; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.SSLContext; +import java.util.*; +import java.util.stream.Collectors; + +public class ArangoConfig { + private final List hosts = new ArrayList<>(); + private Protocol protocol; + private Integer timeout; + private String user; + private String password; + private String jwt; + private Boolean useSsl; + private SSLContext sslContext; + private Boolean verifyHost; + private Integer chunkSize; + private Integer maxConnections; + private Long connectionTtl; + private Integer keepAliveInterval; + private Boolean acquireHostList; + private Integer acquireHostListInterval; + private LoadBalancingStrategy loadBalancingStrategy; + private InternalSerde internalSerde; + private ArangoSerde userDataSerde; + private Integer responseQueueTimeSamples; + private Module protocolModule; + + private static final Logger LOG = LoggerFactory.getLogger(ArangoConfig.class); + + private static ArangoSerdeProvider serdeProvider() { + ServiceLoader loader = ServiceLoader.load(ArangoSerdeProvider.class); + Iterator it = loader.iterator(); + ArangoSerdeProvider serdeProvider; + if (!it.hasNext()) { + LOG.warn("No ArangoSerdeProvider found, using InternalSerdeProvider. Please consider registering a custom " + + "ArangoSerdeProvider to avoid depending on internal classes which are not part of the public API."); + serdeProvider = new InternalSerdeProvider(); + } else { + serdeProvider = it.next(); + if (it.hasNext()) { + throw new ArangoDBException("Found multiple serde providers! Please set explicitly the one to use."); + } + } + return serdeProvider; + } + + public ArangoConfig() { + // load default properties + loadProperties(new ArangoConfigProperties() { + }); + } + + public void loadProperties(final ArangoConfigProperties properties) { + hosts.addAll(properties.getHosts().orElse(ArangoDefaults.DEFAULT_HOSTS).stream() + .map(it -> new HostDescription(it.getHost(), it.getPort())) + .collect(Collectors.toList())); + protocol = properties.getProtocol().orElse(ArangoDefaults.DEFAULT_PROTOCOL); + timeout = properties.getTimeout().orElse(ArangoDefaults.DEFAULT_TIMEOUT); + user = properties.getUser().orElse(ArangoDefaults.DEFAULT_USER); + // FIXME: make password field Optional + password = properties.getPassword().orElse(null); + // FIXME: make jwt field Optional + jwt = properties.getJwt().orElse(null); + useSsl = properties.getUseSsl().orElse(ArangoDefaults.DEFAULT_USE_SSL); + verifyHost = properties.getVerifyHost().orElse(ArangoDefaults.DEFAULT_VERIFY_HOST); + chunkSize = properties.getChunkSize().orElse(ArangoDefaults.DEFAULT_CHUNK_SIZE); + // FIXME: make maxConnections field Optional + maxConnections = properties.getMaxConnections().orElse(null); + // FIXME: make connectionTtl field Optional + connectionTtl = properties.getConnectionTtl().orElse(null); + // FIXME: make keepAliveInterval field Optional + keepAliveInterval = properties.getKeepAliveInterval().orElse(null); + acquireHostList = properties.getAcquireHostList().orElse(ArangoDefaults.DEFAULT_ACQUIRE_HOST_LIST); + acquireHostListInterval = properties.getAcquireHostListInterval().orElse(ArangoDefaults.DEFAULT_ACQUIRE_HOST_LIST_INTERVAL); + loadBalancingStrategy = properties.getLoadBalancingStrategy().orElse(ArangoDefaults.DEFAULT_LOAD_BALANCING_STRATEGY); + responseQueueTimeSamples = properties.getResponseQueueTimeSamples().orElse(ArangoDefaults.DEFAULT_RESPONSE_QUEUE_TIME_SAMPLES); + } + + public List getHosts() { + return hosts; + } + + public void addHost(HostDescription hostDescription) { + hosts.add(hostDescription); + } + + public Protocol getProtocol() { + return protocol; + } + + public void setProtocol(Protocol protocol) { + this.protocol = protocol; + } + + public Integer getTimeout() { + return timeout; + } + + public void setTimeout(Integer timeout) { + this.timeout = timeout; + } + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getJwt() { + return jwt; + } + + public void setJwt(String jwt) { + this.jwt = jwt; + } + + public Boolean getUseSsl() { + return useSsl; + } + + public void setUseSsl(Boolean useSsl) { + this.useSsl = useSsl; + } + + public SSLContext getSslContext() { + return sslContext; + } + + public void setSslContext(SSLContext sslContext) { + this.sslContext = sslContext; + } + + public Boolean getVerifyHost() { + return verifyHost; + } + + public void setVerifyHost(Boolean verifyHost) { + this.verifyHost = verifyHost; + } + + public Integer getChunkSize() { + return chunkSize; + } + + public void setChunkSize(Integer chunkSize) { + this.chunkSize = chunkSize; + } + + public Integer getMaxConnections() { + if (maxConnections == null) { + maxConnections = getDefaultMaxConnections(); + } + return maxConnections; + } + + private int getDefaultMaxConnections() { + int defaultMaxConnections; + switch (getProtocol()) { + case VST: + defaultMaxConnections = ArangoDefaults.MAX_CONNECTIONS_VST_DEFAULT; + break; + case HTTP_JSON: + case HTTP_VPACK: + defaultMaxConnections = ArangoDefaults.MAX_CONNECTIONS_HTTP_DEFAULT; + break; + case HTTP2_JSON: + case HTTP2_VPACK: + defaultMaxConnections = ArangoDefaults.MAX_CONNECTIONS_HTTP2_DEFAULT; + break; + default: + throw new IllegalArgumentException(); + } + return defaultMaxConnections; + } + + public void setMaxConnections(Integer maxConnections) { + this.maxConnections = maxConnections; + } + + public Long getConnectionTtl() { + return connectionTtl; + } + + public void setConnectionTtl(Long connectionTtl) { + this.connectionTtl = connectionTtl; + } + + public Integer getKeepAliveInterval() { + return keepAliveInterval; + } + + public void setKeepAliveInterval(Integer keepAliveInterval) { + this.keepAliveInterval = keepAliveInterval; + } + + public Boolean getAcquireHostList() { + return acquireHostList; + } + + public void setAcquireHostList(Boolean acquireHostList) { + this.acquireHostList = acquireHostList; + } + + public Integer getAcquireHostListInterval() { + return acquireHostListInterval; + } + + public void setAcquireHostListInterval(Integer acquireHostListInterval) { + this.acquireHostListInterval = acquireHostListInterval; + } + + public LoadBalancingStrategy getLoadBalancingStrategy() { + return loadBalancingStrategy; + } + + public void setLoadBalancingStrategy(LoadBalancingStrategy loadBalancingStrategy) { + this.loadBalancingStrategy = loadBalancingStrategy; + } + + public ArangoSerde getUserDataSerde() { + if (userDataSerde == null) { + userDataSerde = serdeProvider().of(ContentTypeFactory.of(getProtocol())); + } + return userDataSerde; + } + + public InternalSerde getInternalSerde() { + if (internalSerde == null) { + internalSerde = InternalSerdeProvider.create(ContentTypeFactory.of(getProtocol()), getUserDataSerde(), protocolModule); + } + return internalSerde; + } + + public void setUserDataSerde(ArangoSerde userDataSerde) { + this.userDataSerde = userDataSerde; + } + + public Integer getResponseQueueTimeSamples() { + return responseQueueTimeSamples; + } + + public void setResponseQueueTimeSamples(Integer responseQueueTimeSamples) { + this.responseQueueTimeSamples = responseQueueTimeSamples; + } + + public void setProtocolModule(Module m) { + protocolModule = m; + } +} diff --git a/driver/src/main/java/com/arangodb/internal/config/ArangoConfigPropertiesImpl.java b/core/src/main/java/com/arangodb/internal/config/ArangoConfigPropertiesImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/config/ArangoConfigPropertiesImpl.java rename to core/src/main/java/com/arangodb/internal/config/ArangoConfigPropertiesImpl.java diff --git a/driver/src/main/java/com/arangodb/internal/cursor/AbstractArangoIterable.java b/core/src/main/java/com/arangodb/internal/cursor/AbstractArangoIterable.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/cursor/AbstractArangoIterable.java rename to core/src/main/java/com/arangodb/internal/cursor/AbstractArangoIterable.java diff --git a/driver/src/main/java/com/arangodb/internal/cursor/ArangoCursorImpl.java b/core/src/main/java/com/arangodb/internal/cursor/ArangoCursorImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/cursor/ArangoCursorImpl.java rename to core/src/main/java/com/arangodb/internal/cursor/ArangoCursorImpl.java diff --git a/driver/src/main/java/com/arangodb/internal/cursor/ArangoCursorIterator.java b/core/src/main/java/com/arangodb/internal/cursor/ArangoCursorIterator.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/cursor/ArangoCursorIterator.java rename to core/src/main/java/com/arangodb/internal/cursor/ArangoCursorIterator.java diff --git a/driver/src/main/java/com/arangodb/internal/cursor/entity/InternalCursorEntity.java b/core/src/main/java/com/arangodb/internal/cursor/entity/InternalCursorEntity.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/cursor/entity/InternalCursorEntity.java rename to core/src/main/java/com/arangodb/internal/cursor/entity/InternalCursorEntity.java diff --git a/driver/src/main/java/com/arangodb/internal/net/AccessType.java b/core/src/main/java/com/arangodb/internal/net/AccessType.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/AccessType.java rename to core/src/main/java/com/arangodb/internal/net/AccessType.java diff --git a/driver/src/main/java/com/arangodb/internal/net/ArangoDBRedirectException.java b/core/src/main/java/com/arangodb/internal/net/ArangoDBRedirectException.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/ArangoDBRedirectException.java rename to core/src/main/java/com/arangodb/internal/net/ArangoDBRedirectException.java diff --git a/core/src/main/java/com/arangodb/internal/net/AsyncCommunication.java b/core/src/main/java/com/arangodb/internal/net/AsyncCommunication.java new file mode 100644 index 000000000..abb630780 --- /dev/null +++ b/core/src/main/java/com/arangodb/internal/net/AsyncCommunication.java @@ -0,0 +1,14 @@ +package com.arangodb.internal.net; + +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.InternalResponse; + +import java.io.Closeable; +import java.util.concurrent.CompletableFuture; + +public interface AsyncCommunication extends Closeable { + + CompletableFuture execute(final InternalRequest request, final HostHandle hostHandle); + void setJwt(String jwt); + +} diff --git a/core/src/main/java/com/arangodb/internal/net/AsyncProtocolProvider.java b/core/src/main/java/com/arangodb/internal/net/AsyncProtocolProvider.java new file mode 100644 index 000000000..d77a8e2a9 --- /dev/null +++ b/core/src/main/java/com/arangodb/internal/net/AsyncProtocolProvider.java @@ -0,0 +1,18 @@ +package com.arangodb.internal.net; + + +import com.arangodb.Protocol; +import com.arangodb.internal.config.ArangoConfig; +import com.fasterxml.jackson.databind.Module; + +public interface AsyncProtocolProvider { + + boolean supportsProtocol(Protocol protocol); + + ConnectionFactory createConnectionFactory(); + + AsyncCommunication createCommunication(ArangoConfig config, HostHandler hostHandler); + + Module protocolModule(); + +} diff --git a/driver/src/main/java/com/arangodb/internal/net/CommunicationProtocol.java b/core/src/main/java/com/arangodb/internal/net/CommunicationProtocol.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/CommunicationProtocol.java rename to core/src/main/java/com/arangodb/internal/net/CommunicationProtocol.java diff --git a/driver/src/main/java/com/arangodb/internal/net/Connection.java b/core/src/main/java/com/arangodb/internal/net/Connection.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/Connection.java rename to core/src/main/java/com/arangodb/internal/net/Connection.java diff --git a/driver/src/main/java/com/arangodb/internal/net/ConnectionFactory.java b/core/src/main/java/com/arangodb/internal/net/ConnectionFactory.java similarity index 87% rename from driver/src/main/java/com/arangodb/internal/net/ConnectionFactory.java rename to core/src/main/java/com/arangodb/internal/net/ConnectionFactory.java index 65c83fc15..ed3d5571c 100644 --- a/driver/src/main/java/com/arangodb/internal/net/ConnectionFactory.java +++ b/core/src/main/java/com/arangodb/internal/net/ConnectionFactory.java @@ -21,12 +21,11 @@ package com.arangodb.internal.net; import com.arangodb.config.HostDescription; +import com.arangodb.internal.config.ArangoConfig; /** * @author Mark Vollmary */ public interface ConnectionFactory { - - Connection create(final HostDescription host); - + Connection create(ArangoConfig config, HostDescription host); } diff --git a/driver/src/main/java/com/arangodb/internal/net/ConnectionPool.java b/core/src/main/java/com/arangodb/internal/net/ConnectionPool.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/ConnectionPool.java rename to core/src/main/java/com/arangodb/internal/net/ConnectionPool.java diff --git a/driver/src/main/java/com/arangodb/internal/net/ConnectionPoolImpl.java b/core/src/main/java/com/arangodb/internal/net/ConnectionPoolImpl.java similarity index 81% rename from driver/src/main/java/com/arangodb/internal/net/ConnectionPoolImpl.java rename to core/src/main/java/com/arangodb/internal/net/ConnectionPoolImpl.java index b393ae421..0de7d3474 100644 --- a/driver/src/main/java/com/arangodb/internal/net/ConnectionPoolImpl.java +++ b/core/src/main/java/com/arangodb/internal/net/ConnectionPoolImpl.java @@ -22,11 +22,7 @@ import com.arangodb.ArangoDBException; import com.arangodb.config.HostDescription; -import com.arangodb.internal.velocystream.internal.VstConnection; -import com.arangodb.internal.velocystream.internal.VstConnectionSync; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - +import com.arangodb.internal.config.ArangoConfig; import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -36,9 +32,8 @@ */ public class ConnectionPoolImpl implements ConnectionPool { - private static final Logger LOGGER = LoggerFactory.getLogger(ConnectionPoolImpl.class); - private final HostDescription host; + private final ArangoConfig config; private final int maxConnections; private final List connections; private final ConnectionFactory factory; @@ -46,11 +41,11 @@ public class ConnectionPoolImpl implements ConnectionPool { private volatile String jwt = null; private boolean closed = false; - public ConnectionPoolImpl(final HostDescription host, final Integer maxConnections, - final ConnectionFactory factory) { + public ConnectionPoolImpl(final HostDescription host, final ArangoConfig config, final ConnectionFactory factory) { super(); this.host = host; - this.maxConnections = maxConnections; + this.config = config; + this.maxConnections = config.getMaxConnections(); this.factory = factory; connections = new ArrayList<>(); current = 0; @@ -58,7 +53,7 @@ public ConnectionPoolImpl(final HostDescription host, final Integer maxConnectio @Override public Connection createConnection(final HostDescription host) { - Connection c = factory.create(host); + Connection c = factory.create(config, host); c.setJwt(jwt); return c; } @@ -80,10 +75,6 @@ public synchronized Connection connection() { connection = connections.get(index); } - if (connection instanceof VstConnectionSync) { - LOGGER.debug("Return Connection {}", ((VstConnection) connection).getConnectionName()); - } - return connection; } diff --git a/driver/src/main/java/com/arangodb/internal/net/DirtyReadHostHandler.java b/core/src/main/java/com/arangodb/internal/net/DirtyReadHostHandler.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/DirtyReadHostHandler.java rename to core/src/main/java/com/arangodb/internal/net/DirtyReadHostHandler.java diff --git a/driver/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java b/core/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java similarity index 95% rename from driver/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java rename to core/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java index ade06a47e..ad2c3c915 100644 --- a/driver/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java +++ b/core/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java @@ -24,6 +24,7 @@ import com.arangodb.DbName; import com.arangodb.config.HostDescription; import com.arangodb.internal.ArangoExecutorSync; +import com.arangodb.internal.config.ArangoConfig; import com.arangodb.internal.serde.InternalSerde; import com.arangodb.internal.util.HostUtils; import com.arangodb.internal.InternalRequest; @@ -44,7 +45,7 @@ public class ExtendedHostResolver implements HostResolver { private final HostSet hosts; - private final Integer maxConnections; + private final ArangoConfig config; private final ConnectionFactory connectionFactory; private final Integer acquireHostListInterval; private long lastUpdate; @@ -52,12 +53,12 @@ public class ExtendedHostResolver implements HostResolver { private InternalSerde arangoSerialization; - public ExtendedHostResolver(final List hosts, final Integer maxConnections, + public ExtendedHostResolver(final List hosts, final ArangoConfig config, final ConnectionFactory connectionFactory, Integer acquireHostListInterval) { this.acquireHostListInterval = acquireHostListInterval; this.hosts = new HostSet(hosts); - this.maxConnections = maxConnections; + this.config = config; this.connectionFactory = connectionFactory; lastUpdate = 0; @@ -94,12 +95,12 @@ public HostSet resolve(boolean initial, boolean closeConnections) { final String[] s = endpoint.replaceAll(".*://", "").split(":"); if (s.length == 2) { final HostDescription description = new HostDescription(s[0], Integer.parseInt(s[1])); - hosts.addHost(HostUtils.createHost(description, maxConnections, connectionFactory)); + hosts.addHost(HostUtils.createHost(description, config, connectionFactory)); } else if (s.length == 4) { // IPV6 Address - TODO: we need a proper function to resolve AND support IPV4 & IPV6 functions // globally final HostDescription description = new HostDescription("127.0.0.1", Integer.parseInt(s[3])); - hosts.addHost(HostUtils.createHost(description, maxConnections, connectionFactory)); + hosts.addHost(HostUtils.createHost(description, config, connectionFactory)); } else { LOGGER.warn("Skip Endpoint (Missing Port) {}", endpoint); } diff --git a/driver/src/main/java/com/arangodb/internal/net/FallbackHostHandler.java b/core/src/main/java/com/arangodb/internal/net/FallbackHostHandler.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/FallbackHostHandler.java rename to core/src/main/java/com/arangodb/internal/net/FallbackHostHandler.java diff --git a/driver/src/main/java/com/arangodb/internal/net/Host.java b/core/src/main/java/com/arangodb/internal/net/Host.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/Host.java rename to core/src/main/java/com/arangodb/internal/net/Host.java diff --git a/driver/src/main/java/com/arangodb/internal/net/HostHandle.java b/core/src/main/java/com/arangodb/internal/net/HostHandle.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/HostHandle.java rename to core/src/main/java/com/arangodb/internal/net/HostHandle.java diff --git a/driver/src/main/java/com/arangodb/internal/net/HostHandler.java b/core/src/main/java/com/arangodb/internal/net/HostHandler.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/HostHandler.java rename to core/src/main/java/com/arangodb/internal/net/HostHandler.java diff --git a/driver/src/main/java/com/arangodb/internal/net/HostImpl.java b/core/src/main/java/com/arangodb/internal/net/HostImpl.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/HostImpl.java rename to core/src/main/java/com/arangodb/internal/net/HostImpl.java diff --git a/driver/src/main/java/com/arangodb/internal/net/HostResolver.java b/core/src/main/java/com/arangodb/internal/net/HostResolver.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/HostResolver.java rename to core/src/main/java/com/arangodb/internal/net/HostResolver.java diff --git a/driver/src/main/java/com/arangodb/internal/net/HostSet.java b/core/src/main/java/com/arangodb/internal/net/HostSet.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/HostSet.java rename to core/src/main/java/com/arangodb/internal/net/HostSet.java diff --git a/core/src/main/java/com/arangodb/internal/net/ProtocolProvider.java b/core/src/main/java/com/arangodb/internal/net/ProtocolProvider.java new file mode 100644 index 000000000..583740938 --- /dev/null +++ b/core/src/main/java/com/arangodb/internal/net/ProtocolProvider.java @@ -0,0 +1,17 @@ +package com.arangodb.internal.net; + + +import com.arangodb.Protocol; +import com.arangodb.internal.config.ArangoConfig; +import com.fasterxml.jackson.databind.Module; + +public interface ProtocolProvider { + + boolean supportsProtocol(Protocol protocol); + + ConnectionFactory createConnectionFactory(); + + CommunicationProtocol createProtocol(ArangoConfig config, HostHandler hostHandler); + + Module protocolModule(); +} diff --git a/driver/src/main/java/com/arangodb/internal/net/RandomHostHandler.java b/core/src/main/java/com/arangodb/internal/net/RandomHostHandler.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/RandomHostHandler.java rename to core/src/main/java/com/arangodb/internal/net/RandomHostHandler.java diff --git a/driver/src/main/java/com/arangodb/internal/net/RoundRobinHostHandler.java b/core/src/main/java/com/arangodb/internal/net/RoundRobinHostHandler.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/RoundRobinHostHandler.java rename to core/src/main/java/com/arangodb/internal/net/RoundRobinHostHandler.java diff --git a/driver/src/main/java/com/arangodb/internal/net/SimpleHostResolver.java b/core/src/main/java/com/arangodb/internal/net/SimpleHostResolver.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/net/SimpleHostResolver.java rename to core/src/main/java/com/arangodb/internal/net/SimpleHostResolver.java diff --git a/driver/src/main/java/com/arangodb/internal/serde/ContentTypeFactory.java b/core/src/main/java/com/arangodb/internal/serde/ContentTypeFactory.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/serde/ContentTypeFactory.java rename to core/src/main/java/com/arangodb/internal/serde/ContentTypeFactory.java diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalAnnotationIntrospector.java b/core/src/main/java/com/arangodb/internal/serde/InternalAnnotationIntrospector.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/serde/InternalAnnotationIntrospector.java rename to core/src/main/java/com/arangodb/internal/serde/InternalAnnotationIntrospector.java diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalDeserializers.java b/core/src/main/java/com/arangodb/internal/serde/InternalDeserializers.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/serde/InternalDeserializers.java rename to core/src/main/java/com/arangodb/internal/serde/InternalDeserializers.java diff --git a/core/src/main/java/com/arangodb/internal/serde/InternalMapperProvider.java b/core/src/main/java/com/arangodb/internal/serde/InternalMapperProvider.java new file mode 100644 index 000000000..241e0893d --- /dev/null +++ b/core/src/main/java/com/arangodb/internal/serde/InternalMapperProvider.java @@ -0,0 +1,31 @@ +package com.arangodb.internal.serde; + +import com.arangodb.ArangoDBException; +import com.arangodb.ContentType; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.util.ServiceLoader; +import java.util.function.Supplier; + +public interface InternalMapperProvider extends Supplier { + static ObjectMapper of(final ContentType contentType) { + String formatName; + if (contentType == ContentType.JSON) { + formatName = "JSON"; + } else if (contentType == ContentType.VPACK) { + formatName = "Velocypack"; + } else { + throw new IllegalArgumentException("Unexpected value: " + contentType); + } + + ServiceLoader sl = ServiceLoader.load(JsonFactory.class); + for (JsonFactory jf : sl) { + if(formatName.equals(jf.getFormatName())){ + return new ObjectMapper(jf); + } + } + + throw new ArangoDBException("No JsonFactory found for content type: " + contentType); + } +} diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalModule.java b/core/src/main/java/com/arangodb/internal/serde/InternalModule.java similarity index 83% rename from driver/src/main/java/com/arangodb/internal/serde/InternalModule.java rename to core/src/main/java/com/arangodb/internal/serde/InternalModule.java index 40943086f..3aeae3c24 100644 --- a/driver/src/main/java/com/arangodb/internal/serde/InternalModule.java +++ b/core/src/main/java/com/arangodb/internal/serde/InternalModule.java @@ -4,8 +4,6 @@ import com.arangodb.entity.CollectionType; import com.arangodb.entity.InvertedIndexPrimarySort; import com.arangodb.entity.ReplicationFactor; -import com.arangodb.internal.velocystream.internal.AuthenticationRequest; -import com.arangodb.internal.velocystream.internal.JwtAuthenticationRequest; import com.arangodb.util.RawBytes; import com.arangodb.util.RawJson; import com.arangodb.internal.InternalRequest; @@ -25,8 +23,6 @@ enum InternalModule implements Supplier { module.addSerializer(RawJson.class, InternalSerializers.RAW_JSON_SERIALIZER); module.addSerializer(RawBytes.class, InternalSerializers.RAW_BYTES_SERIALIZER); - module.addSerializer(AuthenticationRequest.class, InternalSerializers.AUTHENTICATION_REQUEST); - module.addSerializer(JwtAuthenticationRequest.class, InternalSerializers.JWT_AUTHENTICATION_REQUEST); module.addSerializer(InternalRequest.class, InternalSerializers.REQUEST); module.addSerializer(CollectionType.class, InternalSerializers.COLLECTION_TYPE); diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalParameterizedType.java b/core/src/main/java/com/arangodb/internal/serde/InternalParameterizedType.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/serde/InternalParameterizedType.java rename to core/src/main/java/com/arangodb/internal/serde/InternalParameterizedType.java diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalSerde.java b/core/src/main/java/com/arangodb/internal/serde/InternalSerde.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/serde/InternalSerde.java rename to core/src/main/java/com/arangodb/internal/serde/InternalSerde.java diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalSerdeImpl.java b/core/src/main/java/com/arangodb/internal/serde/InternalSerdeImpl.java similarity index 96% rename from driver/src/main/java/com/arangodb/internal/serde/InternalSerdeImpl.java rename to core/src/main/java/com/arangodb/internal/serde/InternalSerdeImpl.java index 12a2dc40c..a7de05b20 100644 --- a/driver/src/main/java/com/arangodb/internal/serde/InternalSerdeImpl.java +++ b/core/src/main/java/com/arangodb/internal/serde/InternalSerdeImpl.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; @@ -29,12 +30,15 @@ final class InternalSerdeImpl implements InternalSerde { private final ArangoSerde userSerde; private final ObjectMapper mapper; - InternalSerdeImpl(final ObjectMapper mapper, final ArangoSerde userSerde) { + InternalSerdeImpl(final ObjectMapper mapper, final ArangoSerde userSerde, final Module protocolModule) { this.mapper = mapper; this.userSerde = userSerde; mapper.deactivateDefaultTyping(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.registerModule(InternalModule.INSTANCE.get()); + if (protocolModule != null) { + mapper.registerModule(protocolModule); + } mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mapper.setAnnotationIntrospector(new InternalAnnotationIntrospector( new UserDataSerializer(this), diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalSerdeProvider.java b/core/src/main/java/com/arangodb/internal/serde/InternalSerdeProvider.java similarity index 73% rename from driver/src/main/java/com/arangodb/internal/serde/InternalSerdeProvider.java rename to core/src/main/java/com/arangodb/internal/serde/InternalSerdeProvider.java index 9136d6a68..4044d6f17 100644 --- a/driver/src/main/java/com/arangodb/internal/serde/InternalSerdeProvider.java +++ b/core/src/main/java/com/arangodb/internal/serde/InternalSerdeProvider.java @@ -3,6 +3,7 @@ import com.arangodb.ContentType; import com.arangodb.serde.ArangoSerde; import com.arangodb.serde.ArangoSerdeProvider; +import com.fasterxml.jackson.databind.Module; public class InternalSerdeProvider implements ArangoSerdeProvider { @@ -14,17 +15,19 @@ public class InternalSerdeProvider implements ArangoSerdeProvider { */ @Override public InternalSerde of(final ContentType contentType) { - return create(contentType, null); + return create(contentType, null, null); } /** * Creates a new InternalSerde with default settings for the specified data type. * * @param contentType serialization target data type + * @param userSerde user serde + * @param protocolModule optional Jackson module to support protocol specific types * @return the created InternalSerde */ - public static InternalSerde create(final ContentType contentType, ArangoSerde userSerde) { - return new InternalSerdeImpl(InternalMapperProvider.of(contentType), userSerde); + public static InternalSerde create(final ContentType contentType, ArangoSerde userSerde, Module protocolModule) { + return new InternalSerdeImpl(InternalMapperProvider.of(contentType), userSerde, protocolModule); } } diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalSerializers.java b/core/src/main/java/com/arangodb/internal/serde/InternalSerializers.java similarity index 73% rename from driver/src/main/java/com/arangodb/internal/serde/InternalSerializers.java rename to core/src/main/java/com/arangodb/internal/serde/InternalSerializers.java index 7012f67fc..813025c49 100644 --- a/driver/src/main/java/com/arangodb/internal/serde/InternalSerializers.java +++ b/core/src/main/java/com/arangodb/internal/serde/InternalSerializers.java @@ -3,8 +3,6 @@ import com.arangodb.entity.CollectionType; import com.arangodb.entity.arangosearch.CollectionLink; import com.arangodb.entity.arangosearch.FieldLink; -import com.arangodb.internal.velocystream.internal.AuthenticationRequest; -import com.arangodb.internal.velocystream.internal.JwtAuthenticationRequest; import com.arangodb.util.RawBytes; import com.arangodb.util.RawJson; import com.arangodb.internal.InternalRequest; @@ -36,32 +34,6 @@ public void serialize(RawBytes value, JsonGenerator gen, SerializerProvider seri } } }; - static final JsonSerializer AUTHENTICATION_REQUEST = - new JsonSerializer() { - @Override - public void serialize(AuthenticationRequest value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeStartArray(); - gen.writeNumber(value.getVersion()); - gen.writeNumber(value.getType()); - gen.writeString(value.getEncryption()); - gen.writeString(value.getUser()); - gen.writeString(value.getPassword()); - gen.writeEndArray(); - } - }; - static final JsonSerializer JWT_AUTHENTICATION_REQUEST = - new JsonSerializer() { - @Override - public void serialize(JwtAuthenticationRequest value, JsonGenerator gen, - SerializerProvider serializers) throws IOException { - gen.writeStartArray(); - gen.writeNumber(value.getVersion()); - gen.writeNumber(value.getType()); - gen.writeString(value.getEncryption()); - gen.writeString(value.getToken()); - gen.writeEndArray(); - } - }; static final JsonSerializer REQUEST = new JsonSerializer() { @Override public void serialize(InternalRequest value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/driver/src/main/java/com/arangodb/internal/serde/SerdeUtils.java b/core/src/main/java/com/arangodb/internal/serde/SerdeUtils.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/serde/SerdeUtils.java rename to core/src/main/java/com/arangodb/internal/serde/SerdeUtils.java diff --git a/driver/src/main/java/com/arangodb/internal/serde/UserData.java b/core/src/main/java/com/arangodb/internal/serde/UserData.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/serde/UserData.java rename to core/src/main/java/com/arangodb/internal/serde/UserData.java diff --git a/driver/src/main/java/com/arangodb/internal/serde/UserDataDeserializer.java b/core/src/main/java/com/arangodb/internal/serde/UserDataDeserializer.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/serde/UserDataDeserializer.java rename to core/src/main/java/com/arangodb/internal/serde/UserDataDeserializer.java diff --git a/driver/src/main/java/com/arangodb/internal/serde/UserDataInside.java b/core/src/main/java/com/arangodb/internal/serde/UserDataInside.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/serde/UserDataInside.java rename to core/src/main/java/com/arangodb/internal/serde/UserDataInside.java diff --git a/driver/src/main/java/com/arangodb/internal/serde/UserDataSerializer.java b/core/src/main/java/com/arangodb/internal/serde/UserDataSerializer.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/serde/UserDataSerializer.java rename to core/src/main/java/com/arangodb/internal/serde/UserDataSerializer.java diff --git a/driver/src/main/java/com/arangodb/internal/util/DocumentUtil.java b/core/src/main/java/com/arangodb/internal/util/DocumentUtil.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/util/DocumentUtil.java rename to core/src/main/java/com/arangodb/internal/util/DocumentUtil.java diff --git a/driver/src/main/java/com/arangodb/internal/util/EncodeUtils.java b/core/src/main/java/com/arangodb/internal/util/EncodeUtils.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/util/EncodeUtils.java rename to core/src/main/java/com/arangodb/internal/util/EncodeUtils.java diff --git a/driver/src/main/java/com/arangodb/internal/util/HostUtils.java b/core/src/main/java/com/arangodb/internal/util/HostUtils.java similarity index 92% rename from driver/src/main/java/com/arangodb/internal/util/HostUtils.java rename to core/src/main/java/com/arangodb/internal/util/HostUtils.java index c03d955b0..591ed91af 100644 --- a/driver/src/main/java/com/arangodb/internal/util/HostUtils.java +++ b/core/src/main/java/com/arangodb/internal/util/HostUtils.java @@ -21,6 +21,7 @@ package com.arangodb.internal.util; import com.arangodb.config.HostDescription; +import com.arangodb.internal.config.ArangoConfig; import com.arangodb.internal.net.*; /** @@ -45,8 +46,8 @@ public static HostDescription createFromLocation(final String location) { public static Host createHost( final HostDescription description, - final int maxConnections, + final ArangoConfig config, final ConnectionFactory factory) { - return new HostImpl(new ConnectionPoolImpl(description, maxConnections, factory), description); + return new HostImpl(new ConnectionPoolImpl(description, config, factory), description); } } diff --git a/driver/src/main/java/com/arangodb/internal/util/RequestUtils.java b/core/src/main/java/com/arangodb/internal/util/RequestUtils.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/util/RequestUtils.java rename to core/src/main/java/com/arangodb/internal/util/RequestUtils.java diff --git a/driver/src/main/java/com/arangodb/internal/util/ResponseUtils.java b/core/src/main/java/com/arangodb/internal/util/ResponseUtils.java similarity index 100% rename from driver/src/main/java/com/arangodb/internal/util/ResponseUtils.java rename to core/src/main/java/com/arangodb/internal/util/ResponseUtils.java diff --git a/driver/src/main/java/com/arangodb/model/AqlFunctionCreateOptions.java b/core/src/main/java/com/arangodb/model/AqlFunctionCreateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/AqlFunctionCreateOptions.java rename to core/src/main/java/com/arangodb/model/AqlFunctionCreateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/AqlFunctionDeleteOptions.java b/core/src/main/java/com/arangodb/model/AqlFunctionDeleteOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/AqlFunctionDeleteOptions.java rename to core/src/main/java/com/arangodb/model/AqlFunctionDeleteOptions.java diff --git a/driver/src/main/java/com/arangodb/model/AqlFunctionGetOptions.java b/core/src/main/java/com/arangodb/model/AqlFunctionGetOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/AqlFunctionGetOptions.java rename to core/src/main/java/com/arangodb/model/AqlFunctionGetOptions.java diff --git a/driver/src/main/java/com/arangodb/model/AqlQueryExplainOptions.java b/core/src/main/java/com/arangodb/model/AqlQueryExplainOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/AqlQueryExplainOptions.java rename to core/src/main/java/com/arangodb/model/AqlQueryExplainOptions.java diff --git a/driver/src/main/java/com/arangodb/model/AqlQueryOptions.java b/core/src/main/java/com/arangodb/model/AqlQueryOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/AqlQueryOptions.java rename to core/src/main/java/com/arangodb/model/AqlQueryOptions.java diff --git a/driver/src/main/java/com/arangodb/model/AqlQueryParseOptions.java b/core/src/main/java/com/arangodb/model/AqlQueryParseOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/AqlQueryParseOptions.java rename to core/src/main/java/com/arangodb/model/AqlQueryParseOptions.java diff --git a/driver/src/main/java/com/arangodb/model/CollectionCountOptions.java b/core/src/main/java/com/arangodb/model/CollectionCountOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/CollectionCountOptions.java rename to core/src/main/java/com/arangodb/model/CollectionCountOptions.java diff --git a/driver/src/main/java/com/arangodb/model/CollectionCreateOptions.java b/core/src/main/java/com/arangodb/model/CollectionCreateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/CollectionCreateOptions.java rename to core/src/main/java/com/arangodb/model/CollectionCreateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/CollectionPropertiesOptions.java b/core/src/main/java/com/arangodb/model/CollectionPropertiesOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/CollectionPropertiesOptions.java rename to core/src/main/java/com/arangodb/model/CollectionPropertiesOptions.java diff --git a/driver/src/main/java/com/arangodb/model/CollectionRenameOptions.java b/core/src/main/java/com/arangodb/model/CollectionRenameOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/CollectionRenameOptions.java rename to core/src/main/java/com/arangodb/model/CollectionRenameOptions.java diff --git a/driver/src/main/java/com/arangodb/model/CollectionSchema.java b/core/src/main/java/com/arangodb/model/CollectionSchema.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/CollectionSchema.java rename to core/src/main/java/com/arangodb/model/CollectionSchema.java diff --git a/driver/src/main/java/com/arangodb/model/CollectionTruncateOptions.java b/core/src/main/java/com/arangodb/model/CollectionTruncateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/CollectionTruncateOptions.java rename to core/src/main/java/com/arangodb/model/CollectionTruncateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/CollectionsReadOptions.java b/core/src/main/java/com/arangodb/model/CollectionsReadOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/CollectionsReadOptions.java rename to core/src/main/java/com/arangodb/model/CollectionsReadOptions.java diff --git a/driver/src/main/java/com/arangodb/model/ComputedValue.java b/core/src/main/java/com/arangodb/model/ComputedValue.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/ComputedValue.java rename to core/src/main/java/com/arangodb/model/ComputedValue.java diff --git a/driver/src/main/java/com/arangodb/model/DBCreateOptions.java b/core/src/main/java/com/arangodb/model/DBCreateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/DBCreateOptions.java rename to core/src/main/java/com/arangodb/model/DBCreateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/DatabaseOptions.java b/core/src/main/java/com/arangodb/model/DatabaseOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/DatabaseOptions.java rename to core/src/main/java/com/arangodb/model/DatabaseOptions.java diff --git a/driver/src/main/java/com/arangodb/model/DatabaseUsersOptions.java b/core/src/main/java/com/arangodb/model/DatabaseUsersOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/DatabaseUsersOptions.java rename to core/src/main/java/com/arangodb/model/DatabaseUsersOptions.java diff --git a/driver/src/main/java/com/arangodb/model/DocumentCreateOptions.java b/core/src/main/java/com/arangodb/model/DocumentCreateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/DocumentCreateOptions.java rename to core/src/main/java/com/arangodb/model/DocumentCreateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/DocumentDeleteOptions.java b/core/src/main/java/com/arangodb/model/DocumentDeleteOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/DocumentDeleteOptions.java rename to core/src/main/java/com/arangodb/model/DocumentDeleteOptions.java diff --git a/driver/src/main/java/com/arangodb/model/DocumentExistsOptions.java b/core/src/main/java/com/arangodb/model/DocumentExistsOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/DocumentExistsOptions.java rename to core/src/main/java/com/arangodb/model/DocumentExistsOptions.java diff --git a/driver/src/main/java/com/arangodb/model/DocumentImportOptions.java b/core/src/main/java/com/arangodb/model/DocumentImportOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/DocumentImportOptions.java rename to core/src/main/java/com/arangodb/model/DocumentImportOptions.java diff --git a/driver/src/main/java/com/arangodb/model/DocumentReadOptions.java b/core/src/main/java/com/arangodb/model/DocumentReadOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/DocumentReadOptions.java rename to core/src/main/java/com/arangodb/model/DocumentReadOptions.java diff --git a/driver/src/main/java/com/arangodb/model/DocumentReplaceOptions.java b/core/src/main/java/com/arangodb/model/DocumentReplaceOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/DocumentReplaceOptions.java rename to core/src/main/java/com/arangodb/model/DocumentReplaceOptions.java diff --git a/driver/src/main/java/com/arangodb/model/DocumentUpdateOptions.java b/core/src/main/java/com/arangodb/model/DocumentUpdateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/DocumentUpdateOptions.java rename to core/src/main/java/com/arangodb/model/DocumentUpdateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/EdgeCreateOptions.java b/core/src/main/java/com/arangodb/model/EdgeCreateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/EdgeCreateOptions.java rename to core/src/main/java/com/arangodb/model/EdgeCreateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/EdgeDeleteOptions.java b/core/src/main/java/com/arangodb/model/EdgeDeleteOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/EdgeDeleteOptions.java rename to core/src/main/java/com/arangodb/model/EdgeDeleteOptions.java diff --git a/driver/src/main/java/com/arangodb/model/EdgeReplaceOptions.java b/core/src/main/java/com/arangodb/model/EdgeReplaceOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/EdgeReplaceOptions.java rename to core/src/main/java/com/arangodb/model/EdgeReplaceOptions.java diff --git a/driver/src/main/java/com/arangodb/model/EdgeUpdateOptions.java b/core/src/main/java/com/arangodb/model/EdgeUpdateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/EdgeUpdateOptions.java rename to core/src/main/java/com/arangodb/model/EdgeUpdateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/FulltextIndexOptions.java b/core/src/main/java/com/arangodb/model/FulltextIndexOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/FulltextIndexOptions.java rename to core/src/main/java/com/arangodb/model/FulltextIndexOptions.java diff --git a/driver/src/main/java/com/arangodb/model/GeoIndexOptions.java b/core/src/main/java/com/arangodb/model/GeoIndexOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/GeoIndexOptions.java rename to core/src/main/java/com/arangodb/model/GeoIndexOptions.java diff --git a/driver/src/main/java/com/arangodb/model/GraphCreateOptions.java b/core/src/main/java/com/arangodb/model/GraphCreateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/GraphCreateOptions.java rename to core/src/main/java/com/arangodb/model/GraphCreateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/GraphDocumentReadOptions.java b/core/src/main/java/com/arangodb/model/GraphDocumentReadOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/GraphDocumentReadOptions.java rename to core/src/main/java/com/arangodb/model/GraphDocumentReadOptions.java diff --git a/driver/src/main/java/com/arangodb/model/HashIndexOptions.java b/core/src/main/java/com/arangodb/model/HashIndexOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/HashIndexOptions.java rename to core/src/main/java/com/arangodb/model/HashIndexOptions.java diff --git a/driver/src/main/java/com/arangodb/model/ImportType.java b/core/src/main/java/com/arangodb/model/ImportType.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/ImportType.java rename to core/src/main/java/com/arangodb/model/ImportType.java diff --git a/driver/src/main/java/com/arangodb/model/IndexOptions.java b/core/src/main/java/com/arangodb/model/IndexOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/IndexOptions.java rename to core/src/main/java/com/arangodb/model/IndexOptions.java diff --git a/driver/src/main/java/com/arangodb/model/InvertedIndexOptions.java b/core/src/main/java/com/arangodb/model/InvertedIndexOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/InvertedIndexOptions.java rename to core/src/main/java/com/arangodb/model/InvertedIndexOptions.java diff --git a/driver/src/main/java/com/arangodb/model/LogOptions.java b/core/src/main/java/com/arangodb/model/LogOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/LogOptions.java rename to core/src/main/java/com/arangodb/model/LogOptions.java diff --git a/driver/src/main/java/com/arangodb/model/OptionsBuilder.java b/core/src/main/java/com/arangodb/model/OptionsBuilder.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/OptionsBuilder.java rename to core/src/main/java/com/arangodb/model/OptionsBuilder.java diff --git a/driver/src/main/java/com/arangodb/model/OverwriteMode.java b/core/src/main/java/com/arangodb/model/OverwriteMode.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/OverwriteMode.java rename to core/src/main/java/com/arangodb/model/OverwriteMode.java diff --git a/driver/src/main/java/com/arangodb/model/PersistentIndexOptions.java b/core/src/main/java/com/arangodb/model/PersistentIndexOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/PersistentIndexOptions.java rename to core/src/main/java/com/arangodb/model/PersistentIndexOptions.java diff --git a/driver/src/main/java/com/arangodb/model/QueueTimeSample.java b/core/src/main/java/com/arangodb/model/QueueTimeSample.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/QueueTimeSample.java rename to core/src/main/java/com/arangodb/model/QueueTimeSample.java diff --git a/driver/src/main/java/com/arangodb/model/SkiplistIndexOptions.java b/core/src/main/java/com/arangodb/model/SkiplistIndexOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/SkiplistIndexOptions.java rename to core/src/main/java/com/arangodb/model/SkiplistIndexOptions.java diff --git a/driver/src/main/java/com/arangodb/model/StreamTransactionOptions.java b/core/src/main/java/com/arangodb/model/StreamTransactionOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/StreamTransactionOptions.java rename to core/src/main/java/com/arangodb/model/StreamTransactionOptions.java diff --git a/driver/src/main/java/com/arangodb/model/TransactionCollectionOptions.java b/core/src/main/java/com/arangodb/model/TransactionCollectionOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/TransactionCollectionOptions.java rename to core/src/main/java/com/arangodb/model/TransactionCollectionOptions.java diff --git a/driver/src/main/java/com/arangodb/model/TransactionOptions.java b/core/src/main/java/com/arangodb/model/TransactionOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/TransactionOptions.java rename to core/src/main/java/com/arangodb/model/TransactionOptions.java diff --git a/driver/src/main/java/com/arangodb/model/TtlIndexOptions.java b/core/src/main/java/com/arangodb/model/TtlIndexOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/TtlIndexOptions.java rename to core/src/main/java/com/arangodb/model/TtlIndexOptions.java diff --git a/driver/src/main/java/com/arangodb/model/UserAccessOptions.java b/core/src/main/java/com/arangodb/model/UserAccessOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/UserAccessOptions.java rename to core/src/main/java/com/arangodb/model/UserAccessOptions.java diff --git a/driver/src/main/java/com/arangodb/model/UserCreateOptions.java b/core/src/main/java/com/arangodb/model/UserCreateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/UserCreateOptions.java rename to core/src/main/java/com/arangodb/model/UserCreateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/UserUpdateOptions.java b/core/src/main/java/com/arangodb/model/UserUpdateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/UserUpdateOptions.java rename to core/src/main/java/com/arangodb/model/UserUpdateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/VertexCollectionCreateOptions.java b/core/src/main/java/com/arangodb/model/VertexCollectionCreateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/VertexCollectionCreateOptions.java rename to core/src/main/java/com/arangodb/model/VertexCollectionCreateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/VertexCreateOptions.java b/core/src/main/java/com/arangodb/model/VertexCreateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/VertexCreateOptions.java rename to core/src/main/java/com/arangodb/model/VertexCreateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/VertexDeleteOptions.java b/core/src/main/java/com/arangodb/model/VertexDeleteOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/VertexDeleteOptions.java rename to core/src/main/java/com/arangodb/model/VertexDeleteOptions.java diff --git a/driver/src/main/java/com/arangodb/model/VertexReplaceOptions.java b/core/src/main/java/com/arangodb/model/VertexReplaceOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/VertexReplaceOptions.java rename to core/src/main/java/com/arangodb/model/VertexReplaceOptions.java diff --git a/driver/src/main/java/com/arangodb/model/VertexUpdateOptions.java b/core/src/main/java/com/arangodb/model/VertexUpdateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/VertexUpdateOptions.java rename to core/src/main/java/com/arangodb/model/VertexUpdateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/ViewCreateOptions.java b/core/src/main/java/com/arangodb/model/ViewCreateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/ViewCreateOptions.java rename to core/src/main/java/com/arangodb/model/ViewCreateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/ViewRenameOptions.java b/core/src/main/java/com/arangodb/model/ViewRenameOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/ViewRenameOptions.java rename to core/src/main/java/com/arangodb/model/ViewRenameOptions.java diff --git a/driver/src/main/java/com/arangodb/model/ZKDIndexOptions.java b/core/src/main/java/com/arangodb/model/ZKDIndexOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/ZKDIndexOptions.java rename to core/src/main/java/com/arangodb/model/ZKDIndexOptions.java diff --git a/driver/src/main/java/com/arangodb/model/arangosearch/AnalyzerDeleteOptions.java b/core/src/main/java/com/arangodb/model/arangosearch/AnalyzerDeleteOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/arangosearch/AnalyzerDeleteOptions.java rename to core/src/main/java/com/arangodb/model/arangosearch/AnalyzerDeleteOptions.java diff --git a/driver/src/main/java/com/arangodb/model/arangosearch/ArangoSearchCreateOptions.java b/core/src/main/java/com/arangodb/model/arangosearch/ArangoSearchCreateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/arangosearch/ArangoSearchCreateOptions.java rename to core/src/main/java/com/arangodb/model/arangosearch/ArangoSearchCreateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/arangosearch/ArangoSearchOptionsBuilder.java b/core/src/main/java/com/arangodb/model/arangosearch/ArangoSearchOptionsBuilder.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/arangosearch/ArangoSearchOptionsBuilder.java rename to core/src/main/java/com/arangodb/model/arangosearch/ArangoSearchOptionsBuilder.java diff --git a/driver/src/main/java/com/arangodb/model/arangosearch/ArangoSearchPropertiesOptions.java b/core/src/main/java/com/arangodb/model/arangosearch/ArangoSearchPropertiesOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/arangosearch/ArangoSearchPropertiesOptions.java rename to core/src/main/java/com/arangodb/model/arangosearch/ArangoSearchPropertiesOptions.java diff --git a/driver/src/main/java/com/arangodb/model/arangosearch/SearchAliasCreateOptions.java b/core/src/main/java/com/arangodb/model/arangosearch/SearchAliasCreateOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/arangosearch/SearchAliasCreateOptions.java rename to core/src/main/java/com/arangodb/model/arangosearch/SearchAliasCreateOptions.java diff --git a/driver/src/main/java/com/arangodb/model/arangosearch/SearchAliasOptionsBuilder.java b/core/src/main/java/com/arangodb/model/arangosearch/SearchAliasOptionsBuilder.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/arangosearch/SearchAliasOptionsBuilder.java rename to core/src/main/java/com/arangodb/model/arangosearch/SearchAliasOptionsBuilder.java diff --git a/driver/src/main/java/com/arangodb/model/arangosearch/SearchAliasPropertiesOptions.java b/core/src/main/java/com/arangodb/model/arangosearch/SearchAliasPropertiesOptions.java similarity index 100% rename from driver/src/main/java/com/arangodb/model/arangosearch/SearchAliasPropertiesOptions.java rename to core/src/main/java/com/arangodb/model/arangosearch/SearchAliasPropertiesOptions.java diff --git a/serde-api/src/main/java/com/arangodb/serde/ArangoSerde.java b/core/src/main/java/com/arangodb/serde/ArangoSerde.java similarity index 100% rename from serde-api/src/main/java/com/arangodb/serde/ArangoSerde.java rename to core/src/main/java/com/arangodb/serde/ArangoSerde.java diff --git a/serde-api/src/main/java/com/arangodb/serde/ArangoSerdeProvider.java b/core/src/main/java/com/arangodb/serde/ArangoSerdeProvider.java similarity index 100% rename from serde-api/src/main/java/com/arangodb/serde/ArangoSerdeProvider.java rename to core/src/main/java/com/arangodb/serde/ArangoSerdeProvider.java diff --git a/driver/src/main/java/com/arangodb/util/RawBytes.java b/core/src/main/java/com/arangodb/util/RawBytes.java similarity index 100% rename from driver/src/main/java/com/arangodb/util/RawBytes.java rename to core/src/main/java/com/arangodb/util/RawBytes.java diff --git a/driver/src/main/java/com/arangodb/util/RawData.java b/core/src/main/java/com/arangodb/util/RawData.java similarity index 100% rename from driver/src/main/java/com/arangodb/util/RawData.java rename to core/src/main/java/com/arangodb/util/RawData.java diff --git a/driver/src/main/java/com/arangodb/util/RawJson.java b/core/src/main/java/com/arangodb/util/RawJson.java similarity index 100% rename from driver/src/main/java/com/arangodb/util/RawJson.java rename to core/src/main/java/com/arangodb/util/RawJson.java diff --git a/driver/src/main/java/com/arangodb/util/UnicodeUtils.java b/core/src/main/java/com/arangodb/util/UnicodeUtils.java similarity index 100% rename from driver/src/main/java/com/arangodb/util/UnicodeUtils.java rename to core/src/main/java/com/arangodb/util/UnicodeUtils.java diff --git a/docs/v7_detailed_changes.md b/docs/v7_detailed_changes.md index 2b6bf34d1..f3e873477 100644 --- a/docs/v7_detailed_changes.md +++ b/docs/v7_detailed_changes.md @@ -9,7 +9,7 @@ In your `pom.xml` include the dependency: com.arangodb arangodb-java-driver - 7.0.0-ALPHA.1 + 7.0.0-ALPHA.2 ``` diff --git a/docs/v7_java-reference-serialization.md b/docs/v7_java-reference-serialization.md index a2459abca..da9127f08 100644 --- a/docs/v7_java-reference-serialization.md +++ b/docs/v7_java-reference-serialization.md @@ -38,7 +38,7 @@ The default user-data serde is `JacksonSerde`, which is provided by the module ` This is used by default from the driver, if no custom serde is registered explicitly. It is implemented delegating [Jackson](https://github.com/FasterXML/jackson) `ObjectMapper`, therefore it is compatible with Jackson Streaming, Data Binding and Tree Model API. -It supports both `JSON` and `VPACK` data formats. To use `VPACK`, the optional dependency on +It supports both `JSON` and `VPACK` data formats. To use `VPACK`, the additional dependency on [jackson-dataformat-velocypack](https://github.com/arangodb/jackson-dataformat-velocypack) is required. diff --git a/driver/pom.xml b/driver/pom.xml index 269d92cbd..e379c3639 100644 --- a/driver/pom.xml +++ b/driver/pom.xml @@ -7,7 +7,7 @@ arangodb-java-driver-parent com.arangodb - 7.0.0-ALPHA.1 + 7.0.0-ALPHA.2 arangodb-java-driver @@ -94,48 +94,6 @@ - - com.google.code.maven-replacer-plugin - replacer - 1.5.3 - - - generate-sources - - replace - - - - - ${project.basedir}/src/main/java/com/arangodb/PackageVersion.java.in - ${project.build.directory}/generated-sources/replacer/com/arangodb/PackageVersion.java - - - - @project.version@ - ${project.version} - - - - - - org.codehaus.mojo - build-helper-maven-plugin - 3.3.0 - - - generate-sources - - add-source - - - - ${project.build.directory}/generated-sources/replacer - - - - - org.apache.maven.plugins maven-enforcer-plugin @@ -157,35 +115,6 @@ - - maven-shade-plugin - 3.4.1 - - - package - - shade - - - true - true - - - com.arangodb:serde-api - - - - - com.arangodb:serde-api - - META-INF/MANIFEST.MF - - - - - - - org.codehaus.mojo flatten-maven-plugin @@ -196,42 +125,25 @@ com.arangodb - serde-api + core com.arangodb - jackson-serde + http-protocol - org.slf4j - slf4j-api - - - com.fasterxml.jackson.core - jackson-databind - - - com.fasterxml.jackson.core - jackson-core - - - com.fasterxml.jackson.core - jackson-annotations - - - io.vertx - vertx-web-client + com.arangodb + jackson-serde com.arangodb jackson-dataformat-velocypack - true + test - com.google.code.findbugs - jsr305 - 3.0.2 - provided + com.arangodb + vst-protocol + test org.reflections diff --git a/driver/src/main/java/com/arangodb/async/internal/velocystream/VstConnectionAsync.java b/driver/src/main/java/com/arangodb/async/internal/velocystream/VstConnectionAsync.java deleted file mode 100644 index 0e94bcc30..000000000 --- a/driver/src/main/java/com/arangodb/async/internal/velocystream/VstConnectionAsync.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * DISCLAIMER - * - * Copyright 2016 ArangoDB GmbH, Cologne, Germany - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Copyright holder is ArangoDB GmbH, Cologne, Germany - */ - -package com.arangodb.async.internal.velocystream; - -import com.arangodb.async.internal.utils.CompletableFutureUtils; -import com.arangodb.config.HostDescription; -import com.arangodb.internal.velocystream.internal.Chunk; -import com.arangodb.internal.velocystream.internal.Message; -import com.arangodb.internal.velocystream.internal.MessageStore; -import com.arangodb.internal.velocystream.internal.VstConnection; - -import javax.net.ssl.SSLContext; -import java.util.Collection; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.FutureTask; -import java.util.concurrent.TimeUnit; - -/** - * @author Mark Vollmary - */ -public class VstConnectionAsync extends VstConnection> { - - private VstConnectionAsync(final HostDescription host, final Integer timeout, final Long ttl, - final Integer keepAliveInterval, - final Boolean useSsl, final SSLContext sslContext, final MessageStore messageStore) { - super(host, timeout, ttl, keepAliveInterval, useSsl, sslContext, messageStore); - } - - @Override - public synchronized CompletableFuture write(final Message message, final Collection chunks) { - final CompletableFuture future = new CompletableFuture<>(); - final FutureTask task = new FutureTask<>(() -> { - try { - future.complete(messageStore.get(message.getId())); - } catch (final Exception e) { - future.completeExceptionally(e); - } - return null; - }); - messageStore.storeMessage(message.getId(), task); - super.writeIntern(message, chunks); - if (timeout == null || timeout == 0L) { - return future; - } else { - return CompletableFutureUtils.orTimeout(future, timeout, TimeUnit.MILLISECONDS); - } - } - - @Override - protected void doKeepAlive() { - sendKeepAlive().join(); - } - - public static class Builder { - - private MessageStore messageStore; - private HostDescription host; - private Integer timeout; - private Long ttl; - private Integer keepAliveInterval; - private Boolean useSsl; - private SSLContext sslContext; - - public Builder() { - super(); - } - - public Builder messageStore(final MessageStore messageStore) { - this.messageStore = messageStore; - return this; - } - - public Builder host(final HostDescription host) { - this.host = host; - return this; - } - - public Builder timeout(final Integer timeout) { - this.timeout = timeout; - return this; - } - - public Builder ttl(final Long ttl) { - this.ttl = ttl; - return this; - } - - public Builder keepAliveInterval(final Integer keepAliveInterval) { - this.keepAliveInterval = keepAliveInterval; - return this; - } - - public Builder useSsl(final Boolean useSsl) { - this.useSsl = useSsl; - return this; - } - - public Builder sslContext(final SSLContext sslContext) { - this.sslContext = sslContext; - return this; - } - - public VstConnectionAsync build() { - return new VstConnectionAsync(host, timeout, ttl, keepAliveInterval, useSsl, sslContext, messageStore); - } - } - -} diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoDBBuilder.java b/driver/src/main/java/com/arangodb/internal/InternalArangoDBBuilder.java deleted file mode 100644 index b98d9b561..000000000 --- a/driver/src/main/java/com/arangodb/internal/InternalArangoDBBuilder.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * DISCLAIMER - * - * Copyright 2018 ArangoDB GmbH, Cologne, Germany - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Copyright holder is ArangoDB GmbH, Cologne, Germany - */ - -package com.arangodb.internal; - -import com.arangodb.ArangoDBException; -import com.arangodb.Protocol; -import com.arangodb.config.ArangoConfigProperties; -import com.arangodb.config.HostDescription; -import com.arangodb.entity.LoadBalancingStrategy; -import com.arangodb.internal.net.*; -import com.arangodb.internal.serde.InternalSerdeProvider; -import com.arangodb.internal.util.HostUtils; -import com.arangodb.serde.ArangoSerde; -import com.arangodb.serde.ArangoSerdeProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.net.ssl.SSLContext; -import java.util.*; -import java.util.stream.Collectors; - - -/** - * @author Mark Vollmary - */ -public abstract class InternalArangoDBBuilder { - private static final Logger LOG = LoggerFactory.getLogger(InternalArangoDBBuilder.class); - - protected final List hosts = new ArrayList<>(); - protected Protocol protocol; - protected Integer timeout; - protected String user; - protected String password; - protected String jwt; - protected Boolean useSsl; - protected SSLContext sslContext; - protected Boolean verifyHost; - protected Integer chunkSize; - protected Integer maxConnections; - protected Long connectionTtl; - protected Integer keepAliveInterval; - protected Boolean acquireHostList; - protected Integer acquireHostListInterval; - protected LoadBalancingStrategy loadBalancingStrategy; - protected ArangoSerde userDataSerde; - protected Integer responseQueueTimeSamples; - - protected InternalArangoDBBuilder() { - // load default properties - doLoadProperties(new ArangoConfigProperties() { - }); - } - - protected static ArangoSerdeProvider serdeProvider() { - ServiceLoader loader = ServiceLoader.load(ArangoSerdeProvider.class); - Iterator it = loader.iterator(); - ArangoSerdeProvider serdeProvider; - if (!it.hasNext()) { - LOG.warn("No ArangoSerdeProvider found, using InternalSerdeProvider. Please consider registering a custom " + - "ArangoSerdeProvider to avoid depending on internal classes which are not part of the public API."); - serdeProvider = new InternalSerdeProvider(); - } else { - serdeProvider = it.next(); - if (it.hasNext()) { - throw new ArangoDBException("Found multiple serde providers! Please set explicitly the one to use."); - } - } - return serdeProvider; - } - - protected void doLoadProperties(final ArangoConfigProperties properties) { - hosts.addAll(properties.getHosts().orElse(ArangoDefaults.DEFAULT_HOSTS).stream() - .map(it -> new HostDescription(it.getHost(), it.getPort())) - .collect(Collectors.toList())); - protocol = properties.getProtocol().orElse(ArangoDefaults.DEFAULT_PROTOCOL); - timeout = properties.getTimeout().orElse(ArangoDefaults.DEFAULT_TIMEOUT); - user = properties.getUser().orElse(ArangoDefaults.DEFAULT_USER); - // FIXME: make password field Optional - password = properties.getPassword().orElse(null); - // FIXME: make jwt field Optional - jwt = properties.getJwt().orElse(null); - useSsl = properties.getUseSsl().orElse(ArangoDefaults.DEFAULT_USE_SSL); - verifyHost = properties.getVerifyHost().orElse(ArangoDefaults.DEFAULT_VERIFY_HOST); - chunkSize = properties.getChunkSize().orElse(ArangoDefaults.DEFAULT_CHUNK_SIZE); - // FIXME: make maxConnections field Optional - maxConnections = properties.getMaxConnections().orElse(null); - // FIXME: make connectionTtl field Optional - connectionTtl = properties.getConnectionTtl().orElse(null); - // FIXME: make keepAliveInterval field Optional - keepAliveInterval = properties.getKeepAliveInterval().orElse(null); - acquireHostList = properties.getAcquireHostList().orElse(ArangoDefaults.DEFAULT_ACQUIRE_HOST_LIST); - acquireHostListInterval = properties.getAcquireHostListInterval().orElse(ArangoDefaults.DEFAULT_ACQUIRE_HOST_LIST_INTERVAL); - loadBalancingStrategy = properties.getLoadBalancingStrategy().orElse(ArangoDefaults.DEFAULT_LOAD_BALANCING_STRATEGY); - responseQueueTimeSamples = properties.getResponseQueueTimeSamples().orElse(ArangoDefaults.DEFAULT_RESPONSE_QUEUE_TIME_SAMPLES); - } - - protected void setHost(final String host, final int port) { - hosts.add(new HostDescription(host, port)); - } - - protected void setTimeout(final Integer timeout) { - this.timeout = timeout; - } - - protected void setUser(final String user) { - this.user = user; - } - - protected void setPassword(final String password) { - this.password = password; - } - - protected void setJwt(final String jwt) { - this.jwt = jwt; - } - - protected void setUseSsl(final Boolean useSsl) { - this.useSsl = useSsl; - } - - protected void setSslContext(final SSLContext sslContext) { - this.sslContext = sslContext; - } - - protected void setVerifyHost(final Boolean verifyHost) { - this.verifyHost = verifyHost; - } - - protected void setChunkSize(final Integer chunkSize) { - this.chunkSize = chunkSize; - } - - protected void setMaxConnections(final Integer maxConnections) { - this.maxConnections = maxConnections; - } - - protected void setConnectionTtl(final Long connectionTtl) { - this.connectionTtl = connectionTtl; - } - - protected void setKeepAliveInterval(final Integer keepAliveInterval) { - this.keepAliveInterval = keepAliveInterval; - } - - protected void setAcquireHostList(final Boolean acquireHostList) { - this.acquireHostList = acquireHostList; - } - - protected void setAcquireHostListInterval(final Integer acquireHostListInterval) { - this.acquireHostListInterval = acquireHostListInterval; - } - - protected void setLoadBalancingStrategy(final LoadBalancingStrategy loadBalancingStrategy) { - this.loadBalancingStrategy = loadBalancingStrategy; - } - - protected void setResponseQueueTimeSamples(final Integer responseQueueTimeSamples) { - this.responseQueueTimeSamples = responseQueueTimeSamples; - } - - protected void setUserDataSerde(final ArangoSerde serde) { - this.userDataSerde = serde; - } - - protected HostHandler createHostHandler(final HostResolver hostResolver) { - - final HostHandler hostHandler; - - if (loadBalancingStrategy != null) { - switch (loadBalancingStrategy) { - case ONE_RANDOM: - hostHandler = new RandomHostHandler(hostResolver, new FallbackHostHandler(hostResolver)); - break; - case ROUND_ROBIN: - hostHandler = new RoundRobinHostHandler(hostResolver); - break; - case NONE: - default: - hostHandler = new FallbackHostHandler(hostResolver); - break; - } - } else { - hostHandler = new FallbackHostHandler(hostResolver); - } - - LOG.debug("HostHandler is {}", hostHandler.getClass().getSimpleName()); - - return new DirtyReadHostHandler(hostHandler, new RoundRobinHostHandler(hostResolver)); - } - - protected HostResolver createHostResolver(final Collection hosts, final int maxConnections, - final ConnectionFactory connectionFactory) { - - if (acquireHostList != null && acquireHostList) { - LOG.debug("acquireHostList -> Use ExtendedHostResolver"); - return new ExtendedHostResolver(new ArrayList<>(hosts), maxConnections, connectionFactory, - acquireHostListInterval); - } else { - LOG.debug("Use SimpleHostResolver"); - return new SimpleHostResolver(new ArrayList<>(hosts)); - } - - } - - protected Collection createHostList( - final int maxConnections, - final ConnectionFactory connectionFactory) { - final Collection hostList = new ArrayList<>(); - for (final HostDescription host : hosts) { - hostList.add(HostUtils.createHost(host, maxConnections, connectionFactory)); - } - return hostList; - } -} diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalJsonMapperProvider.java b/driver/src/main/java/com/arangodb/internal/serde/InternalJsonMapperProvider.java deleted file mode 100644 index 343c387d6..000000000 --- a/driver/src/main/java/com/arangodb/internal/serde/InternalJsonMapperProvider.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.arangodb.internal.serde; - -import com.fasterxml.jackson.databind.ObjectMapper; - -enum InternalJsonMapperProvider implements InternalMapperProvider { - INSTANCE; - - @Override - public ObjectMapper get() { - return new ObjectMapper(); - } -} diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalMapperProvider.java b/driver/src/main/java/com/arangodb/internal/serde/InternalMapperProvider.java deleted file mode 100644 index fca65bd24..000000000 --- a/driver/src/main/java/com/arangodb/internal/serde/InternalMapperProvider.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.arangodb.internal.serde; - -import com.arangodb.ContentType; -import com.fasterxml.jackson.databind.ObjectMapper; - -import java.util.function.Supplier; - -public interface InternalMapperProvider extends Supplier { - static ObjectMapper of(final ContentType contentType) { - if (contentType == ContentType.JSON) { - return InternalJsonMapperProvider.INSTANCE.get(); - } else if (contentType == ContentType.VPACK) { - return InternalVPackMapperProvider.INSTANCE.get(); - } else { - throw new IllegalArgumentException("Unexpected value: " + contentType); - } - } -} diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalVPackMapperProvider.java b/driver/src/main/java/com/arangodb/internal/serde/InternalVPackMapperProvider.java deleted file mode 100644 index e157b3dc2..000000000 --- a/driver/src/main/java/com/arangodb/internal/serde/InternalVPackMapperProvider.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.arangodb.internal.serde; - -import com.arangodb.jackson.dataformat.velocypack.VPackMapper; -import com.fasterxml.jackson.databind.ObjectMapper; - -enum InternalVPackMapperProvider implements InternalMapperProvider { - INSTANCE; - - @Override - public ObjectMapper get() { - return new VPackMapper(); - } -} diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/internal/VstConnectionSync.java b/driver/src/main/java/com/arangodb/internal/velocystream/internal/VstConnectionSync.java deleted file mode 100644 index 7c8b71384..000000000 --- a/driver/src/main/java/com/arangodb/internal/velocystream/internal/VstConnectionSync.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * DISCLAIMER - * - * Copyright 2016 ArangoDB GmbH, Cologne, Germany - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Copyright holder is ArangoDB GmbH, Cologne, Germany - */ - -package com.arangodb.internal.velocystream.internal; - -import com.arangodb.ArangoDBException; -import com.arangodb.config.HostDescription; - -import javax.net.ssl.SSLContext; -import java.util.Collection; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.FutureTask; -import java.util.concurrent.TimeUnit; - -/** - * @author Mark Vollmary - */ -public class VstConnectionSync extends VstConnection { - - private VstConnectionSync(final HostDescription host, final Integer timeout, final Long ttl, - final Integer keepAliveInterval, - final Boolean useSsl, final SSLContext sslContext, final MessageStore messageStore) { - super(host, timeout, ttl, keepAliveInterval, useSsl, sslContext, messageStore); - } - - @Override - public Message write(final Message message, final Collection chunks) { - final FutureTask task = new FutureTask<>(() -> messageStore.get(message.getId())); - messageStore.storeMessage(message.getId(), task); - super.writeIntern(message, chunks); - try { - return timeout == null || timeout == 0L ? task.get() : task.get(timeout, TimeUnit.MILLISECONDS); - } catch (final ExecutionException e) { - throw ArangoDBException.wrap(e.getCause()); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new ArangoDBException(e); - } catch (final Exception e) { - throw ArangoDBException.wrap(e); - } - } - - @Override - protected void doKeepAlive() { - sendKeepAlive(); - } - - public static class Builder { - - private HostDescription host; - private MessageStore messageStore; - private Integer timeout; - private Long ttl; - private Integer keepAliveInterval; - private Boolean useSsl; - private SSLContext sslContext; - - public Builder host(final HostDescription host) { - this.host = host; - return this; - } - - public Builder messageStore(final MessageStore messageStore) { - this.messageStore = messageStore; - return this; - } - - public Builder timeout(final Integer timeout) { - this.timeout = timeout; - return this; - } - - public Builder useSsl(final Boolean useSsl) { - this.useSsl = useSsl; - return this; - } - - public Builder sslContext(final SSLContext sslContext) { - this.sslContext = sslContext; - return this; - } - - public Builder ttl(final Long ttl) { - this.ttl = ttl; - return this; - } - - public Builder keepAliveInterval(final Integer keepAliveInterval) { - this.keepAliveInterval = keepAliveInterval; - return this; - } - - public VstConnectionSync build() { - return new VstConnectionSync(host, timeout, ttl, keepAliveInterval, - useSsl, sslContext, messageStore); - } - } - -} diff --git a/driver/src/test/java/com/arangodb/async/serde/CustomSerdeTest.java b/driver/src/test/java/com/arangodb/async/serde/CustomSerdeTest.java index fdca9d3c0..6756ef847 100644 --- a/driver/src/test/java/com/arangodb/async/serde/CustomSerdeTest.java +++ b/driver/src/test/java/com/arangodb/async/serde/CustomSerdeTest.java @@ -65,7 +65,7 @@ void init() throws ExecutionException, InterruptedException { }); ArangoDBAsync arangoDB = new ArangoDBAsync.Builder() .loadProperties(ConfigUtils.loadConfig()) - .serializer(serde).build(); + .serde(serde).build(); DbName TEST_DB = DbName.of("custom-serde-test"); db = arangoDB.db(TEST_DB); diff --git a/driver/src/test/java/com/arangodb/internal/velocystream/CommunicationTest.java b/driver/src/test/java/com/arangodb/internal/velocystream/CommunicationTest.java index 120939786..58a87bd71 100644 --- a/driver/src/test/java/com/arangodb/internal/velocystream/CommunicationTest.java +++ b/driver/src/test/java/com/arangodb/internal/velocystream/CommunicationTest.java @@ -102,15 +102,6 @@ void multiThreadSameDatabases() throws Exception { assertThat(result.size()).isEqualTo(2); } - @Test - void minOneConnection() { - final ArangoDB arangoDB = new ArangoDB.Builder() - .loadProperties(ConfigUtils.loadConfig()) - .maxConnections(0).build(); - final ArangoDBVersion version = arangoDB.getVersion(); - assertThat(version).isNotNull(); - } - @Test void defaultMaxConnection() { final ArangoDB arangoDB = new ArangoDB.Builder() diff --git a/http/pom.xml b/http/pom.xml new file mode 100644 index 000000000..10e710bb7 --- /dev/null +++ b/http/pom.xml @@ -0,0 +1,51 @@ + + + 4.0.0 + + com.arangodb + arangodb-java-driver-parent + 7.0.0-ALPHA.2 + + + http-protocol + http-protocol + HTTP Protocol module for ArangoDB Java Driver + + + false + com.arangodb.http + + + + + com.arangodb + core + provided + + + io.vertx + vertx-web-client + + + + + + + io.vertx + vertx-stack-depchain + 4.3.5 + pom + import + + + io.netty + netty-bom + 4.1.85.Final + pom + import + + + + \ No newline at end of file diff --git a/driver/src/main/java/com/arangodb/internal/http/HttpCommunication.java b/http/src/main/java/com/arangodb/http/HttpCommunication.java similarity index 88% rename from driver/src/main/java/com/arangodb/internal/http/HttpCommunication.java rename to http/src/main/java/com/arangodb/http/HttpCommunication.java index a0be3f649..fafc1b721 100644 --- a/driver/src/main/java/com/arangodb/internal/http/HttpCommunication.java +++ b/http/src/main/java/com/arangodb/http/HttpCommunication.java @@ -18,13 +18,14 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.http; +package com.arangodb.http; import com.arangodb.ArangoDBException; import com.arangodb.config.HostDescription; import com.arangodb.internal.InternalRequest; import com.arangodb.internal.RequestType; import com.arangodb.internal.InternalResponse; +import com.arangodb.internal.config.ArangoConfig; import com.arangodb.internal.net.*; import com.arangodb.internal.serde.InternalSerde; import com.arangodb.internal.util.HostUtils; @@ -48,10 +49,10 @@ public class HttpCommunication implements Closeable { private final InternalSerde serde; private final AtomicLong reqCount; - private HttpCommunication(final HostHandler hostHandler, final InternalSerde serde) { + HttpCommunication(final HostHandler hostHandler, final ArangoConfig config) { super(); this.hostHandler = hostHandler; - this.serde = serde; + this.serde = config.getInternalSerde(); reqCount = new AtomicLong(); } @@ -123,23 +124,4 @@ private boolean isSafe(final InternalRequest request) { return type == RequestType.GET || type == RequestType.HEAD || type == RequestType.OPTIONS; } - public static class Builder { - private HostHandler hostHandler; - private InternalSerde serde; - - public Builder hostHandler(HostHandler hostHandler) { - this.hostHandler = hostHandler; - return this; - } - - public Builder serde(InternalSerde serde) { - this.serde = serde; - return this; - } - - public HttpCommunication build() { - return new HttpCommunication(hostHandler, serde); - } - } - } diff --git a/driver/src/main/java/com/arangodb/internal/http/HttpConnection.java b/http/src/main/java/com/arangodb/http/HttpConnection.java similarity index 79% rename from driver/src/main/java/com/arangodb/internal/http/HttpConnection.java rename to http/src/main/java/com/arangodb/http/HttpConnection.java index f81786432..5c8d424cf 100644 --- a/driver/src/main/java/com/arangodb/internal/http/HttpConnection.java +++ b/http/src/main/java/com/arangodb/http/HttpConnection.java @@ -18,11 +18,12 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.http; +package com.arangodb.http; import com.arangodb.*; -import com.arangodb.internal.net.Connection; import com.arangodb.config.HostDescription; +import com.arangodb.internal.config.ArangoConfig; +import com.arangodb.internal.net.Connection; import com.arangodb.internal.serde.ContentTypeFactory; import com.arangodb.internal.serde.InternalSerde; import com.arangodb.internal.util.EncodeUtils; @@ -56,6 +57,7 @@ import java.security.NoSuchAlgorithmException; import java.util.Iterator; import java.util.Map.Entry; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -73,7 +75,7 @@ public class HttpConnection implements Connection { private static final String CONTENT_TYPE_VPACK = "application/x-velocypack"; private static final String USER_AGENT = getUserAgent(); private static final AtomicInteger THREAD_COUNT = new AtomicInteger(); - private final InternalSerde util; + private final InternalSerde serde; private final ContentType contentType; private String auth; private final WebClient client; @@ -84,21 +86,24 @@ private static String getUserAgent() { return "JavaDriver/" + PackageVersion.VERSION + " (JVM/" + System.getProperty("java.specification.version") + ")"; } - private HttpConnection(final HostDescription host, final Integer timeout, final String user, final String password, - final Boolean useSsl, final SSLContext sslContext, final Boolean verifyHost, - final InternalSerde util, final Protocol protocol, final Long ttl) { + HttpConnection(final ArangoConfig config, final HostDescription host) { super(); - this.util = util; - this.contentType = ContentTypeFactory.of(protocol); - this.timeout = timeout; + serde = config.getInternalSerde(); + Protocol protocol = config.getProtocol(); + contentType = ContentTypeFactory.of(protocol); + timeout = config.getTimeout(); vertx = Vertx.vertx(new VertxOptions().setPreferNativeTransport(true).setEventLoopPoolSize(1)); vertx.runOnContext(e -> { Thread.currentThread().setName("adb-eventloop-" + THREAD_COUNT.getAndIncrement()); - auth = new UsernamePasswordCredentials(user, password != null ? password : "").toHttpAuthorization(); + auth = new UsernamePasswordCredentials( + config.getUser(), Optional.ofNullable(config.getPassword()).orElse("") + ).toHttpAuthorization(); LOGGER.debug("Created Vert.x context"); }); - int intTtl = ttl == null ? 0 : Math.toIntExact(ttl / 1000); + int intTtl = Optional.ofNullable(config.getConnectionTtl()) + .map(ttl -> Math.toIntExact(ttl / 1000)) + .orElse(0); HttpVersion httpVersion = protocol == Protocol.HTTP_JSON || protocol == Protocol.HTTP_VPACK ? HttpVersion.HTTP_1_1 : HttpVersion.HTTP_2; @@ -125,10 +130,10 @@ private HttpConnection(final HostDescription host, final Integer timeout, final .setDefaultPort(host.getPort()); - if (Boolean.TRUE.equals(useSsl)) { + if (Boolean.TRUE.equals(config.getUseSsl())) { SSLContext ctx; - if (sslContext != null) { - ctx = sslContext; + if (config.getSslContext() != null) { + ctx = config.getSslContext(); } else { try { ctx = SSLContext.getDefault(); @@ -140,7 +145,7 @@ private HttpConnection(final HostDescription host, final Integer timeout, final webClientOptions .setSsl(true) .setUseAlpn(true) - .setVerifyHost(verifyHost == null || verifyHost) + .setVerifyHost(config.getVerifyHost()) .setJdkSslEngineOptions(new JdkSSLEngineOptions() { @Override public JdkSSLEngineOptions copy() { @@ -291,7 +296,7 @@ private InternalResponse buildResponse(final HttpResponse httpResponse) } protected void checkError(final InternalResponse response) { - ResponseUtils.checkError(util, response); + ResponseUtils.checkError(serde, response); } @Override @@ -301,72 +306,4 @@ public void setJwt(String jwt) { } } - public static class Builder { - private String user; - private String password; - private InternalSerde util; - private Boolean useSsl; - private Protocol protocol; - private HostDescription host; - private Long ttl; - private SSLContext sslContext; - private Boolean verifyHost; - private Integer timeout; - - public Builder user(final String user) { - this.user = user; - return this; - } - - public Builder password(final String password) { - this.password = password; - return this; - } - - public Builder serializationUtil(final InternalSerde util) { - this.util = util; - return this; - } - - public Builder useSsl(final Boolean useSsl) { - this.useSsl = useSsl; - return this; - } - - public Builder protocol(final Protocol protocol) { - this.protocol = protocol; - return this; - } - - public Builder host(final HostDescription host) { - this.host = host; - return this; - } - - public Builder ttl(final Long ttl) { - this.ttl = ttl; - return this; - } - - public Builder sslContext(final SSLContext sslContext) { - this.sslContext = sslContext; - return this; - } - - public Builder verifyHost(final Boolean verifyHost) { - this.verifyHost = verifyHost; - return this; - } - - public Builder timeout(final Integer timeout) { - this.timeout = timeout; - return this; - } - - public HttpConnection build() { - return new HttpConnection(host, timeout, user, password, useSsl, sslContext, verifyHost, util, - protocol, ttl); - } - } - } diff --git a/driver/src/main/java/com/arangodb/internal/http/HttpConnectionFactory.java b/http/src/main/java/com/arangodb/http/HttpConnectionFactory.java similarity index 51% rename from driver/src/main/java/com/arangodb/internal/http/HttpConnectionFactory.java rename to http/src/main/java/com/arangodb/http/HttpConnectionFactory.java index e4525511e..4c24c06c1 100644 --- a/driver/src/main/java/com/arangodb/internal/http/HttpConnectionFactory.java +++ b/http/src/main/java/com/arangodb/http/HttpConnectionFactory.java @@ -18,36 +18,19 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.http; +package com.arangodb.http; -import com.arangodb.Protocol; +import com.arangodb.config.HostDescription; +import com.arangodb.internal.config.ArangoConfig; import com.arangodb.internal.net.Connection; import com.arangodb.internal.net.ConnectionFactory; -import com.arangodb.config.HostDescription; -import com.arangodb.internal.serde.InternalSerde; - -import javax.net.ssl.SSLContext; /** * @author Mark Vollmary */ public class HttpConnectionFactory implements ConnectionFactory { - - private final HttpConnection.Builder builder; - - public HttpConnectionFactory(final Integer timeout, final String user, final String password, final Boolean useSsl, - final SSLContext sslContext, final Boolean verifyHost, - final InternalSerde util, final Protocol protocol, final Long connectionTtl) { - super(); - builder = new HttpConnection.Builder().timeout(timeout).user(user).password(password).useSsl(useSsl) - .sslContext(sslContext).verifyHost(verifyHost).serializationUtil(util).protocol(protocol) - .ttl(connectionTtl); - - } - @Override - public Connection create(final HostDescription host) { - return builder.host(host).build(); + public Connection create(final ArangoConfig config, final HostDescription host) { + return new HttpConnection(config, host); } - } diff --git a/driver/src/main/java/com/arangodb/internal/http/HttpProtocol.java b/http/src/main/java/com/arangodb/http/HttpProtocol.java similarity index 97% rename from driver/src/main/java/com/arangodb/internal/http/HttpProtocol.java rename to http/src/main/java/com/arangodb/http/HttpProtocol.java index 15d35c2d4..a78f5487f 100644 --- a/driver/src/main/java/com/arangodb/internal/http/HttpProtocol.java +++ b/http/src/main/java/com/arangodb/http/HttpProtocol.java @@ -18,7 +18,7 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.http; +package com.arangodb.http; import com.arangodb.internal.net.CommunicationProtocol; import com.arangodb.internal.net.HostHandle; diff --git a/http/src/main/java/com/arangodb/http/HttpProtocolProvider.java b/http/src/main/java/com/arangodb/http/HttpProtocolProvider.java new file mode 100644 index 000000000..e6bc1d3b9 --- /dev/null +++ b/http/src/main/java/com/arangodb/http/HttpProtocolProvider.java @@ -0,0 +1,36 @@ +package com.arangodb.http; + +import com.arangodb.Protocol; +import com.arangodb.internal.config.ArangoConfig; +import com.arangodb.internal.net.CommunicationProtocol; +import com.arangodb.internal.net.ConnectionFactory; +import com.arangodb.internal.net.HostHandler; +import com.arangodb.internal.net.ProtocolProvider; +import com.fasterxml.jackson.databind.Module; + +public class HttpProtocolProvider implements ProtocolProvider { + + @Override + public boolean supportsProtocol(Protocol protocol) { + return Protocol.HTTP_VPACK.equals(protocol) || + Protocol.HTTP_JSON.equals(protocol) || + Protocol.HTTP2_VPACK.equals(protocol) || + Protocol.HTTP2_JSON.equals(protocol); + } + + @Override + public ConnectionFactory createConnectionFactory() { + return new HttpConnectionFactory(); + } + + @Override + public CommunicationProtocol createProtocol(ArangoConfig config, HostHandler hostHandler) { + return new HttpProtocol(new HttpCommunication(hostHandler, config)); + } + + @Override + public Module protocolModule() { + return null; + } + +} diff --git a/http/src/main/resources/META-INF/services/com.arangodb.internal.net.ProtocolProvider b/http/src/main/resources/META-INF/services/com.arangodb.internal.net.ProtocolProvider new file mode 100644 index 000000000..f48d178b7 --- /dev/null +++ b/http/src/main/resources/META-INF/services/com.arangodb.internal.net.ProtocolProvider @@ -0,0 +1 @@ +com.arangodb.http.HttpProtocolProvider diff --git a/driver/src/main/resources/META-INF/vertx/vertx-version.txt b/http/src/main/resources/META-INF/vertx/vertx-version.txt similarity index 100% rename from driver/src/main/resources/META-INF/vertx/vertx-version.txt rename to http/src/main/resources/META-INF/vertx/vertx-version.txt diff --git a/jackson-serde/pom.xml b/jackson-serde/pom.xml index 69f00e2f5..fcdf5ded7 100644 --- a/jackson-serde/pom.xml +++ b/jackson-serde/pom.xml @@ -6,7 +6,7 @@ com.arangodb arangodb-java-driver-parent - 7.0.0-ALPHA.1 + 7.0.0-ALPHA.2 jackson-serde @@ -19,6 +19,11 @@ + + com.arangodb + core + provided + com.fasterxml.jackson.core jackson-databind @@ -31,15 +36,5 @@ com.fasterxml.jackson.core jackson-annotations - - com.arangodb - jackson-dataformat-velocypack - true - - - com.arangodb - serde-api - provided - \ No newline at end of file diff --git a/jackson-serde/src/main/java/com/arangodb/serde/jackson/JacksonSerdeProvider.java b/jackson-serde/src/main/java/com/arangodb/serde/jackson/JacksonSerdeProvider.java index 4fcbf2fcf..c2f437e21 100644 --- a/jackson-serde/src/main/java/com/arangodb/serde/jackson/JacksonSerdeProvider.java +++ b/jackson-serde/src/main/java/com/arangodb/serde/jackson/JacksonSerdeProvider.java @@ -1,22 +1,25 @@ package com.arangodb.serde.jackson; import com.arangodb.ContentType; -import com.arangodb.serde.jackson.internal.JacksonSerdeImpl; -import com.arangodb.serde.jackson.internal.JacksonMapperProvider; import com.arangodb.serde.ArangoSerdeProvider; +import com.arangodb.serde.jackson.internal.JacksonMapperProvider; +import com.arangodb.serde.jackson.internal.JacksonSerdeImpl; import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonSerdeProvider implements ArangoSerdeProvider { /** * Creates a new JacksonSerde with default settings for the specified data type. + * Registers all the Jackson modules ({@link com.fasterxml.jackson.databind.Module}) discovered via SPI. * * @param contentType serialization target data type * @return the created JacksonSerde */ @Override public JacksonSerde of(final ContentType contentType) { - return create(JacksonMapperProvider.of(contentType)); + JacksonSerde serde = create(JacksonMapperProvider.of(contentType)); + serde.configure(mapper -> mapper.registerModules(ObjectMapper.findModules())); + return serde; } /** diff --git a/jackson-serde/src/main/java/com/arangodb/serde/jackson/internal/JacksonMapperProvider.java b/jackson-serde/src/main/java/com/arangodb/serde/jackson/internal/JacksonMapperProvider.java index b961b009d..936192d0e 100644 --- a/jackson-serde/src/main/java/com/arangodb/serde/jackson/internal/JacksonMapperProvider.java +++ b/jackson-serde/src/main/java/com/arangodb/serde/jackson/internal/JacksonMapperProvider.java @@ -1,8 +1,11 @@ package com.arangodb.serde.jackson.internal; +import com.arangodb.ArangoDBException; import com.arangodb.ContentType; +import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.ServiceLoader; import java.util.function.Supplier; /** @@ -10,12 +13,22 @@ */ public interface JacksonMapperProvider extends Supplier { static ObjectMapper of(final ContentType contentType) { + String formatName; if (contentType == ContentType.JSON) { - return JsonJacksonMapperProvider.INSTANCE.get(); + formatName = "JSON"; } else if (contentType == ContentType.VPACK) { - return VPackJacksonMapperProvider.INSTANCE.get(); + formatName = "Velocypack"; } else { throw new IllegalArgumentException("Unexpected value: " + contentType); } + + ServiceLoader sl = ServiceLoader.load(JsonFactory.class); + for (JsonFactory jf : sl) { + if(formatName.equals(jf.getFormatName())){ + return new ObjectMapper(jf); + } + } + + throw new ArangoDBException("No JsonFactory found for content type: " + contentType); } } diff --git a/jackson-serde/src/main/java/com/arangodb/serde/jackson/internal/JsonJacksonMapperProvider.java b/jackson-serde/src/main/java/com/arangodb/serde/jackson/internal/JsonJacksonMapperProvider.java deleted file mode 100644 index c2e1c4afd..000000000 --- a/jackson-serde/src/main/java/com/arangodb/serde/jackson/internal/JsonJacksonMapperProvider.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.arangodb.serde.jackson.internal; - -import com.fasterxml.jackson.databind.ObjectMapper; - -/** - * Not shaded in arangodb-java-driver-shaded. - */ -enum JsonJacksonMapperProvider implements JacksonMapperProvider { - INSTANCE; - - @Override - public ObjectMapper get() { - return new ObjectMapper(); - } -} diff --git a/jackson-serde/src/main/java/com/arangodb/serde/jackson/internal/VPackJacksonMapperProvider.java b/jackson-serde/src/main/java/com/arangodb/serde/jackson/internal/VPackJacksonMapperProvider.java deleted file mode 100644 index d44ed0a2d..000000000 --- a/jackson-serde/src/main/java/com/arangodb/serde/jackson/internal/VPackJacksonMapperProvider.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.arangodb.serde.jackson.internal; - -import com.arangodb.jackson.dataformat.velocypack.VPackMapper; -import com.fasterxml.jackson.databind.ObjectMapper; - -/** - * Not shaded in arangodb-java-driver-shaded. - */ -enum VPackJacksonMapperProvider implements JacksonMapperProvider { - INSTANCE; - - @Override - public ObjectMapper get() { - return new VPackMapper(); - } -} diff --git a/jsonb-serde/pom.xml b/jsonb-serde/pom.xml index ea16f025c..b28ea81b6 100644 --- a/jsonb-serde/pom.xml +++ b/jsonb-serde/pom.xml @@ -6,7 +6,7 @@ com.arangodb arangodb-java-driver-parent - 7.0.0-ALPHA.1 + 7.0.0-ALPHA.2 jsonb-serde @@ -22,7 +22,7 @@ com.arangodb - serde-api + core provided diff --git a/pom.xml b/pom.xml index ece44143b..c17fb6232 100644 --- a/pom.xml +++ b/pom.xml @@ -5,13 +5,15 @@ com.arangodb arangodb-java-driver-parent - 7.0.0-ALPHA.1 + 7.0.0-ALPHA.2 2016 + core driver shaded jackson-serde - serde-api + http + vst pom @@ -98,20 +100,6 @@ import pom - - io.vertx - vertx-stack-depchain - 4.3.5 - pom - import - - - io.netty - netty-bom - 4.1.85.Final - pom - import - org.junit junit-bom @@ -126,7 +114,17 @@ com.arangodb - serde-api + core + ${project.version} + + + com.arangodb + http-protocol + ${project.version} + + + com.arangodb + vst-protocol ${project.version} @@ -144,10 +142,15 @@ arangodb-java-driver-shaded ${project.version} + + com.arangodb + velocypack + 3.0.0 + com.arangodb jackson-dataformat-velocypack - 3.1.0 + 4.0.0 org.slf4j @@ -291,6 +294,8 @@ + ${project.name} + ${project.version} ${moduleName} diff --git a/resilience-tests/pom.xml b/resilience-tests/pom.xml index b323cb36b..8d379f9bf 100644 --- a/resilience-tests/pom.xml +++ b/resilience-tests/pom.xml @@ -5,7 +5,7 @@ arangodb-java-driver-parent com.arangodb - 7.0.0-ALPHA.1 + 7.0.0-ALPHA.2 4.0.0 diff --git a/serde-api/pom.xml b/serde-api/pom.xml deleted file mode 100644 index 67003f219..000000000 --- a/serde-api/pom.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - 4.0.0 - - com.arangodb - arangodb-java-driver-parent - 7.0.0-ALPHA.1 - - - serde-api - serde-api - Serde API module for ArangoDB Java Driver - - - com.arangodb.serde - - - \ No newline at end of file diff --git a/shaded-integration-tests/pom.xml b/shaded-integration-tests/pom.xml index a32599b1b..bbbcf47b9 100644 --- a/shaded-integration-tests/pom.xml +++ b/shaded-integration-tests/pom.xml @@ -7,7 +7,7 @@ com.arangodb arangodb-java-driver-parent - 7.0.0-ALPHA.1 + 7.0.0-ALPHA.2 shaded-integration-tests @@ -46,12 +46,6 @@ com.arangodb arangodb-java-driver-shaded - - - com.arangodb - jackson-serde - - com.arangodb @@ -101,12 +95,6 @@ com.arangodb arangodb-java-driver-shaded - - - com.arangodb - jackson-serde - - com.arangodb diff --git a/shaded-integration-tests/src/test/jsonb/java/arch/RelocationsTest.java b/shaded-integration-tests/src/test/jsonb/java/arch/RelocationsTest.java index db2516a94..b78a416bb 100644 --- a/shaded-integration-tests/src/test/jsonb/java/arch/RelocationsTest.java +++ b/shaded-integration-tests/src/test/jsonb/java/arch/RelocationsTest.java @@ -35,14 +35,6 @@ public class RelocationsTest { .should().dependOnClassesThat() .resideInAPackage("com.arangodb.jackson.dataformat.velocypack.."); - @ArchTest - public static final ArchRule noVelocypackDependency = noClasses().that() - .resideInAPackage("com.arangodb..").and() - .resideOutsideOfPackage("..velocystream..").and() - .resideOutsideOfPackage("com.arangodb.shaded.jackson.dataformat.velocypack..") - .should().dependOnClassesThat() - .resideInAPackage("com.arangodb.velocypack.."); - @ArchTest // jsonb-serde is accessed via SPI public static final ArchRule noExplicitDependencyOnJsonbSerde = noClasses().that() diff --git a/shaded-integration-tests/src/test/native/java/com/arangodb/async/serde/CustomSerdeTest.java b/shaded-integration-tests/src/test/native/java/com/arangodb/async/serde/CustomSerdeTest.java index fdca9d3c0..6756ef847 100644 --- a/shaded-integration-tests/src/test/native/java/com/arangodb/async/serde/CustomSerdeTest.java +++ b/shaded-integration-tests/src/test/native/java/com/arangodb/async/serde/CustomSerdeTest.java @@ -65,7 +65,7 @@ void init() throws ExecutionException, InterruptedException { }); ArangoDBAsync arangoDB = new ArangoDBAsync.Builder() .loadProperties(ConfigUtils.loadConfig()) - .serializer(serde).build(); + .serde(serde).build(); DbName TEST_DB = DbName.of("custom-serde-test"); db = arangoDB.db(TEST_DB); diff --git a/shaded-integration-tests/src/test/native/java/com/arangodb/internal/velocystream/CommunicationTest.java b/shaded-integration-tests/src/test/native/java/com/arangodb/internal/velocystream/CommunicationTest.java index 120939786..58a87bd71 100644 --- a/shaded-integration-tests/src/test/native/java/com/arangodb/internal/velocystream/CommunicationTest.java +++ b/shaded-integration-tests/src/test/native/java/com/arangodb/internal/velocystream/CommunicationTest.java @@ -102,15 +102,6 @@ void multiThreadSameDatabases() throws Exception { assertThat(result.size()).isEqualTo(2); } - @Test - void minOneConnection() { - final ArangoDB arangoDB = new ArangoDB.Builder() - .loadProperties(ConfigUtils.loadConfig()) - .maxConnections(0).build(); - final ArangoDBVersion version = arangoDB.getVersion(); - assertThat(version).isNotNull(); - } - @Test void defaultMaxConnection() { final ArangoDB arangoDB = new ArangoDB.Builder() diff --git a/shaded/pom.xml b/shaded/pom.xml index 81fc19503..40db119e9 100644 --- a/shaded/pom.xml +++ b/shaded/pom.xml @@ -7,7 +7,7 @@ com.arangodb arangodb-java-driver-parent - 7.0.0-ALPHA.1 + 7.0.0-ALPHA.2 arangodb-java-driver-shaded @@ -22,21 +22,19 @@ com.arangodb - arangodb-java-driver - - - com.arangodb - serde-api - - + core com.arangodb - jackson-dataformat-velocypack + http-protocol + + + com.arangodb + vst-protocol com.arangodb - jackson-serde + jackson-dataformat-velocypack org.slf4j @@ -66,15 +64,9 @@ org.slf4j:slf4j-api - com.arangodb:jackson-serde - com.arangodb:velocypack - - io.netty - com.arangodb.shaded.netty - com.fasterxml.jackson com.arangodb.shaded.fasterxml.jackson @@ -83,6 +75,10 @@ com.arangodb.jackson.dataformat.velocypack com.arangodb.shaded.jackson.dataformat.velocypack + + io.netty + com.arangodb.shaded.netty + io.vertx com.arangodb.shaded.vertx @@ -90,10 +86,28 @@ - com.arangodb:arangodb-java-driver + com.arangodb:core + + META-INF/** + + + + com.arangodb:vst-protocol + + META-INF/** + + + + com.arangodb:http-protocol META-INF/MANIFEST.MF - META-INF/native-image/** + META-INF/services/** + + + + com.arangodb:velocypack + + META-INF/** @@ -113,7 +127,6 @@ io.netty:* META-INF/** - module-info.class @@ -122,7 +135,6 @@ *.adoc examples/** META-INF/** - module-info.class @@ -166,7 +178,9 @@ ${project.build.directory}/shaded-sources - com.arangodb.shaded.**,**.internal** + + com.arangodb.shaded.**,**.internal**,com.arangodb.vst.**,com.arangodb.http.**,com.arangodb.velocypack.** + diff --git a/shaded/src/main/resources/META-INF/services/com.arangodb.internal.net.AsyncProtocolProvider b/shaded/src/main/resources/META-INF/services/com.arangodb.internal.net.AsyncProtocolProvider new file mode 100644 index 000000000..dc7f09560 --- /dev/null +++ b/shaded/src/main/resources/META-INF/services/com.arangodb.internal.net.AsyncProtocolProvider @@ -0,0 +1 @@ +com.arangodb.vst.VstAsyncProtocolProvider diff --git a/shaded/src/main/resources/META-INF/services/com.arangodb.internal.net.ProtocolProvider b/shaded/src/main/resources/META-INF/services/com.arangodb.internal.net.ProtocolProvider new file mode 100644 index 000000000..faf8cac63 --- /dev/null +++ b/shaded/src/main/resources/META-INF/services/com.arangodb.internal.net.ProtocolProvider @@ -0,0 +1,2 @@ +com.arangodb.http.HttpProtocolProvider +com.arangodb.vst.VstProtocolProvider diff --git a/shaded/src/main/resources/META-INF/services/com.arangodb.shaded.fasterxml.jackson.core.JsonFactory b/shaded/src/main/resources/META-INF/services/com.arangodb.shaded.fasterxml.jackson.core.JsonFactory new file mode 100644 index 000000000..89123f5a5 --- /dev/null +++ b/shaded/src/main/resources/META-INF/services/com.arangodb.shaded.fasterxml.jackson.core.JsonFactory @@ -0,0 +1,2 @@ +com.arangodb.shaded.fasterxml.jackson.core.JsonFactory +com.arangodb.shaded.jackson.dataformat.velocypack.VPackFactory diff --git a/tutorial/gradle/build.gradle b/tutorial/gradle/build.gradle index 759ef5fbc..fad8b8db1 100644 --- a/tutorial/gradle/build.gradle +++ b/tutorial/gradle/build.gradle @@ -10,5 +10,5 @@ repositories { } dependencies { - implementation 'com.arangodb:arangodb-java-driver:7.0.0-ALPHA.1' + implementation 'com.arangodb:arangodb-java-driver:7.0.0-ALPHA.2' } diff --git a/tutorial/maven/pom.xml b/tutorial/maven/pom.xml index 5e4a51329..5154baa86 100644 --- a/tutorial/maven/pom.xml +++ b/tutorial/maven/pom.xml @@ -19,7 +19,7 @@ com.arangodb arangodb-java-driver - 7.0.0-ALPHA.1 + 7.0.0-ALPHA.2 diff --git a/vst/pom.xml b/vst/pom.xml new file mode 100644 index 000000000..76943f277 --- /dev/null +++ b/vst/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + com.arangodb + arangodb-java-driver-parent + 7.0.0-ALPHA.2 + + + vst-protocol + vst-protocol + VST Protocol module for ArangoDB Java Driver + + + false + com.arangodb.vst + + + + + com.arangodb + core + provided + + + com.arangodb + velocypack + + + + \ No newline at end of file diff --git a/vst/src/main/java/com/arangodb/vst/VstAsyncProtocolProvider.java b/vst/src/main/java/com/arangodb/vst/VstAsyncProtocolProvider.java new file mode 100644 index 000000000..8bb1a19d9 --- /dev/null +++ b/vst/src/main/java/com/arangodb/vst/VstAsyncProtocolProvider.java @@ -0,0 +1,30 @@ +package com.arangodb.vst; + +import com.arangodb.Protocol; +import com.arangodb.internal.config.ArangoConfig; +import com.arangodb.internal.net.*; +import com.arangodb.vst.async.VstCommunicationAsync; +import com.arangodb.vst.async.VstConnectionFactoryAsync; +import com.fasterxml.jackson.databind.Module; + +public class VstAsyncProtocolProvider implements AsyncProtocolProvider { + @Override + public boolean supportsProtocol(Protocol protocol) { + return Protocol.VST.equals(protocol); + } + + @Override + public ConnectionFactory createConnectionFactory() { + return new VstConnectionFactoryAsync(); + } + + @Override + public AsyncCommunication createCommunication(final ArangoConfig config, final HostHandler hostHandler) { + return new VstCommunicationAsync(config, hostHandler); + } + + @Override + public Module protocolModule() { + return VstModule.INSTANCE.get(); + } +} diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java b/vst/src/main/java/com/arangodb/vst/VstCommunication.java similarity index 86% rename from driver/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java rename to vst/src/main/java/com/arangodb/vst/VstCommunication.java index 9276834bc..d90510f6d 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java +++ b/vst/src/main/java/com/arangodb/vst/VstCommunication.java @@ -18,11 +18,12 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.velocystream; +package com.arangodb.vst; import com.arangodb.ArangoDBException; -import com.arangodb.config.ArangoConfigProperties; -import com.arangodb.internal.ArangoDefaults; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.InternalResponse; +import com.arangodb.internal.config.ArangoConfig; import com.arangodb.internal.net.AccessType; import com.arangodb.internal.net.Host; import com.arangodb.internal.net.HostHandle; @@ -30,17 +31,14 @@ import com.arangodb.internal.serde.InternalSerde; import com.arangodb.internal.util.RequestUtils; import com.arangodb.internal.util.ResponseUtils; -import com.arangodb.internal.velocystream.internal.Chunk; -import com.arangodb.internal.velocystream.internal.Message; -import com.arangodb.internal.velocystream.internal.VstConnection; import com.arangodb.velocypack.VPackSlice; import com.arangodb.velocypack.exception.VPackParserException; -import com.arangodb.internal.InternalRequest; -import com.arangodb.internal.InternalResponse; +import com.arangodb.vst.internal.Chunk; +import com.arangodb.vst.internal.Message; +import com.arangodb.vst.internal.VstConnection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.net.ssl.SSLContext; import java.io.Closeable; import java.io.IOException; import java.util.ArrayList; @@ -56,7 +54,7 @@ public abstract class VstCommunication> implements protected static final String ENCRYPTION_JWT = "jwt"; protected static final AtomicLong mId = new AtomicLong(0L); private static final Logger LOGGER = LoggerFactory.getLogger(VstCommunication.class); - protected final InternalSerde util; + protected final InternalSerde serde; protected final String user; protected final String password; @@ -64,15 +62,13 @@ public abstract class VstCommunication> implements protected final HostHandler hostHandler; protected volatile String jwt; - protected VstCommunication(final Integer timeout, final String user, final String password, final String jwt, - final Boolean useSsl, final SSLContext sslContext, final InternalSerde util, - final Integer chunksize, final HostHandler hostHandler) { - this.user = user; - this.password = password; - this.jwt = jwt; - this.util = util; + protected VstCommunication(final ArangoConfig config, final HostHandler hostHandler) { + user = config.getUser(); + password = config.getPassword(); + jwt = config.getJwt(); + serde = config.getInternalSerde(); + chunksize = config.getChunkSize(); this.hostHandler = hostHandler; - this.chunksize = chunksize; } @SuppressWarnings("unchecked") @@ -153,11 +149,11 @@ protected R execute(final InternalRequest request, final HostHandle hostHandle, protected abstract R execute(final InternalRequest request, C connection, final int attemptCount); protected void checkError(final InternalResponse response) { - ResponseUtils.checkError(util, response); + ResponseUtils.checkError(serde, response); } protected InternalResponse createResponse(final Message message) throws VPackParserException { - final InternalResponse response = util.deserialize(message.getHead().toByteArray(), InternalResponse.class); + final InternalResponse response = serde.deserialize(message.getHead().toByteArray(), InternalResponse.class); if (message.getBody() != null) { response.setBody(message.getBody().toByteArray()); } @@ -168,7 +164,7 @@ protected final Message createMessage(final InternalRequest request) throws VPac request.putHeaderParam("accept", "application/x-velocypack"); request.putHeaderParam("content-type", "application/x-velocypack"); final long id = mId.incrementAndGet(); - return new Message(id, util.serialize(request), request.getBody()); + return new Message(id, serde.serialize(request), request.getBody()); } protected Collection buildChunks(final Message message) { @@ -197,5 +193,4 @@ public void setJwt(String jwt) { this.jwt = jwt; } - } diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/VstCommunicationSync.java b/vst/src/main/java/com/arangodb/vst/VstCommunicationSync.java similarity index 51% rename from driver/src/main/java/com/arangodb/internal/velocystream/VstCommunicationSync.java rename to vst/src/main/java/com/arangodb/vst/VstCommunicationSync.java index f8416c74c..97b7671c7 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/VstCommunicationSync.java +++ b/vst/src/main/java/com/arangodb/vst/VstCommunicationSync.java @@ -18,27 +18,25 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.velocystream; +package com.arangodb.vst; import com.arangodb.ArangoDBException; -import com.arangodb.internal.net.ArangoDBRedirectException; import com.arangodb.config.HostDescription; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.InternalResponse; +import com.arangodb.internal.config.ArangoConfig; +import com.arangodb.internal.net.ArangoDBRedirectException; import com.arangodb.internal.net.HostHandle; import com.arangodb.internal.net.HostHandler; -import com.arangodb.internal.serde.InternalSerde; import com.arangodb.internal.util.HostUtils; -import com.arangodb.internal.velocystream.internal.AuthenticationRequest; -import com.arangodb.internal.velocystream.internal.JwtAuthenticationRequest; -import com.arangodb.internal.velocystream.internal.Message; -import com.arangodb.internal.velocystream.internal.VstConnectionSync; import com.arangodb.velocypack.exception.VPackParserException; -import com.arangodb.internal.InternalRequest; -import com.arangodb.internal.InternalResponse; +import com.arangodb.vst.internal.AuthenticationRequest; +import com.arangodb.vst.internal.JwtAuthenticationRequest; +import com.arangodb.vst.internal.Message; +import com.arangodb.vst.internal.VstConnectionSync; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.net.ssl.SSLContext; - /** * @author Mark Vollmary */ @@ -46,11 +44,8 @@ public class VstCommunicationSync extends VstCommunication build(final InternalSerde util) { - return new VstCommunicationSync(hostHandler, timeout, user, password, jwt, useSsl, sslContext, util, - chunksize, - maxConnections, connectionTtl); - } - - } - } diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/VstConnectionFactorySync.java b/vst/src/main/java/com/arangodb/vst/VstConnectionFactorySync.java similarity index 52% rename from driver/src/main/java/com/arangodb/internal/velocystream/VstConnectionFactorySync.java rename to vst/src/main/java/com/arangodb/vst/VstConnectionFactorySync.java index 713e5a422..0ab5860aa 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/VstConnectionFactorySync.java +++ b/vst/src/main/java/com/arangodb/vst/VstConnectionFactorySync.java @@ -18,35 +18,21 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.velocystream; +package com.arangodb.vst; +import com.arangodb.config.HostDescription; +import com.arangodb.internal.config.ArangoConfig; import com.arangodb.internal.net.Connection; import com.arangodb.internal.net.ConnectionFactory; -import com.arangodb.config.HostDescription; -import com.arangodb.internal.velocystream.internal.MessageStore; -import com.arangodb.internal.velocystream.internal.VstConnectionSync; - -import javax.net.ssl.SSLContext; +import com.arangodb.vst.internal.VstConnectionSync; /** * @author Mark Vollmary */ public class VstConnectionFactorySync implements ConnectionFactory { - private final VstConnectionSync.Builder builder; - - public VstConnectionFactorySync(final Integer timeout, final Long connectionTtl, - final Integer keepAliveInterval, final Boolean useSsl, - final SSLContext sslContext) { - super(); - builder = new VstConnectionSync.Builder().timeout(timeout).ttl(connectionTtl) - .keepAliveInterval(keepAliveInterval).useSsl(useSsl) - .sslContext(sslContext); - } - @Override - public Connection create(final HostDescription host) { - return builder.messageStore(new MessageStore()).host(host).build(); + public Connection create(final ArangoConfig config, final HostDescription host) { + return new VstConnectionSync(config, host); } - } diff --git a/vst/src/main/java/com/arangodb/vst/VstModule.java b/vst/src/main/java/com/arangodb/vst/VstModule.java new file mode 100644 index 000000000..255a041fd --- /dev/null +++ b/vst/src/main/java/com/arangodb/vst/VstModule.java @@ -0,0 +1,26 @@ +package com.arangodb.vst; + +import com.arangodb.vst.internal.AuthenticationRequest; +import com.arangodb.vst.internal.JwtAuthenticationRequest; +import com.fasterxml.jackson.databind.Module; +import com.fasterxml.jackson.databind.module.SimpleModule; + +import java.util.function.Supplier; + +enum VstModule implements Supplier { + INSTANCE; + + private final SimpleModule module; + + VstModule() { + module = new SimpleModule(); + module.addSerializer(AuthenticationRequest.class, VstSerializers.AUTHENTICATION_REQUEST); + module.addSerializer(JwtAuthenticationRequest.class, VstSerializers.JWT_AUTHENTICATION_REQUEST); + } + + @Override + public Module get() { + return module; + } + +} diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/VstProtocol.java b/vst/src/main/java/com/arangodb/vst/VstProtocol.java similarity index 93% rename from driver/src/main/java/com/arangodb/internal/velocystream/VstProtocol.java rename to vst/src/main/java/com/arangodb/vst/VstProtocol.java index 4782cea74..3642f1826 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/VstProtocol.java +++ b/vst/src/main/java/com/arangodb/vst/VstProtocol.java @@ -18,13 +18,13 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.velocystream; +package com.arangodb.vst; import com.arangodb.internal.net.CommunicationProtocol; import com.arangodb.internal.net.HostHandle; -import com.arangodb.internal.velocystream.internal.VstConnectionSync; import com.arangodb.internal.InternalRequest; import com.arangodb.internal.InternalResponse; +import com.arangodb.vst.internal.VstConnectionSync; import java.io.IOException; diff --git a/vst/src/main/java/com/arangodb/vst/VstProtocolProvider.java b/vst/src/main/java/com/arangodb/vst/VstProtocolProvider.java new file mode 100644 index 000000000..8a6341fc7 --- /dev/null +++ b/vst/src/main/java/com/arangodb/vst/VstProtocolProvider.java @@ -0,0 +1,32 @@ +package com.arangodb.vst; + +import com.arangodb.Protocol; +import com.arangodb.internal.config.ArangoConfig; +import com.arangodb.internal.net.CommunicationProtocol; +import com.arangodb.internal.net.ConnectionFactory; +import com.arangodb.internal.net.HostHandler; +import com.arangodb.internal.net.ProtocolProvider; +import com.fasterxml.jackson.databind.Module; + +public class VstProtocolProvider implements ProtocolProvider { + @Override + public boolean supportsProtocol(Protocol protocol) { + return Protocol.VST.equals(protocol); + } + + @Override + public ConnectionFactory createConnectionFactory() { + return new VstConnectionFactorySync(); + } + + @Override + public CommunicationProtocol createProtocol(ArangoConfig config, HostHandler hostHandler) { + return new VstProtocol(new VstCommunicationSync(config, hostHandler)); + } + + @Override + public Module protocolModule() { + return VstModule.INSTANCE.get(); + } + +} diff --git a/vst/src/main/java/com/arangodb/vst/VstSerializers.java b/vst/src/main/java/com/arangodb/vst/VstSerializers.java new file mode 100644 index 000000000..72289ec42 --- /dev/null +++ b/vst/src/main/java/com/arangodb/vst/VstSerializers.java @@ -0,0 +1,40 @@ +package com.arangodb.vst; + +import com.arangodb.vst.internal.AuthenticationRequest; +import com.arangodb.vst.internal.JwtAuthenticationRequest; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +public final class VstSerializers { + + static final JsonSerializer AUTHENTICATION_REQUEST = + new JsonSerializer() { + @Override + public void serialize(AuthenticationRequest value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeStartArray(); + gen.writeNumber(value.getVersion()); + gen.writeNumber(value.getType()); + gen.writeString(value.getEncryption()); + gen.writeString(value.getUser()); + gen.writeString(value.getPassword()); + gen.writeEndArray(); + } + }; + static final JsonSerializer JWT_AUTHENTICATION_REQUEST = + new JsonSerializer() { + @Override + public void serialize(JwtAuthenticationRequest value, JsonGenerator gen, + SerializerProvider serializers) throws IOException { + gen.writeStartArray(); + gen.writeNumber(value.getVersion()); + gen.writeNumber(value.getType()); + gen.writeString(value.getEncryption()); + gen.writeString(value.getToken()); + gen.writeEndArray(); + } + }; + +} diff --git a/driver/src/main/java/com/arangodb/async/internal/velocystream/VstCommunicationAsync.java b/vst/src/main/java/com/arangodb/vst/async/VstCommunicationAsync.java similarity index 64% rename from driver/src/main/java/com/arangodb/async/internal/velocystream/VstCommunicationAsync.java rename to vst/src/main/java/com/arangodb/vst/async/VstCommunicationAsync.java index bc111aa63..c787c0cbf 100644 --- a/driver/src/main/java/com/arangodb/async/internal/velocystream/VstCommunicationAsync.java +++ b/vst/src/main/java/com/arangodb/vst/async/VstCommunicationAsync.java @@ -18,42 +18,41 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.async.internal.velocystream; +package com.arangodb.vst.async; import com.arangodb.ArangoDBException; -import com.arangodb.internal.net.ArangoDBRedirectException; import com.arangodb.config.HostDescription; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.InternalResponse; +import com.arangodb.internal.config.ArangoConfig; +import com.arangodb.internal.net.ArangoDBRedirectException; +import com.arangodb.internal.net.AsyncCommunication; import com.arangodb.internal.net.HostHandle; import com.arangodb.internal.net.HostHandler; -import com.arangodb.internal.serde.InternalSerde; import com.arangodb.internal.util.HostUtils; -import com.arangodb.internal.velocystream.VstCommunication; -import com.arangodb.internal.velocystream.internal.AuthenticationRequest; -import com.arangodb.internal.velocystream.internal.JwtAuthenticationRequest; -import com.arangodb.internal.velocystream.internal.Message; import com.arangodb.velocypack.exception.VPackException; import com.arangodb.velocypack.exception.VPackParserException; -import com.arangodb.internal.InternalRequest; -import com.arangodb.internal.InternalResponse; +import com.arangodb.vst.VstCommunication; +import com.arangodb.vst.internal.AuthenticationRequest; +import com.arangodb.vst.internal.JwtAuthenticationRequest; +import com.arangodb.vst.internal.Message; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.net.ssl.SSLContext; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; /** * @author Mark Vollmary */ -public class VstCommunicationAsync extends VstCommunication, VstConnectionAsync> { +public class VstCommunicationAsync + extends VstCommunication, VstConnectionAsync> + implements AsyncCommunication { private static final Logger LOGGER = LoggerFactory.getLogger(VstCommunicationAsync.class); - private VstCommunicationAsync(final HostHandler hostHandler, final Integer timeout, final String user, - final String password, final String jwt, final Boolean useSsl, - final SSLContext sslContext, final InternalSerde util, - final Integer chunksize, final Integer maxConnections, final Long connectionTtl) { - super(timeout, user, password, jwt, useSsl, sslContext, util, chunksize, hostHandler); + public VstCommunicationAsync(ArangoConfig config, HostHandler hostHandler) { + super(config, hostHandler); } @Override @@ -68,7 +67,7 @@ protected CompletableFuture execute(final InternalRequest requ try { final Message message = createMessage(request); if (LOGGER.isDebugEnabled()) { - String body = request.getBody() == null ? "" : util.toJsonString(request.getBody()); + String body = request.getBody() == null ? "" : serde.toJsonString(request.getBody()); LOGGER.debug("Send Request [id={}]: {} {}", message.getId(), request, body); } send(message, connection).whenComplete((m, ex) -> { @@ -107,7 +106,7 @@ protected CompletableFuture execute(final InternalRequest requ rfuture.completeExceptionally(e); } if (LOGGER.isDebugEnabled()) { - String body = response.getBody() == null ? "" : util.toJsonString(response.getBody()); + String body = response.getBody() == null ? "" : serde.toJsonString(response.getBody()); LOGGER.debug("Received Response [id={}]: {} {}", m.getId(), response, body); } rfuture.complete(response); @@ -155,74 +154,4 @@ protected void authenticate(final VstConnectionAsync connection) { checkError(response); } - public static class Builder { - - private final HostHandler hostHandler; - private Integer timeout; - private Long connectionTtl; - private String user; - private String password; - private String jwt; - private Boolean useSsl; - private SSLContext sslContext; - private Integer chunksize; - private Integer maxConnections; - - public Builder(final HostHandler hostHandler) { - super(); - this.hostHandler = hostHandler; - } - - public Builder timeout(final Integer timeout) { - this.timeout = timeout; - return this; - } - - public Builder user(final String user) { - this.user = user; - return this; - } - - public Builder password(final String password) { - this.password = password; - return this; - } - - public Builder jwt(final String jwt) { - this.jwt = jwt; - return this; - } - - public Builder useSsl(final Boolean useSsl) { - this.useSsl = useSsl; - return this; - } - - public Builder sslContext(final SSLContext sslContext) { - this.sslContext = sslContext; - return this; - } - - public Builder chunksize(final Integer chunksize) { - this.chunksize = chunksize; - return this; - } - - public Builder maxConnections(final Integer maxConnections) { - this.maxConnections = maxConnections; - return this; - } - - public Builder connectionTtl(final Long connectionTtl) { - this.connectionTtl = connectionTtl; - return this; - } - - public VstCommunicationAsync build(final InternalSerde util) { - return new VstCommunicationAsync(hostHandler, timeout, user, password, jwt, useSsl, sslContext, util, - chunksize, - maxConnections, connectionTtl); - } - } - } diff --git a/vst/src/main/java/com/arangodb/vst/async/VstConnectionAsync.java b/vst/src/main/java/com/arangodb/vst/async/VstConnectionAsync.java new file mode 100644 index 000000000..41e6265d3 --- /dev/null +++ b/vst/src/main/java/com/arangodb/vst/async/VstConnectionAsync.java @@ -0,0 +1,69 @@ +/* + * DISCLAIMER + * + * Copyright 2016 ArangoDB GmbH, Cologne, Germany + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Copyright holder is ArangoDB GmbH, Cologne, Germany + */ + +package com.arangodb.vst.async; + +import com.arangodb.async.internal.utils.CompletableFutureUtils; +import com.arangodb.config.HostDescription; +import com.arangodb.internal.config.ArangoConfig; +import com.arangodb.vst.internal.Chunk; +import com.arangodb.vst.internal.Message; +import com.arangodb.vst.internal.VstConnection; + +import java.util.Collection; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.FutureTask; +import java.util.concurrent.TimeUnit; + +/** + * @author Mark Vollmary + */ +public class VstConnectionAsync extends VstConnection> { + + VstConnectionAsync(final ArangoConfig config, final HostDescription host) { + super(config, host); + } + + @Override + public synchronized CompletableFuture write(final Message message, final Collection chunks) { + final CompletableFuture future = new CompletableFuture<>(); + final FutureTask task = new FutureTask<>(() -> { + try { + future.complete(messageStore.get(message.getId())); + } catch (final Exception e) { + future.completeExceptionally(e); + } + return null; + }); + messageStore.storeMessage(message.getId(), task); + super.writeIntern(message, chunks); + if (timeout == null || timeout == 0L) { + return future; + } else { + return CompletableFutureUtils.orTimeout(future, timeout, TimeUnit.MILLISECONDS); + } + } + + @Override + protected void doKeepAlive() { + sendKeepAlive().join(); + } + +} diff --git a/driver/src/main/java/com/arangodb/async/internal/velocystream/VstConnectionFactoryAsync.java b/vst/src/main/java/com/arangodb/vst/async/VstConnectionFactoryAsync.java similarity index 54% rename from driver/src/main/java/com/arangodb/async/internal/velocystream/VstConnectionFactoryAsync.java rename to vst/src/main/java/com/arangodb/vst/async/VstConnectionFactoryAsync.java index 72018d182..3c02a24fd 100644 --- a/driver/src/main/java/com/arangodb/async/internal/velocystream/VstConnectionFactoryAsync.java +++ b/vst/src/main/java/com/arangodb/vst/async/VstConnectionFactoryAsync.java @@ -18,34 +18,20 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.async.internal.velocystream; +package com.arangodb.vst.async; +import com.arangodb.config.HostDescription; +import com.arangodb.internal.config.ArangoConfig; import com.arangodb.internal.net.Connection; import com.arangodb.internal.net.ConnectionFactory; -import com.arangodb.config.HostDescription; -import com.arangodb.internal.velocystream.internal.MessageStore; - -import javax.net.ssl.SSLContext; /** * @author Mark Vollmary */ public class VstConnectionFactoryAsync implements ConnectionFactory { - private final VstConnectionAsync.Builder builder; - - public VstConnectionFactoryAsync(final Integer timeout, final Long connectionTtl, - final Integer keepAliveInterval, final Boolean useSsl, - final SSLContext sslContext) { - super(); - builder = new VstConnectionAsync.Builder().timeout(timeout).ttl(connectionTtl) - .keepAliveInterval(keepAliveInterval).useSsl(useSsl) - .sslContext(sslContext); - } - @Override - public Connection create(final HostDescription host) { - return builder.messageStore(new MessageStore()).host(host).build(); + public Connection create(final ArangoConfig config, final HostDescription host) { + return new VstConnectionAsync(config, host); } - } diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java b/vst/src/main/java/com/arangodb/vst/internal/AuthenticationRequest.java similarity index 96% rename from driver/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java rename to vst/src/main/java/com/arangodb/vst/internal/AuthenticationRequest.java index a7498e4ce..e57217011 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java +++ b/vst/src/main/java/com/arangodb/vst/internal/AuthenticationRequest.java @@ -18,7 +18,7 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.velocystream.internal; +package com.arangodb.vst.internal; import com.arangodb.DbName; import com.arangodb.internal.InternalRequest; diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/internal/Chunk.java b/vst/src/main/java/com/arangodb/vst/internal/Chunk.java similarity index 97% rename from driver/src/main/java/com/arangodb/internal/velocystream/internal/Chunk.java rename to vst/src/main/java/com/arangodb/vst/internal/Chunk.java index 294aa18bb..93e2d7848 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/internal/Chunk.java +++ b/vst/src/main/java/com/arangodb/vst/internal/Chunk.java @@ -18,7 +18,7 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.velocystream.internal; +package com.arangodb.vst.internal; /** * @author Mark Vollmary diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/internal/ChunkStore.java b/vst/src/main/java/com/arangodb/vst/internal/ChunkStore.java similarity index 97% rename from driver/src/main/java/com/arangodb/internal/velocystream/internal/ChunkStore.java rename to vst/src/main/java/com/arangodb/vst/internal/ChunkStore.java index e95be998b..a945ec79d 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/internal/ChunkStore.java +++ b/vst/src/main/java/com/arangodb/vst/internal/ChunkStore.java @@ -18,7 +18,7 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.velocystream.internal; +package com.arangodb.vst.internal; import java.nio.BufferUnderflowException; import java.nio.ByteBuffer; diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/internal/JwtAuthenticationRequest.java b/vst/src/main/java/com/arangodb/vst/internal/JwtAuthenticationRequest.java similarity index 91% rename from driver/src/main/java/com/arangodb/internal/velocystream/internal/JwtAuthenticationRequest.java rename to vst/src/main/java/com/arangodb/vst/internal/JwtAuthenticationRequest.java index 3d9fe56f9..982ee32df 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/internal/JwtAuthenticationRequest.java +++ b/vst/src/main/java/com/arangodb/vst/internal/JwtAuthenticationRequest.java @@ -1,4 +1,4 @@ -package com.arangodb.internal.velocystream.internal; +package com.arangodb.vst.internal; import com.arangodb.DbName; import com.arangodb.internal.InternalRequest; diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/internal/Message.java b/vst/src/main/java/com/arangodb/vst/internal/Message.java similarity index 97% rename from driver/src/main/java/com/arangodb/internal/velocystream/internal/Message.java rename to vst/src/main/java/com/arangodb/vst/internal/Message.java index b2b7cc34e..7b673fb68 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/internal/Message.java +++ b/vst/src/main/java/com/arangodb/vst/internal/Message.java @@ -18,7 +18,7 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.velocystream.internal; +package com.arangodb.vst.internal; import com.arangodb.velocypack.VPackSlice; diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/internal/MessageStore.java b/vst/src/main/java/com/arangodb/vst/internal/MessageStore.java similarity index 98% rename from driver/src/main/java/com/arangodb/internal/velocystream/internal/MessageStore.java rename to vst/src/main/java/com/arangodb/vst/internal/MessageStore.java index 9e9184a5c..7e8417205 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/internal/MessageStore.java +++ b/vst/src/main/java/com/arangodb/vst/internal/MessageStore.java @@ -18,7 +18,7 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.velocystream.internal; +package com.arangodb.vst.internal; import com.arangodb.ArangoDBException; import org.slf4j.Logger; diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/internal/VstConnection.java b/vst/src/main/java/com/arangodb/vst/internal/VstConnection.java similarity index 94% rename from driver/src/main/java/com/arangodb/internal/velocystream/internal/VstConnection.java rename to vst/src/main/java/com/arangodb/vst/internal/VstConnection.java index 29d80e0ea..59ce03e0c 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/internal/VstConnection.java +++ b/vst/src/main/java/com/arangodb/vst/internal/VstConnection.java @@ -18,13 +18,13 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb.internal.velocystream.internal; +package com.arangodb.vst.internal; import com.arangodb.ArangoDBException; -import com.arangodb.config.ArangoConfigProperties; +import com.arangodb.config.HostDescription; import com.arangodb.internal.ArangoDefaults; +import com.arangodb.internal.config.ArangoConfig; import com.arangodb.internal.net.Connection; -import com.arangodb.config.HostDescription; import com.arangodb.velocypack.VPackBuilder; import com.arangodb.velocypack.VPackSlice; import com.arangodb.velocypack.ValueType; @@ -56,7 +56,7 @@ public abstract class VstConnection implements Connection { private static final Logger LOGGER = LoggerFactory.getLogger(VstConnection.class); private static final byte[] PROTOCOL_HEADER = "VST/1.0\r\n\r\n".getBytes(); - protected final MessageStore messageStore; + protected final MessageStore messageStore = new MessageStore(); protected final Integer timeout; private final AtomicLong keepAliveId = new AtomicLong(); private final Long ttl; @@ -87,21 +87,14 @@ public abstract class VstConnection implements Connection { private OutputStream outputStream; private InputStream inputStream; - protected VstConnection(final HostDescription host, - final Integer timeout, - final Long ttl, - final Integer keepAliveInterval, - final Boolean useSsl, - final SSLContext sslContext, - final MessageStore messageStore) { + protected VstConnection(final ArangoConfig config, final HostDescription host) { super(); + timeout = config.getTimeout(); + ttl = config.getConnectionTtl(); + keepAliveInterval = config.getKeepAliveInterval(); + useSsl = config.getUseSsl(); + sslContext = config.getSslContext(); this.host = host; - this.timeout = timeout; - this.ttl = ttl; - this.keepAliveInterval = keepAliveInterval; - this.useSsl = useSsl; - this.sslContext = sslContext; - this.messageStore = messageStore; connectionName = "connection_" + System.currentTimeMillis() + "_" + Math.random(); LOGGER.debug("[" + connectionName + "]: Connection created"); diff --git a/vst/src/main/java/com/arangodb/vst/internal/VstConnectionSync.java b/vst/src/main/java/com/arangodb/vst/internal/VstConnectionSync.java new file mode 100644 index 000000000..28a8bcd89 --- /dev/null +++ b/vst/src/main/java/com/arangodb/vst/internal/VstConnectionSync.java @@ -0,0 +1,63 @@ +/* + * DISCLAIMER + * + * Copyright 2016 ArangoDB GmbH, Cologne, Germany + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Copyright holder is ArangoDB GmbH, Cologne, Germany + */ + +package com.arangodb.vst.internal; + +import com.arangodb.ArangoDBException; +import com.arangodb.config.HostDescription; +import com.arangodb.internal.config.ArangoConfig; + +import java.util.Collection; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.FutureTask; +import java.util.concurrent.TimeUnit; + +/** + * @author Mark Vollmary + */ +public class VstConnectionSync extends VstConnection { + + public VstConnectionSync(final ArangoConfig config, final HostDescription host) { + super(config, host); + } + + @Override + public Message write(final Message message, final Collection chunks) { + final FutureTask task = new FutureTask<>(() -> messageStore.get(message.getId())); + messageStore.storeMessage(message.getId(), task); + super.writeIntern(message, chunks); + try { + return timeout == null || timeout == 0L ? task.get() : task.get(timeout, TimeUnit.MILLISECONDS); + } catch (final ExecutionException e) { + throw ArangoDBException.wrap(e.getCause()); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ArangoDBException(e); + } catch (final Exception e) { + throw ArangoDBException.wrap(e); + } + } + + @Override + protected void doKeepAlive() { + sendKeepAlive(); + } + +} diff --git a/vst/src/main/resources/META-INF/services/com.arangodb.internal.net.AsyncProtocolProvider b/vst/src/main/resources/META-INF/services/com.arangodb.internal.net.AsyncProtocolProvider new file mode 100644 index 000000000..dc7f09560 --- /dev/null +++ b/vst/src/main/resources/META-INF/services/com.arangodb.internal.net.AsyncProtocolProvider @@ -0,0 +1 @@ +com.arangodb.vst.VstAsyncProtocolProvider diff --git a/vst/src/main/resources/META-INF/services/com.arangodb.internal.net.ProtocolProvider b/vst/src/main/resources/META-INF/services/com.arangodb.internal.net.ProtocolProvider new file mode 100644 index 000000000..6d11ca0c7 --- /dev/null +++ b/vst/src/main/resources/META-INF/services/com.arangodb.internal.net.ProtocolProvider @@ -0,0 +1 @@ +com.arangodb.vst.VstProtocolProvider