Сохранение модели буфера протокола с помощью JDO в App Engine

#java #google-app-engine #jdo #protocol-buffers

#java #google-app-engine #jdo #буферы протокола

Вопрос:

мы создаем приложение для Android, которое взаимодействует с сервером Java App Engine через буферы протокола. Мы используем JDO в качестве механизма сохранения на сервере.

Мой вопрос заключается в том, как сохранить объекты в базе данных App Engine. Похоже, что единственный способ сделать это — создать два класса для каждой модели: одну модель, которая генерируется из файла .proto, и второй класс, который оборачивает первый класс и предоставляет аннотации JDO, дополнительные методы и т.д. Мне это кажется довольно громоздким, и мне интересно, какой может быть наилучшая практика в этом отношении. Есть ли способ избежать этого дублирования (например, JPA позволяет указывать аннотации сохранения во внешних XML-файлах, но мы предпочли бы избегать JPA в App Engine из-за плохой документации)?

Ответ №1:

В хранилище данных App Engine хранятся только буферы протокола модели. Если буфер протокола, который отправляет вам ваш клиент, является Model PB, вы можете сохранить его напрямую, подключив к низкоуровневым API. Если это любой другой тип PB, вам нужно либо преобразовать его (вручную) в объект, либо вам нужно сериализовать его и сохранить в двоичном свойстве объекта. Какой из них вы выберете, зависит от того, как вам нужно запросить сохраненный объект.

В любом случае, JDO, вероятно, плохой выбор — вам следует заглянуть в Objectify или напрямую использовать низкоуровневый API.

Комментарии:

1. Что вы подразумеваете под «буферами протокола модели»? Это тот тип protobuf, который используется внутри App Engine? Если да, то доступно ли это где-нибудь? На самом деле я использую objectify, но он также не поддерживает protobufs. (Вам нужно либо вручную сериализовать / десериализовать, либо преобразовать в класс, который Objectify может встроить.)