From 768a69cf4cbad7f039d5d51472f243c7b518fb98 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Wed, 13 Nov 2024 11:27:02 +0100 Subject: [PATCH] ArangoDB: fixed driver lifecycle --- .../communication/ArangoDBBucketManager.java | 2 +- .../ArangoDBBucketManagerFactory.java | 11 +-- .../communication/ArangoDBBuilder.java | 52 +++++++++--- .../communication/ArangoDBBuilderSync.java | 83 ------------------- .../communication/ArangoDBConfiguration.java | 17 +--- .../ArangoDBDocumentConfiguration.java | 5 +- .../ArangoDBDocumentManagerFactory.java | 10 ++- .../ArangoDBKeyValueConfiguration.java | 5 +- 8 files changed, 61 insertions(+), 124 deletions(-) delete mode 100644 jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBuilderSync.java diff --git a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBucketManager.java b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBucketManager.java index 8f4755b68..c3371b4a7 100644 --- a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBucketManager.java +++ b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBucketManager.java @@ -132,7 +132,7 @@ public void delete(Iterable keys) throws NullPointerException { @Override public void close() { - + arangoDB.shutdown(); } @Override diff --git a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBucketManagerFactory.java b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBucketManagerFactory.java index 50a98081c..1805ac498 100644 --- a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBucketManagerFactory.java +++ b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBucketManagerFactory.java @@ -34,10 +34,10 @@ public class ArangoDBBucketManagerFactory implements BucketManagerFactory { private static final String DEFAULT_NAMESPACE = "diana"; - private final ArangoDB arangoDB; + private final ArangoDBBuilder arangoDBBuilder; - ArangoDBBucketManagerFactory(ArangoDB arangoDB) { - this.arangoDB = arangoDB; + ArangoDBBucketManagerFactory(ArangoDBBuilder arangoDBBuilder) { + this.arangoDBBuilder = arangoDBBuilder; } @Override @@ -46,6 +46,7 @@ public ArangoDBBucketManager apply(String bucketName) throws UnsupportedOperatio } public ArangoDBBucketManager getBucketManager(String bucketName, String namespace) { + ArangoDB arangoDB = arangoDBBuilder.build(); ArangoDBUtil.checkCollection(bucketName, arangoDB, namespace); return new ArangoDBBucketManager(arangoDB, bucketName, namespace); } @@ -72,8 +73,8 @@ public List getList(String bucketName, Class clazz) throws UnsupportedOperationE @Override public void close() { - arangoDB.shutdown(); + // no-op + // ArangoDB driver instance will be closed in ArangoDBBucketManager.close() } - } diff --git a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBuilder.java b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBuilder.java index f9ca0cc8f..1e7c61495 100644 --- a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBuilder.java +++ b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBuilder.java @@ -14,29 +14,59 @@ */ package org.eclipse.jnosql.databases.arangodb.communication; +import com.arangodb.ArangoDB; import com.arangodb.Protocol; import com.arangodb.entity.LoadBalancingStrategy; -interface ArangoDBBuilder { +public class ArangoDBBuilder { + private final ArangoDB.Builder arangoDB; - void host(String host, int port); + ArangoDBBuilder(ArangoDB.Builder arangoDB) { + this.arangoDB = arangoDB; + } - void timeout(int timeout); + public void host(String host, int port) { + arangoDB.host(host, port); + } - void user(String user); + public void timeout(int timeout) { + arangoDB.timeout(timeout); + } - void password(String password); + public void user(String user) { + arangoDB.user(user); + } - void useSsl(boolean useSsl); + public void password(String password) { + arangoDB.password(password); + } - void chunkSize(int chunkSize); + public void useSsl(boolean useSsl) { + arangoDB.useSsl(useSsl); + } - void maxConnections(int maxConnections); + public void chunkSize(int chunkSize) { + arangoDB.chunkSize(chunkSize); + } - void protocol(Protocol protocol); + public void maxConnections(int maxConnections) { + arangoDB.maxConnections(maxConnections); + } - void acquireHostList(boolean acquireHostList); + public void protocol(Protocol protocol) { + arangoDB.protocol(protocol); + } - void loadBalancingStrategy(LoadBalancingStrategy loadBalancingStrategy); + public void acquireHostList(boolean acquireHostList) { + arangoDB.acquireHostList(acquireHostList); + } + + public void loadBalancingStrategy(LoadBalancingStrategy loadBalancingStrategy) { + arangoDB.loadBalancingStrategy(loadBalancingStrategy); + } + + public ArangoDB build() { + return arangoDB.build(); + } } diff --git a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBuilderSync.java b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBuilderSync.java deleted file mode 100644 index 46ecb9161..000000000 --- a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBuilderSync.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2022 Contributors to the Eclipse Foundation - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Apache License v2.0 which accompanies this distribution. - * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html - * and the Apache License v2.0 is available at http://www.opensource.org/licenses/apache2.0.php. - * - * You may elect to redistribute this code under either of these licenses. - * - * Contributors: - * - * Otavio Santana - */ -package org.eclipse.jnosql.databases.arangodb.communication; - -import com.arangodb.ArangoDB; -import com.arangodb.Protocol; -import com.arangodb.entity.LoadBalancingStrategy; - -public class ArangoDBBuilderSync implements ArangoDBBuilder { - - private final ArangoDB.Builder arangoDB; - - ArangoDBBuilderSync(ArangoDB.Builder arangoDB) { - this.arangoDB = arangoDB; - } - - @Override - public void host(String host, int port) { - arangoDB.host(host, port); - } - - @Override - public void timeout(int timeout) { - arangoDB.timeout(timeout); - } - - @Override - public void user(String user) { - arangoDB.user(user); - } - - @Override - public void password(String password) { - arangoDB.password(password); - } - - @Override - public void useSsl(boolean useSsl) { - arangoDB.useSsl(useSsl); - } - - - @Override - public void chunkSize(int chunkSize) { - arangoDB.chunkSize(chunkSize); - } - - @Override - public void maxConnections(int maxConnections) { - arangoDB.maxConnections(maxConnections); - } - - @Override - public void protocol(Protocol protocol) { - arangoDB.protocol(protocol); - } - - @Override - public void acquireHostList(boolean acquireHostList) { - arangoDB.acquireHostList(acquireHostList); - } - - @Override - public void loadBalancingStrategy(LoadBalancingStrategy loadBalancingStrategy) { - arangoDB.loadBalancingStrategy(loadBalancingStrategy); - } - - public ArangoDB build() { - return arangoDB.build(); - } -} diff --git a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBConfiguration.java b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBConfiguration.java index 11dfc3a92..1a2565f3c 100644 --- a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBConfiguration.java +++ b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBConfiguration.java @@ -107,21 +107,10 @@ public void setSerde(ArangoSerde serde) { builder.serde(serde); } - /** - * Defines a new builder to sync ArangoDB - * - * @param builder the new builder - * @throws NullPointerException when builder is null - */ - public void syncBuilder(ArangoDB.Builder builder) throws NullPointerException { - requireNonNull(builder, "builder is required"); - this.builder = builder; - } - - protected ArangoDB getArangoDB(Settings settings) { - ArangoDBBuilderSync aragonDB = new ArangoDBBuilderSync(builder); + protected ArangoDBBuilder getArangoDBBuilder(Settings settings) { + ArangoDBBuilder aragonDB = new ArangoDBBuilder(builder); ArangoDBBuilders.load(settings, aragonDB); - return aragonDB.build(); + return aragonDB; } } diff --git a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentConfiguration.java b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentConfiguration.java index 79d76eee9..b49820a67 100644 --- a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentConfiguration.java +++ b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentConfiguration.java @@ -15,7 +15,6 @@ package org.eclipse.jnosql.databases.arangodb.communication; -import com.arangodb.ArangoDB; import org.eclipse.jnosql.communication.Settings; import org.eclipse.jnosql.communication.semistructured.DatabaseConfiguration; @@ -36,8 +35,8 @@ public final class ArangoDBDocumentConfiguration extends ArangoDBConfiguration public ArangoDBDocumentManagerFactory apply(Settings settings) throws NullPointerException { requireNonNull(settings, "settings is required"); - ArangoDB arangoDB = getArangoDB(settings); - return new ArangoDBDocumentManagerFactory(arangoDB); + ArangoDBBuilder arangoDBBuilder = getArangoDBBuilder(settings); + return new ArangoDBDocumentManagerFactory(arangoDBBuilder); } } diff --git a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentManagerFactory.java b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentManagerFactory.java index 85c338442..2fc288051 100644 --- a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentManagerFactory.java +++ b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentManagerFactory.java @@ -22,20 +22,22 @@ public final class ArangoDBDocumentManagerFactory implements DatabaseManagerFactory { - private final ArangoDB arangoDB; + private final ArangoDBBuilder arangoDBBuilder; - ArangoDBDocumentManagerFactory(ArangoDB arangoDB) { - this.arangoDB = arangoDB; + ArangoDBDocumentManagerFactory(ArangoDBBuilder arangoDBBuilder) { + this.arangoDBBuilder = arangoDBBuilder; } @Override public ArangoDBDocumentManager apply(String database) { + ArangoDB arangoDB = arangoDBBuilder.build(); ArangoDBUtil.checkDatabase(database, arangoDB); return new DefaultArangoDBDocumentManager(database, arangoDB); } @Override public void close() { - arangoDB.shutdown(); + // no-op + // ArangoDB driver instance will be closed in ArangoDBDocumentManager.close() } } diff --git a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBKeyValueConfiguration.java b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBKeyValueConfiguration.java index ff871da76..8c5ff848f 100644 --- a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBKeyValueConfiguration.java +++ b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBKeyValueConfiguration.java @@ -15,7 +15,6 @@ package org.eclipse.jnosql.databases.arangodb.communication; -import com.arangodb.ArangoDB; import org.eclipse.jnosql.communication.Settings; import org.eclipse.jnosql.communication.keyvalue.KeyValueConfiguration; @@ -31,7 +30,7 @@ public final class ArangoDBKeyValueConfiguration extends ArangoDBConfiguration @Override public ArangoDBBucketManagerFactory apply(Settings settings) { - ArangoDB arangoDB = getArangoDB(settings); - return new ArangoDBBucketManagerFactory(arangoDB); + ArangoDBBuilder arangoDBBuilder = getArangoDBBuilder(settings); + return new ArangoDBBucketManagerFactory(arangoDBBuilder); } }