2014-07-10 3 views
0

타이탄 데이터베이스의 기본 객체를 직렬화합니다. 그러나 doesnt 일. 내 titan 데이터베이스에 등록하기 위해 객체를 직렬화하고 싶습니다. 그러나 나는 왜이 문제가 있는지 이해하지 못한다. 내 소스 코드를 게시하고 당신이 문서를 가지고 있다면 그것은 내가 받아 들일 수있는 즐거움이다.타이탄 데이터베이스에서 kryo로 객체 직렬화

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); 
    } 

} 

을 그리고 난이 시도 후 :

일반적으로 난 내 객체를 생성

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) 

당신이 날 도와 줘요 수 :

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()); 
} 

을하지만 난 예외가?

감사합니다.

+0

'TitanFactory.open()'에주는'Configuration' 또는 속성 파일을 게시하십시오. –

+0

괜찮 았어. 고마워. 이것은 단지 기본 속성 파일입니다 : storage.backend = persistit storage.directory =/tmp/titanexample storage.buffercount = 5000 – AkrogAmes

답변

1

사용자 정의 시리얼 라이저를 정의하는 방법에 대한 설명서를보고하십시오 :

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

당신이 많이 가지고있는 것처럼이 작업을하고 시리얼에 대한 요구 사항 그것은 소리를하지 않습니다에 필요한 구성 옵션이 있습니다 그 자리에 그 순간에. 이 구성에 충분히 큰 번호를 지정해야하므로

타이탄은, 자신의 사용자 정의 시리얼의 번호를 사용, 예를 들면 : @stephen의 mallette에 의해 대답에 추가로

+0

내 속성 클래스에는 인수가없는 생성자가 있으며, equals (Object) 메소드와 KryoSerializable을 구현합니다. 나는 당신에게 말하는 페이지를 읽었습니다. – AkrogAmes

+0

'attributes.allow-all'가 설정되어 있습니까? –

+0

죄송합니다. 우리는 내일을 계속할 것입니다. 고마워요 – AkrogAmes

0

attributes.attribute20 = ... 인덱스 주위에는 대괄호가 없습니다 (그 이유는 NumberFormatException입니다).