diff --git a/pom.xml b/pom.xml
index c9b2825a0..88029fe48 100644
--- a/pom.xml
+++ b/pom.xml
@@ -251,6 +251,12 @@
jackson-dataformat-velocypack
true
+
+ com.google.code.findbugs
+ jsr305
+ 3.0.2
+ provided
+
ch.qos.logback
logback-classic
diff --git a/src/main/java/com/arangodb/ArangoCollection.java b/src/main/java/com/arangodb/ArangoCollection.java
index 40a5cdfd7..8cd8a84a2 100644
--- a/src/main/java/com/arangodb/ArangoCollection.java
+++ b/src/main/java/com/arangodb/ArangoCollection.java
@@ -23,6 +23,7 @@
import com.arangodb.entity.*;
import com.arangodb.model.*;
+import javax.annotation.concurrent.ThreadSafe;
import java.util.Collection;
/**
@@ -35,6 +36,7 @@
* @see Documents API Documentation
*/
@SuppressWarnings("UnusedReturnValue")
+@ThreadSafe
public interface ArangoCollection extends ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/ArangoDB.java b/src/main/java/com/arangodb/ArangoDB.java
index bb149d55c..07ab9cc53 100644
--- a/src/main/java/com/arangodb/ArangoDB.java
+++ b/src/main/java/com/arangodb/ArangoDB.java
@@ -61,6 +61,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.annotation.concurrent.ThreadSafe;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import java.io.InputStream;
@@ -85,6 +86,7 @@
* @author Michele Rastelli
*/
@SuppressWarnings("UnusedReturnValue")
+@ThreadSafe
public interface ArangoDB extends ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/ArangoDatabase.java b/src/main/java/com/arangodb/ArangoDatabase.java
index f0cfede5f..8dd83b9ce 100644
--- a/src/main/java/com/arangodb/ArangoDatabase.java
+++ b/src/main/java/com/arangodb/ArangoDatabase.java
@@ -27,6 +27,7 @@
import com.arangodb.model.arangosearch.AnalyzerDeleteOptions;
import com.arangodb.model.arangosearch.ArangoSearchCreateOptions;
+import javax.annotation.concurrent.ThreadSafe;
import java.util.Collection;
import java.util.Map;
@@ -39,6 +40,7 @@
* @see Query API Documentation
*/
@SuppressWarnings("UnusedReturnValue")
+@ThreadSafe
public interface ArangoDatabase extends ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/ArangoEdgeCollection.java b/src/main/java/com/arangodb/ArangoEdgeCollection.java
index 17d6d054b..9308f674f 100644
--- a/src/main/java/com/arangodb/ArangoEdgeCollection.java
+++ b/src/main/java/com/arangodb/ArangoEdgeCollection.java
@@ -24,6 +24,8 @@
import com.arangodb.entity.EdgeUpdateEntity;
import com.arangodb.model.*;
+import javax.annotation.concurrent.ThreadSafe;
+
/**
* Interface for operations on ArangoDB edge collection level.
*
@@ -31,6 +33,7 @@
* @see API Documentation
*/
@SuppressWarnings("UnusedReturnValue")
+@ThreadSafe
public interface ArangoEdgeCollection extends ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/ArangoGraph.java b/src/main/java/com/arangodb/ArangoGraph.java
index 873405cda..cec35346b 100644
--- a/src/main/java/com/arangodb/ArangoGraph.java
+++ b/src/main/java/com/arangodb/ArangoGraph.java
@@ -25,6 +25,7 @@
import com.arangodb.model.GraphCreateOptions;
import com.arangodb.model.VertexCollectionCreateOptions;
+import javax.annotation.concurrent.ThreadSafe;
import java.util.Collection;
/**
@@ -33,6 +34,7 @@
* @author Mark Vollmary
* @see API Documentation
*/
+@ThreadSafe
public interface ArangoGraph extends ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/ArangoMetrics.java b/src/main/java/com/arangodb/ArangoMetrics.java
index 21d659b53..38253fac4 100644
--- a/src/main/java/com/arangodb/ArangoMetrics.java
+++ b/src/main/java/com/arangodb/ArangoMetrics.java
@@ -20,12 +20,15 @@
package com.arangodb;
+import javax.annotation.concurrent.ThreadSafe;
+
/**
* Interface for accessing metrics.
*
* @author Michele Rastelli
* @since ArangoDB 3.9
*/
+@ThreadSafe
public interface ArangoMetrics {
/**
* @return queue time metrics
diff --git a/src/main/java/com/arangodb/ArangoSearch.java b/src/main/java/com/arangodb/ArangoSearch.java
index 7a6600d79..bf3fdd1ec 100644
--- a/src/main/java/com/arangodb/ArangoSearch.java
+++ b/src/main/java/com/arangodb/ArangoSearch.java
@@ -25,6 +25,8 @@
import com.arangodb.model.arangosearch.ArangoSearchCreateOptions;
import com.arangodb.model.arangosearch.ArangoSearchPropertiesOptions;
+import javax.annotation.concurrent.ThreadSafe;
+
/**
* Interface for operations on ArangoDB view level for ArangoSearch views.
*
@@ -32,6 +34,7 @@
* @see View API Documentation
* @since ArangoDB 3.4.0
*/
+@ThreadSafe
public interface ArangoSearch extends ArangoView {
/**
diff --git a/src/main/java/com/arangodb/ArangoSerializationAccessor.java b/src/main/java/com/arangodb/ArangoSerializationAccessor.java
index f140f054e..a256358cc 100644
--- a/src/main/java/com/arangodb/ArangoSerializationAccessor.java
+++ b/src/main/java/com/arangodb/ArangoSerializationAccessor.java
@@ -23,9 +23,12 @@
import com.arangodb.internal.util.ArangoSerializationFactory.Serializer;
import com.arangodb.util.ArangoSerialization;
+import javax.annotation.concurrent.ThreadSafe;
+
/**
* @author Mark Vollmary
*/
+@ThreadSafe
public interface ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/ArangoVertexCollection.java b/src/main/java/com/arangodb/ArangoVertexCollection.java
index e34705cf4..28dddfd0c 100644
--- a/src/main/java/com/arangodb/ArangoVertexCollection.java
+++ b/src/main/java/com/arangodb/ArangoVertexCollection.java
@@ -24,12 +24,15 @@
import com.arangodb.entity.VertexUpdateEntity;
import com.arangodb.model.*;
+import javax.annotation.concurrent.ThreadSafe;
+
/**
* Interface for operations on ArangoDB vertex collection level.
*
* @author Mark Vollmary
* @see API Documentation
*/
+@ThreadSafe
public interface ArangoVertexCollection extends ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/ArangoView.java b/src/main/java/com/arangodb/ArangoView.java
index 56a3a7995..6ed960caa 100644
--- a/src/main/java/com/arangodb/ArangoView.java
+++ b/src/main/java/com/arangodb/ArangoView.java
@@ -22,6 +22,8 @@
import com.arangodb.entity.ViewEntity;
+import javax.annotation.concurrent.ThreadSafe;
+
/**
* Interface for operations on ArangoDB view level.
*
@@ -30,6 +32,7 @@
* @since ArangoDB 3.4.0
*/
@SuppressWarnings("UnusedReturnValue")
+@ThreadSafe
public interface ArangoView extends ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/QueueTimeMetrics.java b/src/main/java/com/arangodb/QueueTimeMetrics.java
index 333d14997..c04a7110b 100644
--- a/src/main/java/com/arangodb/QueueTimeMetrics.java
+++ b/src/main/java/com/arangodb/QueueTimeMetrics.java
@@ -22,6 +22,8 @@
import com.arangodb.model.QueueTimeSample;
+import javax.annotation.concurrent.ThreadSafe;
+
/**
* Interface for accessing queue time latency metrics, reported by the "X-Arango-Queue-Time-Seconds" response header.
* This header contains the most recent request (de)queuing time (in seconds) as tracked by the server’s scheduler.
@@ -30,6 +32,7 @@
* @see API Documentation
* @since ArangoDB 3.9
*/
+@ThreadSafe
public interface QueueTimeMetrics {
/**
diff --git a/src/main/java/com/arangodb/async/ArangoCollectionAsync.java b/src/main/java/com/arangodb/async/ArangoCollectionAsync.java
index c54a7c8e1..ff7a6092b 100644
--- a/src/main/java/com/arangodb/async/ArangoCollectionAsync.java
+++ b/src/main/java/com/arangodb/async/ArangoCollectionAsync.java
@@ -25,6 +25,7 @@
import com.arangodb.entity.*;
import com.arangodb.model.*;
+import javax.annotation.concurrent.ThreadSafe;
import java.util.Collection;
import java.util.concurrent.CompletableFuture;
@@ -36,6 +37,7 @@
* @see Documents API Documentation
*/
@SuppressWarnings("unused")
+@ThreadSafe
public interface ArangoCollectionAsync extends ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/async/ArangoDBAsync.java b/src/main/java/com/arangodb/async/ArangoDBAsync.java
index ed4eb8ed3..d960c3a3e 100644
--- a/src/main/java/com/arangodb/async/ArangoDBAsync.java
+++ b/src/main/java/com/arangodb/async/ArangoDBAsync.java
@@ -50,6 +50,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.annotation.concurrent.ThreadSafe;
import javax.net.ssl.SSLContext;
import java.io.InputStream;
import java.lang.annotation.Annotation;
@@ -70,6 +71,7 @@
*
* @author Mark Vollmary
*/
+@ThreadSafe
public interface ArangoDBAsync extends ArangoSerializationAccessor {
void shutdown() throws ArangoDBException;
diff --git a/src/main/java/com/arangodb/async/ArangoDatabaseAsync.java b/src/main/java/com/arangodb/async/ArangoDatabaseAsync.java
index 420034655..93d973e00 100644
--- a/src/main/java/com/arangodb/async/ArangoDatabaseAsync.java
+++ b/src/main/java/com/arangodb/async/ArangoDatabaseAsync.java
@@ -30,6 +30,7 @@
import com.arangodb.model.arangosearch.AnalyzerDeleteOptions;
import com.arangodb.model.arangosearch.ArangoSearchCreateOptions;
+import javax.annotation.concurrent.ThreadSafe;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
@@ -42,6 +43,7 @@
* @see Query API Documentation
*/
@SuppressWarnings("unused")
+@ThreadSafe
public interface ArangoDatabaseAsync extends ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/async/ArangoEdgeCollectionAsync.java b/src/main/java/com/arangodb/async/ArangoEdgeCollectionAsync.java
index 2dea8807c..b4465a861 100644
--- a/src/main/java/com/arangodb/async/ArangoEdgeCollectionAsync.java
+++ b/src/main/java/com/arangodb/async/ArangoEdgeCollectionAsync.java
@@ -25,6 +25,7 @@
import com.arangodb.entity.EdgeUpdateEntity;
import com.arangodb.model.*;
+import javax.annotation.concurrent.ThreadSafe;
import java.util.concurrent.CompletableFuture;
/**
@@ -34,6 +35,7 @@
* @see API Documentation
*/
@SuppressWarnings("unused")
+@ThreadSafe
public interface ArangoEdgeCollectionAsync extends ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/async/ArangoGraphAsync.java b/src/main/java/com/arangodb/async/ArangoGraphAsync.java
index 17cb45a95..73d27d0af 100644
--- a/src/main/java/com/arangodb/async/ArangoGraphAsync.java
+++ b/src/main/java/com/arangodb/async/ArangoGraphAsync.java
@@ -26,6 +26,7 @@
import com.arangodb.model.GraphCreateOptions;
import com.arangodb.model.VertexCollectionCreateOptions;
+import javax.annotation.concurrent.ThreadSafe;
import java.util.Collection;
import java.util.concurrent.CompletableFuture;
@@ -36,6 +37,7 @@
* @see API Documentation
*/
@SuppressWarnings("unused")
+@ThreadSafe
public interface ArangoGraphAsync extends ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/async/ArangoSearchAsync.java b/src/main/java/com/arangodb/async/ArangoSearchAsync.java
index d738012c1..7e7431b04 100644
--- a/src/main/java/com/arangodb/async/ArangoSearchAsync.java
+++ b/src/main/java/com/arangodb/async/ArangoSearchAsync.java
@@ -25,6 +25,7 @@
import com.arangodb.model.arangosearch.ArangoSearchCreateOptions;
import com.arangodb.model.arangosearch.ArangoSearchPropertiesOptions;
+import javax.annotation.concurrent.ThreadSafe;
import java.util.concurrent.CompletableFuture;
/**
@@ -34,6 +35,7 @@
* @see View API Documentation
* @since ArangoDB 3.4.0
*/
+@ThreadSafe
public interface ArangoSearchAsync extends ArangoViewAsync {
/**
diff --git a/src/main/java/com/arangodb/async/ArangoVertexCollectionAsync.java b/src/main/java/com/arangodb/async/ArangoVertexCollectionAsync.java
index b610a9796..58a3942c8 100644
--- a/src/main/java/com/arangodb/async/ArangoVertexCollectionAsync.java
+++ b/src/main/java/com/arangodb/async/ArangoVertexCollectionAsync.java
@@ -25,6 +25,7 @@
import com.arangodb.entity.VertexUpdateEntity;
import com.arangodb.model.*;
+import javax.annotation.concurrent.ThreadSafe;
import java.util.concurrent.CompletableFuture;
/**
@@ -34,6 +35,7 @@
* @see API Documentation
*/
@SuppressWarnings("unused")
+@ThreadSafe
public interface ArangoVertexCollectionAsync extends ArangoSerializationAccessor {
/**
diff --git a/src/main/java/com/arangodb/async/ArangoViewAsync.java b/src/main/java/com/arangodb/async/ArangoViewAsync.java
index fed3da081..d100c6300 100644
--- a/src/main/java/com/arangodb/async/ArangoViewAsync.java
+++ b/src/main/java/com/arangodb/async/ArangoViewAsync.java
@@ -23,6 +23,7 @@
import com.arangodb.ArangoSerializationAccessor;
import com.arangodb.entity.ViewEntity;
+import javax.annotation.concurrent.ThreadSafe;
import java.util.concurrent.CompletableFuture;
/**
@@ -33,6 +34,7 @@
* @since ArangoDB 3.4.0
*/
@SuppressWarnings("unused")
+@ThreadSafe
public interface ArangoViewAsync extends ArangoSerializationAccessor {
/**