Подтвердить что ты не робот

Google Web Toolkit (GWT) + Google App Engine (GAE) + Постоянное сохранение данных

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

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

ИЗМЕНИТЬ

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

4b9b3361

Ответ 2

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

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

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

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

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

Ответ 3

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

Ответ 4

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

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

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

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