Google Web Toolkit (GWT) + Google App Engine (GAE) + постоянство отдельных данных - PullRequest
17 голосов
/ 15 апреля 2009

Я хотел бы разработать веб-приложение, требующее сохранения данных с использованием GWT и GAE. Насколько я понимаю, мой единственный (или, по крайней мере, наиболее удобный) способ сохранения данных - это хранилище данных GAE, использующее аннотированные объекты JDO или JPA. Я также хотел бы иметь возможность отправлять свои объекты назад и вперед клиент-сервер, используя удаленные вызовы процедур (RPC) GWT, поэтому мои объекты должны иметь возможность «отсоединяться». Однако сериализация GWT RPC не может обрабатывать отдельные объекты JDO / JPA и не выглядит так, как если бы она была в ближайшем будущем.

Мой вопрос: какое самое простое и прямое решение для этого? Возможность совместно использовать одни и те же объекты клиент / сервер с сохранением на стороне сервера была бы чрезвычайно удобной.

EDIT

Я должен уточнить, что я все еще хочу использовать GWT RPC с хранилищем данных GAE. Я просто ищу лучшее решение, которое позволило бы всем этим технологиям работать вместе.

Ответы [ 11 ]

7 голосов
/ 09 мая 2009

Попробуйте использовать http://gilead.sourceforge.net/

5 голосов
/ 07 марта 2010

Я недавно нашел Objectify , который предназначен для замены JDO. Пока не так много опыта, но он проще в использовании, чем JDO, кажется более легким и претендует на то, чтобы обойтись без DTO с GWT, хотя я пока не пробовал эту особенность.

5 голосов
/ 14 мая 2009

Рэй Кромвель имеет временный взлом . Я попробовал, и это работает.

Это заставляет вас использовать Transient вместо отделяемых объектов, потому что GWT не может сериализовать скрытый объект [], используемый DataNucleus; Это означает, что объекты, которые вы отправляете клиенту, не могут быть вставлены обратно в хранилище данных, вы должны извлечь фактический объект хранилища данных и скопировать в него все постоянные поля. Метод Рэя использует отражение, чтобы перебрать методы, извлечь методы getBean () и setBean () и применить сущность setBean () с помощью вашего переходного объекта gwt getBean ().

Вы должны стремиться использовать JDO, JPA пока не намного больше, чем класс-оболочка. Чтобы использовать этот хак, вы должны иметь методы getter и setter для каждого постоянного поля, используя синтаксис PROPER getBean и setBean для каждого поля «bean». Ну, ПОЧТИ ПРАВИЛЬНО, так как предполагается, что все методы получения начнутся с «get», когда по умолчанию используется логическое поле «is».

Я исправил эту проблему и разместил комментарий в блоге Рэя, но он ожидает одобрения, и я не уверен, что он опубликует его. По сути, я реализовал аннотацию @GetterPrefix (prefix = MethodPrefix.IS) в пакете org.datanucleus, чтобы расширить его работу.

Если это не будет опубликовано, и это проблема, напишите x_AT_aiyx_DOT_info Re: @GetterPrefix для JDO, и я вышлю вам исправление.

3 голосов
/ 22 июля 2009

Попробуйте это . Это модуль для сериализации типов ядра GAE и отправки их клиенту GWT.

3 голосов
/ 15 апреля 2009

Недавно я написал сообщение Использование ORM или простого SQL?

Это появилось в прошлом году в GWT заявление, которое я писал. Много перевод с EclipseLink на презентация объектов в сервисе реализация. Если бы мы использовали ибатис было бы куда проще создать соответствующие объекты с ибатись, а потом пройди их весь путь вверх и вниз по стеку. Некоторые пуристы Могу поспорить, что это Bad ™. Может быть так (в теория) но я скажу вам, что: это привел бы к более простому коду, более простой стек и большая производительность.

, что в основном соответствует вашим наблюдениям.

Но, конечно, это не вариант с Google App Engine, поэтому вы в значительной степени застряли, имея слой перевода между объектами на стороне клиента и объектами JPA.

Сущности JPA довольно жесткие, поэтому они в любом случае не подходят для отправки туда и обратно между клиентом. Обычно при этом вам нужны маленькие кусочки от нескольких сущностей (что в итоге приводит к некоторому объекту значения уровня представления). Это ваш путь вперед.

2 голосов
/ 24 декабря 2010

Я думаю, что официальный ответ Google на это - GWT 2.1 RequestFactory . Учитывая, что вы используете GWT и GAE, я бы посоветовал вам придерживаться официальной структуры Google ... У меня есть похожее приложение на основе GWT / GAE, и это то, что я делаю.

Между прочим, установка RequestFactory - небольшая боль в заднице. Текущий плагин Eclipse не включает все jar-файлы, но я смог найти нужную мне помощь в Stackoverflow

2 голосов
/ 04 января 2010

В настоящее время я использую шаблон DTO (DataTransferObject). Не обязательно так же чисто и много больше шаблонов, но GAE все еще требует достаточного количества шаблонов в настоящее время. ;)

У меня Доменный объект, сопоставленный (обычно) один-к-одному с DTO. Когда клиенту требуется информация о домене, DAO (DataAccessObject) выдает DTO-представление объекта Domain и отправляет его по сети. Когда DTO возвращается, я передаю DAO DTO, который затем обновляет все соответствующие доменные объекты.

Не так чисто, как возможность передавать доменные объекты непосредственно через провод, очевидно, но ограничения реализации JDO GAE и процесса сериализации GWT означают, что для меня это самый чистый способ справиться с этим в настоящее время.

2 голосов
/ 02 мая 2009

Вы можете рассмотреть возможность использования JSON. GWT имеет необходимый API для анализа и генерации строки JSON на стороне клиента. Вы получаете много JSON API для серверной части. Я пытался с Google-GSON, что нормально. Он преобразует вашу строку JSON в модель POJO и наоборот. Надеюсь, что это поможет вам обеспечить достойное решение для вашего требования

1 голос
/ 04 мая 2010

Я также использовал Objectify, и мне действительно это нравится. Вам все еще нужно потанцевать с методами pre / postLoad для перевода, например. Текст в строку и обратно.

0 голосов
/ 14 января 2010

Как насчет прямого использования API хранилища данных для загрузки / хранения объектов домена POJO?

Это должно быть сравнимо с подходом DTO, т.е. что вам нужно вручную обрабатывать все поля (если вы не используете такие приемы, как автоматизация на основе отражений), тогда как это должно дать вам большую гибкость и полный доступ ко всем функциям хранилища данных.

...