Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: arangodb/arangodb-java-driver
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 4.5.1
Choose a base ref
...
head repository: arangodb/arangodb-java-driver
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 4.5.2
Choose a head ref
  • 5 commits
  • 22 files changed
  • 1 contributor

Commits on Jun 21, 2018

  1. prepare snapshot

    mpv1989 committed Jun 21, 2018
    Copy the full SHA
    63f8c02 View commit details
  2. Add acquireHostList test

    mpv1989 committed Jun 21, 2018
    Copy the full SHA
    8f326e3 View commit details

Commits on Jun 25, 2018

  1. Add support for custom serializer

    mpv1989 committed Jun 25, 2018
    Copy the full SHA
    c0cad9f View commit details
  2. Fix README

    mpv1989 committed Jun 25, 2018
    Copy the full SHA
    8d255d6 View commit details
  3. prepare release

    mpv1989 committed Jun 25, 2018
    Copy the full SHA
    c57c7a1 View commit details
Showing with 1,489 additions and 1,327 deletions.
  1. +6 −0 ChangeLog
  2. +7 −0 docs/Drivers/Java/Reference/Serialization.md
  3. +31 −3 pom.xml
  4. +30 −2 src/main/java/com/arangodb/ArangoDB.java
  5. +85 −84 src/main/java/com/arangodb/internal/ArangoCursorIterator.java
  6. +8 −3 src/main/java/com/arangodb/internal/ArangoDBImpl.java
  7. +3 −3 src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java
  8. +55 −48 src/main/java/com/arangodb/internal/ArangoExecuteable.java
  9. +4 −6 src/main/java/com/arangodb/internal/ArangoExecutor.java
  10. +85 −85 src/main/java/com/arangodb/internal/ArangoExecutorSync.java
  11. +16 −15 src/main/java/com/arangodb/internal/InternalArangoCollection.java
  12. +2 −2 src/main/java/com/arangodb/internal/InternalArangoDB.java
  13. +6 −0 src/main/java/com/arangodb/internal/InternalArangoDBBuilder.java
  14. +7 −5 src/main/java/com/arangodb/internal/InternalArangoDatabase.java
  15. +174 −173 src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java
  16. +163 −163 src/main/java/com/arangodb/internal/InternalArangoGraph.java
  17. +179 −178 src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java
  18. +54 −0 src/main/java/com/arangodb/internal/util/ArangoSerializationFactory.java
  19. +2 −2 src/main/java/com/arangodb/internal/util/{ArangoUtilImpl.java → DefaultArangoSerialization.java}
  20. +482 −470 src/test/java/com/arangodb/ArangoDBTest.java
  21. +83 −82 src/test/java/com/arangodb/ArangoExecuteableTest.java
  22. +7 −3 src/test/java/com/arangodb/BaseTest.java
6 changes: 6 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
v4.5.2 (2018-06-25)
---------------------------
* added support for custom serializer
* added ArangoDB.Builder.serializer(ArangoSerialization)
* added link to jackson-dataformat-velocypack in docs

v4.5.1 (2018-06-21)
---------------------------
* fixed exists() method in ArangoDatabase, ArangoCollection, ArangoGraph: check for ArangoDB error num
7 changes: 7 additions & 0 deletions docs/Drivers/Java/Reference/Serialization.md
Original file line number Diff line number Diff line change
@@ -75,6 +75,13 @@ Added support for:
ArangoDB arangoDB = new ArangoDB.Builder().registerModule(new VPackJodaModule()).build();
```

## Use of jackson as an alternative serializer

Since version 4.5.2, the driver supports alternative serializer to de-/serialize documents, edges and query results. One implementation is [VelocyJack](https://github.com/arangodb/jackson-dataformat-velocypack#usage-within-arangodb-java-driver) which is based on [Jackson](https://github.com/FasterXML/jackson) working with [jackson-dataformat-velocypack](https://github.com/arangodb/jackson-dataformat-velocypack).


**Note**: Any registered custom [serializer/deserializer or module](#custom-serialization) will be ignored.

## custom serialization

```Java
34 changes: 31 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@

<groupId>com.arangodb</groupId>
<artifactId>arangodb-java-driver</artifactId>
<version>4.5.1</version>
<version>4.5.2</version>
<inceptionYear>2016</inceptionYear>
<packaging>jar</packaging>

@@ -23,11 +23,16 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<slf4j-api.version>1.7.13</slf4j-api.version>
<arangodb.velocypack.version>1.2.0</arangodb.velocypack.version>

<!-- provided -->
<httpclient.version>4.5.1</httpclient.version>

<!-- test -->
<logback-classic.version>1.1.3</logback-classic.version>
<hamcrest-all.version>1.3</hamcrest-all.version>
<junit.version>4.12</junit.version>
<httpclient.version>4.5.1</httpclient.version>
<arangodb.velocypack.version>1.2.0</arangodb.velocypack.version>
<arangodb.velocypack.jackson.version>0.1.1</arangodb.velocypack.jackson.version>
</properties>

