Google Web Toolkit (GWT) + Google App Engine (GAE) + Сохранение данных

17

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

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

ИЗМЕНИТЬ

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

    
задан Dan McGrath 14.04.2009 в 23:58
источник
  • +1 для использования кластерной веб-службы для локального сохранения данных. :-) –  Jason Cohen 15.04.2009 в 00:21
  • Не могли бы вы поделиться своим прогрессом по этому поводу после получения ответов здесь? (и, пожалуйста, подумайте о выборе лучшего ответа) –  Eran Medan 10.11.2010 в 17:23

11 ответов

7

Попробуйте использовать Ссылка

    
ответ дан hardys 09.05.2009 в 19:10
  • Более конкретно Adapter4AppEngine noon.gilead.free.fr/gilead/index.php?page=adapter4appengine Просто имейте в виду, что не все типы JDO Google будут сериализоваться. Текст, Blob и User, например. Вам все равно придется обойти это по-другому. –  Drew 04.01.2010 в 16:26
5

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

    
ответ дан tempy 07.03.2010 в 19:57
5

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

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

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

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

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

    
ответ дан Alyxandor 14.05.2009 в 12:02
3

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

  

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

, который в основном соответствует вашему наблюдению.

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

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

    
ответ дан cletus 15.04.2009 в 01:01
3

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

    
ответ дан leszek 22.07.2009 в 14:37
2

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

    
ответ дан Sivaprakash Selvaraj 01.05.2009 в 23:39
2

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

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

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

    
ответ дан Drew 04.01.2010 в 16:39
2

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

Кстати, настройка RequestFactory - это немного боль в заднице. Текущий плагин Eclipse не включает все банки, но мне удалось найти необходимую мне помощь, в Stackoverflow

    
ответ дан Daghan --- 24.12.2010 в 00:31
1

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

    
ответ дан isomeme 04.05.2010 в 00:49
0

, так как GWT в конечном счете компилируется на JavaScript, для отстраненной настойчивости ему понадобится одна из нескольких доступных сервисов. наиболее известными являются хранилища HTML5 и Gears (оба используют SQLite!). конечно, ни одна из них не широко развернута, поэтому вам придется убедить своих пользователей либо использовать современный браузер, либо установить малоизвестный плагин. обязательно деградируйте в пригодное для использования подмножество, если пользователь не выполнит

    
ответ дан Javier 15.04.2009 в 00:29
  • Отделившись, они говорят о отправке hibernate и т. д. улучшенные dtos не стойкие в браузере. –  mP. 17.04.2009 в 00:22
  • типичный случай коллизий условий. –  Javier 17.04.2009 в 00:47
0

О том, как напрямую использовать API-интерфейс Datastore загрузить / сохранить объекты домена POJO?

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

    
ответ дан Pavol Juhos 14.01.2010 в 21:10