#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 может встроить.)