<developers>
@@ -117,6 +122,19 @@
<target>1.6</target>
<compilerArgument></compilerArgument>
</configuration>
<executions>
<execution>
<id>test-compile</id>
<phase>process-test-sources</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<source>1.6</source>
<target>1.7</target>
</configuration>
</execution>
</executions>
</plugin>

<plugin>
@@ -213,6 +231,11 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>com.arangodb</groupId>
<artifactId>jackson-dataformat-velocypack</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
@@ -247,6 +270,11 @@
<artifactId>slf4j-api</artifactId>
<version>${slf4j-api.version}</version>
</dependency>
<dependency>
<groupId>com.arangodb</groupId>
<artifactId>jackson-dataformat-velocypack</artifactId>
<version>${arangodb.velocypack.jackson.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
32 changes: 30 additions & 2 deletions src/main/java/com/arangodb/ArangoDB.java
Original file line number Diff line number Diff line change
@@ -43,8 +43,10 @@
import com.arangodb.internal.net.HostHandler;
import com.arangodb.internal.net.HostResolver;
import com.arangodb.internal.util.ArangoDeserializerImpl;
import com.arangodb.internal.util.ArangoSerializationFactory;
import com.arangodb.internal.util.ArangoSerializationFactory.Serializer;
import com.arangodb.internal.util.ArangoSerializerImpl;
import com.arangodb.internal.util.ArangoUtilImpl;
import com.arangodb.internal.util.DefaultArangoSerialization;
import com.arangodb.internal.velocypack.VPackDocumentModule;
import com.arangodb.internal.velocystream.VstCommunicationSync;
import com.arangodb.model.LogOptions;
@@ -276,8 +278,10 @@ public Builder registerJsonModules(final VPackParserModule... module) {
*
* @param serializer
* custom serializer
* @deprecated use {@link #serializer(ArangoSerialization)} instead
* @return builder
*/
@Deprecated
public Builder setSerializer(final ArangoSerializer serializer) {
serializer(serializer);
return this;
@@ -291,13 +295,30 @@ public Builder setSerializer(final ArangoSerializer serializer) {
*
* @param deserializer
* custom deserializer
* @deprecated use {@link #serializer(ArangoSerialization)} instead
* @return builder
*/
@Deprecated
public Builder setDeserializer(final ArangoDeserializer deserializer) {
deserializer(deserializer);
return this;
}

/**
* Replace the built-in serializer/deserializer with the given one.
*
* <br />
* <b>ATTENTION!:</b> Any registered custom serializer/deserializer or module will be ignored.
*
* @param serialization
* custom serializer/deserializer
* @return builder
*/
public Builder serializer(final ArangoSerialization serialization) {
setSerializer(serialization);
return this;
}

public synchronized ArangoDB build() {
if (hosts.isEmpty()) {
hosts.add(host);
@@ -313,6 +334,10 @@ public synchronized ArangoDB build() {
: new ArangoSerializerImpl(vpacker, vpackerNull, vpackParser);
final ArangoDeserializer deserializerTemp = deserializer != null ? deserializer
: new ArangoDeserializerImpl(vpackerNull, vpackParser);
final DefaultArangoSerialization internal = new DefaultArangoSerialization(serializerTemp,
deserializerTemp);
final ArangoSerialization custom = customSerializer != null ? customSerializer : internal;
final ArangoSerializationFactory util = new ArangoSerializationFactory(internal, custom);

final HostResolver hostResolver = createHostResolver();
final HostHandler hostHandler = createHostHandler(hostResolver);
@@ -323,7 +348,7 @@ public synchronized ArangoDB build() {
new HttpCommunication.Builder(hostHandler, protocol).timeout(timeout).user(user).password(password)
.useSsl(useSsl).sslContext(sslContext).maxConnections(maxConnections)
.connectionTtl(connectionTtl),
new ArangoUtilImpl(serializerTemp, deserializerTemp), collectionCache, protocol, hostResolver);
util, collectionCache, protocol, hostResolver);
}

}
@@ -591,4 +616,7 @@ UserEntity createUser(final String user, final String passwd, final UserCreateOp
ArangoDB _setCursorInitializer(final ArangoCursorInitializer cursorInitializer);

ArangoSerialization util();

ArangoSerialization util(Serializer serializer);

}
169 changes: 85 additions & 84 deletions src/main/java/com/arangodb/internal/ArangoCursorIterator.java
Original file line number Diff line number Diff line change
@@ -1,84 +1,85 @@
/*
* 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;

import java.util.Iterator;
import java.util.NoSuchElementException;

import com.arangodb.ArangoCursor;
import com.arangodb.entity.CursorEntity;
import com.arangodb.velocypack.VPackSlice;

/**
* @author Mark Vollmary
* @param <T>
*
*/
public class ArangoCursorIterator<T> implements Iterator<T> {

private CursorEntity result;
private int pos;

private final ArangoCursor<T> cursor;
private final InternalArangoDatabase<?, ?, ?, ?> db;
private final ArangoCursorExecute execute;

public ArangoCursorIterator(final ArangoCursor<T> cursor, final ArangoCursorExecute execute,
final InternalArangoDatabase<?, ?, ?, ?> db, final CursorEntity result) {
super();
this.cursor = cursor;
this.execute = execute;
this.db = db;
this.result = result;
pos = 0;
}

public CursorEntity getResult() {
return result;
}

@Override
public boolean hasNext() {
return pos < result.getResult().size() || result.getHasMore();
}

@Override
public T next() {
if (pos >= result.getResult().size() && result.getHasMore()) {
result = execute.next(cursor.getId());
pos = 0;
}
if (!hasNext()) {
throw new NoSuchElementException();
}
return deserialize(result.getResult().get(pos++), cursor.getType());
}

protected <R> R deserialize(final VPackSlice result, final Class<R> type) {
return db.util().deserialize(result, type);
}

@Override
public void remove() {
throw new UnsupportedOperationException();
}

}
/*
* 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;

import java.util.Iterator;
import java.util.NoSuchElementException;

import com.arangodb.ArangoCursor;
import com.arangodb.entity.CursorEntity;
import com.arangodb.internal.util.ArangoSerializationFactory.Serializer;
import com.arangodb.velocypack.VPackSlice;

/**
* @author Mark Vollmary
* @param <T>
*
*/
public class ArangoCursorIterator<T> implements Iterator<T> {

private CursorEntity result;
private int pos;

private final ArangoCursor<T> cursor;
private final InternalArangoDatabase<?, ?, ?, ?> db;
private final ArangoCursorExecute execute;

public ArangoCursorIterator(final ArangoCursor<T> cursor, final ArangoCursorExecute execute,
final InternalArangoDatabase<?, ?, ?, ?> db, final CursorEntity result) {
super();
this.cursor = cursor;
this.execute = execute;
this.db = db;
this.result = result;
pos = 0;
}

public CursorEntity getResult() {
return result;
}

@Override
public boolean hasNext() {
return pos < result.getResult().size() || result.getHasMore();
}

@Override
public T next() {
if (pos >= result.getResult().size() && result.getHasMore()) {
result = execute.next(cursor.getId());
pos = 0;
}
if (!hasNext()) {
throw new NoSuchElementException();
}
return deserialize(result.getResult().get(pos++), cursor.getType());
}

protected <R> R deserialize(final VPackSlice result, final Class<R> type) {
return db.util(Serializer.CUSTOM).deserialize(result, type);
}

@Override
public void remove() {
throw new UnsupportedOperationException();
}

}
11 changes: 8 additions & 3 deletions src/main/java/com/arangodb/internal/ArangoDBImpl.java
Original file line number Diff line number Diff line change
@@ -44,6 +44,8 @@
import com.arangodb.internal.net.HostHandle;
import com.arangodb.internal.net.HostResolver;
import com.arangodb.internal.net.HostResolver.EndpointResolver;
import com.arangodb.internal.util.ArangoSerializationFactory;
import com.arangodb.internal.util.ArangoSerializationFactory.Serializer;
import com.arangodb.internal.velocystream.VstCommunicationSync;
import com.arangodb.internal.velocystream.VstProtocol;
import com.arangodb.internal.velocystream.internal.ConnectionSync;
@@ -68,12 +70,14 @@ public class ArangoDBImpl extends InternalArangoDB<ArangoExecutorSync, Response,
private CommunicationProtocol cp;

public ArangoDBImpl(final VstCommunicationSync.Builder vstBuilder, final HttpCommunication.Builder httpBuilder,
final ArangoSerialization util, final CollectionCache collectionCache, final Protocol protocol,
final ArangoSerializationFactory util, final CollectionCache collectionCache, final Protocol protocol,
final HostResolver hostResolver) {
super(new ArangoExecutorSync(createProtocol(vstBuilder, httpBuilder, util, collectionCache, protocol), util,
super(new ArangoExecutorSync(
createProtocol(vstBuilder, httpBuilder, util.get(Serializer.INTERNAL), collectionCache, protocol), util,
new DocumentCache()), util);
cp = createProtocol(new VstCommunicationSync.Builder(vstBuilder).maxConnections(1),
new HttpCommunication.Builder(httpBuilder).maxConnections(1), util, collectionCache, protocol);
new HttpCommunication.Builder(httpBuilder).maxConnections(1), util.get(Serializer.INTERNAL),
collectionCache, protocol);
collectionCache.init(new DBAccess() {
@Override
public ArangoDatabase db(final String name) {
@@ -292,4 +296,5 @@ public ArangoDBImpl _setCursorInitializer(final ArangoCursorInitializer cursorIn
this.cursorInitializer = cursorInitializer;
return this;
}

}
Loading