Сериализатор на персонализирани атрибути Titan 0.9.0.M2 - HashMap като стойност на свойство

Titan версия: 0.9.0.M2

Опитвам се да внедря персонализиран сериализатор за използване на HashMap като стойност на свойство. Написах класа си според инструкциите, предоставени в тук. Той имплементира AttributeSerializer, има метод equals и накрая конструктор без аргументи.

Задал съм своите опции за конфигурация, както следва:

attributes.custom.attribute10.attribute-class = java.util.HashMap attributes.custom.attribute10.serializer-class = com.graph.HashMapSerializer

Опаковах сериализатора в буркан и го поставих в папката lib на разпространението на Titan. Опитах се да стартирам Titan, но виждам грешката „Трябва да зададете конфигурационна стойност: root.attributes.custom.serializer-class“ и също „ Не може да се инстанцира конфигуриран клас на сериализатор' в регистрационните файлове на 'gremlin-server'. Опитах куп опции, включително промяна на номера на атрибута и поставяне в буркана на няколко различни места, но без успех.

Моля, коментирайте любезно дали правя това по правилния начин, както и възможни решения, моля. Прочетох в публикация, свързана с Titan, че някои конфигурационни ключове може да се променят от версия на версия, може ли това да е причината по някакъв начин?

Също така може ли някой да коментира как да посочи пълното име на „персонализиран клас“, име на „персонализиран сериализатор“ и къде точно да поставите буркана?

Благодаря за отделеното време.


person user228001    schedule 22.07.2015    source източник


Отговори (1)


Поставянето на буркана под $TITAN_HOME/lib е добре, но мисля, че вашите свойства трябва да изглеждат така:

attributes.custom.attribute1.attribute-class = java.util.HashMap
attributes.custom.attribute1.serializer-class = com.graph.HashMapSerializer

Примерът в документацията споменава, че те вече са конфигурирали 9 персонализирани атрибута, така че затова се използва attribute10. Можете да проверите кои сериализатори са зададени във вашата графика, като използвате интерфейса TitanManagement.

$ ./bin/gremlin.sh

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.hadoop
plugin activated: tinkerpop.tinkergraph
plugin activated: aurelius.titan
gremlin> graph = TitanFactory.build().set('storage.backend','berkeleyje').set('storage.directory','/home/vagrant/titan-0.9.0-SNAPSHOT-hadoop1/db/berkeley').open()
==>standardtitangraph[berkeleyje:/home/vagrant/titan-0.9.0-SNAPSHOT-hadoop1/db/berkeley]
gremlin> mgmt = graph.openManagement()
==>com.thinkaurelius.titan.graphdb.database.management.ManagementSystem@78226c36
gremlin> mgmt.get('attributes.custom.attribute10.attribute-class')
==>null
gremlin> mgmt.get('attributes.custom.attribute1.attribute-class')
==>java.util.HashMap
person Jason Plurad    schedule 22.07.2015
comment
:Здравей Джейсън, Благодаря за приноса. Конфигурирах правилно графиката и успях да добавя свойството HashMap. Но когато се опитам да извлека добавената стойност, получавам грешка „Изключение в основната нишка java.lang.ArrayIndexOutOfBoundsException: Необходимият размер [1] надвишава действителния оставащ размер [0]“. Публикувах своя код за класа HashMapSerializer тук, както и пълния проследяване на стека. Ако времето позволява, можете ли да го разгледате и да дадете някои коментари. - person user228001; 23.07.2015
comment
: Освен това, след като изпълнихте горните стъпки във вашия отговор, тествахте ли го чрез добавяне и извличане на стойност на свойството HashMap? - person user228001; 23.07.2015