2015-03-06 3 views
0

, играя вокруг с OrientDB 2.0.4 я столкнулся со следующей проблемой:OrientDB (2.0.4) пользовательский сериализатор

У меня есть следующие классы

public class ClassA{ 

    private String someData; 
    private ClassB embeddedClass; 

} 

public class ClassB implements Serializable{ 

    private Integer someData; 
    private ClassC classToBeReferenced; 

} 

public class ClassC implements Serializable{ 

    private Boolean someData; 
} 

Allthough ClassC не должен быть встроен в ClassB, ClassB содержит фактический экземпляр ClassC, чтобы люди могли легко установить экземпляр ClassC в ClassB (и не должны иметь дело с OrientDB, чтобы получить RID экземпляра ClassC).

Проблема с этой настройкой заключается в том, что OrientDB внедряет ClassC в ClassB, когда экземпляр ClassB сериализуется. Для того, чтобы избежать этого, я создал пользовательский сериализатор для ClassC:

public class ClassCSerializer implements OObjectSerializer<ClassC, ORID> { 

    .... 

} 

Моя проблема в настоящее время, что я не могу найти способ, чтобы зарегистрировать сериалайзер в любом месте. Учебник, в котором я нашел решение с пользовательской реализацией OObjectSerializer, сказал, что сериализатор должен быть зарегистрирован в OObjectSerializerContext. Однако я не могу найти класс в classpath. У меня есть ориентировочные, -клиентные и -центральные модули в версии 2.0.4 на моем пути к классам.

Может ли кто-нибудь помочь мне здесь?

С уважением, Pascal

ответ

0

Ну я не знаю, о 2.0.4, но для 2.0.10 OObjectSerializerContext находится в orientdb объектно-2.0.10.jar банку.

Я нашел пример того, как использовать его здесь: https://code.google.com/p/orient/issues/detail?id=299

OObjectSerializerContext serializerContext = new OObjectSerializerContext(); 
serializerContext.bind(new OObjectSerializer<DateTime, Long>() { 

public Long serializeFieldValue(Object iPojo, String iFieldName, DateTime iFieldValue) 
{ 
    return iFieldValue.getMillis(); 
} 

public DateTime unserializeFieldValue(Object iPojo, String iFieldName, Long iFieldValue) 
{ 
    return new DateTime(iFieldValue); 
} 

}); 
OObjectSerializerHelper.bindSerializerContext(null, serializerContext); 
Смежные вопросы