This library is a Java driver for ArangoDB.
Support version: ArangoDB-2.2.x
- ArangoDB Version 2.2.x
- Java 1.6 later
To add the driver to your project with maven, add the following code to your pom.xml:
<dependencies>
<dependency>
<groupId>com.arangodb</groupId>
<artifactId>arangodb-java-driver</artifactId>
<version>[2.2-SNAPSHOT,2.2]</version>
</dependency>
....
</dependencies>
If you want to test with a snapshot version (e.g. 2.2-SNAPSHOT), add the staging repository of oss.sonatype.org to your pom.xml:
<repositories>
<repository>
<id>arangodb-snapshots</id>
<url>https://oss.sonatype.org/content/groups/staging</url>
</repository>
</repositories>
Setup with default configuration:
// Initialize configure
ArangoConfigure configure = new ArangoConfigure();
configure.init();
// Create Driver (this instance is thread-safe)
ArangoDriver arangoDriver = new ArangoDriver(configure);
The driver is configured with some default values:
property-key | description | default value |
---|---|---|
host | ArangoDB host | 127.0.0.1 |
port | ArangoDB port | 8529 |
maxPerConnection | Max http connection per host. | 20 |
maxTotalConnection | Max http connection per configure. | 20 |
user | Basic Authentication User | |
password | Basic Authentication Password | |
proxy.host | proxy host | |
proxy.port | proxy port | |
connectionTimeout | socket connect timeout(millisecond) | -1 |
timeout | socket read timeout(millisecond) | -1 |
retryCount | http retry count | 3 |
defaultDatabase | default database | |
enableCURLLogger | logging flag by curl format for debug | false |
To customize the configuration the parameters can be changed in the code...
// Initialize configure
ArangoConfigure configure = new ArangoConfigure();
configure.setHost("192.168.182.50");
configure.setPort(8888);
configure.init();
// Create Driver (this instance is thread-safe)
ArangoDriver arangoDriver = new ArangoDriver(configure);
... or with a properties file (arangodb.properties)
// Initialize configure
ArangoConfigure configure = new ArangoConfigure();
configure.loadProperties();
configure.init();
// Create Driver (this instance is thread-safe)
ArangoDriver arangoDriver = new ArangoDriver(configure);
Example for arangodb.properties:
port=8888
host=192.168.182.50
user=root
password=
enableCURLLogger=true
// create database
arangoDriver.createDatabase("myDatabase");
// and set as default
arangoDriver.setDefaultDatabase("myDatabase");
This ArangoDB driver is thread-safe. Unfortunately the ArangoDriver#setDefaultDatabase() is not (yet). So its recommended to create a new driver instance, if you want to change the database.
//Driver instance to database "_system" (default database)
ArangoDriver driverSystem = new ArangoDriver(configure);
//Driver instance to database "mydb2"
ArangoDriver driverMyDB = new ArangoDriver(configure, "mydb2");
// drop database
arangoDriver.deleteDatabase("myDatabase");
// create collection
CollectionEntity myArangoCollection = ArangoCollectionarangoDriver.createCollection("myCollection");
// delete database
arangoDriver.deleteCollection("myCollection");
// delete database
arangoDriver.deleteCollection(myArangoCollection.getId());
For the next examples we use a small object:
public class MyObject {
private String name;
private int age;
public MyObject(String name, int age) {
this.name = name;
this.age = age;
}
/*
* + getter and setter
*/
}
// create document
MyObject myObject = new MyObject("Homer", 38);
DocumentEntity<MyObject> myDocument = arangoDriver.createDocument("myCollection", myObject);
When creating a document, the attributes of the object will be stored as key-value pair E.g. in the previous example the object was stored as follows:
"name" : "Homer"
"age" : "38"
// delete document
arangoDriver.deleteDocument(myDocument.getDocumentHandle());
E.g. get all Simpsons aged 3 or older in ascending order:
arangoDriver.deleteDatabase("myDatabase");
arangoDriver.createDatabase("myDatabase");
arangoDriver.setDefaultDatabase("myDatabase");
CollectionEntity myArangoCollection = arangoDriver.createCollection("myCollection");
arangoDriver.createDocument("myCollection", new MyObject("Homer", 38));
arangoDriver.createDocument("myCollection", new MyObject("Marge", 36));
arangoDriver.createDocument("myCollection", new MyObject("Bart", 10));
arangoDriver.createDocument("myCollection", new MyObject("Lisa", 8));
arangoDriver.createDocument("myCollection", new MyObject("Maggie", 2));
String query = "FOR t IN myCollection FILTER t.age >= @age SORT t.age RETURN t";
Map<String, Object> bindVars = new MapBuilder().put("age", 3).get();
CursorResultSet<MyObject> rs = arangoDriver.executeQueryWithResultSet(
query, bindVars, MyObject.class, true, 20
);
for (MyObject obj: rs) {
System.out.println(obj.getName());
}
instead of using a for statement you can also use an iterator:
while (rs.hasNext()) {
MyObject obj = rs.next();
System.out.println(obj.getName());
}
rs.close();
#User Management If you are using [authentication] (http://docs.arangodb.com/ConfigureArango/Authentication.html) you can manage users with the driver.
##add user
//username, password, active, extras
arangoDriver.createUser("myUser", "myPassword", true, null);
##list users
List<UserEntity> users = arangoDriver.getUsers();
for(UserEntity user : users) {
System.out.println(user.getName())
}
##DELETE user
arangoDriver.createUser("myUser");
#Graphs This driver supports the new graph api.
Some of the basic graph operations are described in the following:
##add graph A graph consists of vertices and edges (stored in collections). Which collections are used within a graph is defined via edge definitions. A graph can contain more than one edge definition, at least one is needed.
List<EdgeDefinitionEntity> edgeDefinitions = new ArrayList<EdgeDefinitionEntity>();
EdgeDefinitionEntity edgeDefinition = new EdgeDefinitionEntity();
// define the edgeCollection to store the edges
edgeDefinition.setCollection("myEdgeCollection");
// define a set of collections where an edge is going out...
List<String> from = new ArrayList<String>();
// and add one or more collections
from.add("myCollection1");
from.add("myCollection2");
edgeDefinition.setFrom(from)
// repeat this for the collections where an edge is going into
List<String> to = new ArrayList<String>();
to.add("myCollection1");
to.add("myCollection3");
edgeDefinition.setTo(to);
edgeDefinitions.add(edgeDefinition);
// A graph can contain additional vertex collections, defined in the set of orphan collections
List<String> orphanCollections = new ArrayList<String>();
orphanCollections.add("myCollection4");
orphanCollections.add("myCollection5");
// now it's possible to create a graph (the last parameter is the waitForSync option)
GraphEntity graph = arangoDriver.createGraph("myGraph", edgeDefinitions, orphanCollections, true);
##delete graph
A graph can be deleted by its name
arangoDriver.deleteGraph("myGraph");
##add vertex
Vertices are stored in the vertex collections defined above.
MyObject myObject1 = new MyObject("Homer", 38);
MyObject myObject2 = new MyObject("Marge", 36);
DocumentEntity<MyObject> vertexFrom = arangoDriver.graphCreateVertex(
"myGraph",
"collection1",
myObject1,
true);
DocumentEntity<MyObject> vertexTo = arangoDriver.graphCreateVertex(
"myGraph",
"collection3",
myObject2,
true);
Now an edge can be created to set a relation between vertices
EdgeEntity<?> edge = arangoDriver.graphCreateEdge(
"myGraph",
"myEdgeCollection",
null,
vertexFrom.getDocumentHandle(),
vertexTo.getDocumentHandle(),
null,
null);