Сериализировать объект с помощью крио в базе данных Titan

Я бы сериализовал базовый объект в базе данных Titan. Но не работает. Я хочу сериализовать свой объект, чтобы зарегистрировать его в моей базе данных титанов. Но я не понимаю, почему существует эта проблема. Я публикую свой исходный код, и если у вас есть документация, я с удовольствием принимаю ее.

Обычно я создаю свой объект:

public class Attribute implements KryoSerializable {

    private String typeunit;

    private Object value;

    private String valueS;


    public Attribute() {
        this.typeunit = "";
        this.value = null;
        this.valueS = "";
    }


    public void setValue(String type, Object value) {
        this.typeunit = type;
        this.value = value;

        try {
            if(value instanceof java.lang.String) {
                this.valueS = (String) value;
            }
        } catch(Exception e) {

        }
    }

    public Object getValue() {
        return value;
    }

    public String getValueS() {
        return valueS;
    }

    public String getTypeunit() {
        return typeunit;
    }

    @Override
    public boolean equals(Object obj) {
        // TODO Auto-generated method stub
        return super.equals(obj);
    }

    public void read(Kryo kryo, Input input) {
        this.typeunit = input.readString();
        this.value = kryo.readObject(input, Object.class);
        this.valueS = input.readString();
    }

    public void write(Kryo kryo, Output output) {
        kryo.register(Object.class);

        output.writeString(this.typeunit);
        kryo.writeObject(output, this.value);
        output.writeString(this.valueS);
    }

}

И после того, как я попробую это:

Vertex r = this.model.addVertex(null);
r.setProperty("uuid", UUID.randomUUID().toString());
r.setProperty("object", attr);

this.model.commit();

for(Vertex vertex : this.model.query().vertices()) { 
     Attribute test = vertex.getProperty("object");
     System.out.println(test.getTypeunit());
}

Но у меня есть исключение:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -2
    at java.util.ArrayList.elementData(ArrayList.java:400)
    at java.util.ArrayList.get(ArrayList.java:413)
    at com.esotericsoftware.kryo.util.MapReferenceResolver.getReadObject(MapReferenceResolver.java:42)
    at com.esotericsoftware.kryo.Kryo.readReferenceOrNull(Kryo.java:773)
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:624)
    at XXXX.XXXXXX.Attribute.read(Attribute.java:140)
    at com.esotericsoftware.kryo.serializers.DefaultSerializers$KryoSerializableSerializer.read(DefaultSerializers.java:363)
    at com.esotericsoftware.kryo.serializers.DefaultSerializers$KryoSerializableSerializer.read(DefaultSerializers.java:355)
    at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:729)
    at com.thinkaurelius.titan.graphdb.database.serialize.kryo.KryoSerializer.readClassAndObject(KryoSerializer.java:119)
    at com.thinkaurelius.titan.graphdb.database.EdgeSerializer.parseRelation(EdgeSerializer.java:211)
    at com.thinkaurelius.titan.graphdb.database.EdgeSerializer.readRelation(EdgeSerializer.java:119)
    at com.thinkaurelius.titan.graphdb.database.EdgeSerializer.readRelation(EdgeSerializer.java:59)
    at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx$4$3.apply(StandardTitanTx.java:780)
    at com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx$4$3.apply(StandardTitanTx.java:777)
    at com.google.common.collect.Iterators$8.transform(Iterators.java:860)
    at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
    at com.thinkaurelius.titan.graphdb.query.LimitAdjustingIterator.next(LimitAdjustingIterator.java:55)
    at com.thinkaurelius.titan.graphdb.query.QueryProcessor$OuterIterator.nextInternal(QueryProcessor.java:76)
    at com.thinkaurelius.titan.graphdb.query.QueryProcessor$OuterIterator.<init>(QueryProcessor.java:65)
    at com.thinkaurelius.titan.graphdb.query.QueryProcessor.iterator(QueryProcessor.java:46)
    at com.thinkaurelius.titan.graphdb.vertices.AbstractVertex.getProperty(AbstractVertex.java:105)
    at com.thinkaurelius.titan.graphdb.vertices.AbstractVertex.getProperty(AbstractVertex.java:121)

Не могли бы вы мне помочь ?

Спасибо.


person AkrogAmes    schedule 10.07.2014    source источник
comment
Опубликуйте свой Configuration файл или файл свойств, который вы передаете TitanFactory.open().   -  person stephen mallette    schedule 10.07.2014
comment
Хорошо, Стивен. Спасибо. Это просто файл основных свойств: storage.backend=persistit storage.directory=/tmp/titanexample storage.buffercount=5000   -  person AkrogAmes    schedule 10.07.2014


Ответы (2)


Пожалуйста, ознакомьтесь с документацией о том, как определить пользовательские сериализаторы:

https://github.com/thinkaurelius/titan/wiki/Datatype-and-Attribute-Serializer-Configuration

Существуют параметры конфигурации, которые необходимы для того, чтобы это работало, и требования к вашим сериализаторам. Не похоже, что на данный момент у вас есть много из этого.

person stephen mallette    schedule 10.07.2014
comment
Мой класс атрибутов имеет конструктор без аргументов, реализует метод equals(Object) и KryoSerializable. Я прочитал страницу, которая говорит мне о тебе. - person AkrogAmes; 10.07.2014
comment
у вас есть attributes.allow-all набор? - person stephen mallette; 10.07.2014
comment
Мне жаль Стивена. Продолжим завтра. Спасибо - person AkrogAmes; 11.07.2014
comment
Привет, Степан, как дела? Итак, извините, но я не понимаю, почему я должен установить для атрибутов. - person AkrogAmes; 14.07.2014
comment
вы правы - это правда по умолчанию. тогда не уверен, что здесь не так. придется провести дополнительные исследования. - person stephen mallette; 14.07.2014

В дополнение к ответу @stephen mallette:

Титан использует ряд собственных пользовательских сериализаторов, поэтому вам необходимо указать достаточно большое количество в конфигурации, например. attributes.attribute20 = ... Обратите внимание, что вокруг индекса нет квадратных скобок (поэтому вы получали NumberFormatException).

person gcvt    schedule 25.07.2014