Вы можете установить статический флажок контрольная панель
Ваша оценка верна. Я полагаю, что JDO заменяет экземпляры коллекций своими собственными реализациями, чтобы отслеживать изменения графа объектов. Эти реализации не известны компилятору GWT, поэтому он не сможет их сериализовать. Это часто случается с классами, которые состоят из типов, совместимых с GWT, но с аннотациями JDO, особенно если некоторые свойства объекта являются коллекциями.
Для подробного объяснения и обходного пути ознакомьтесь с этим довольно влиятельным эссе по теме: http://timepedia.blogspot.com/2009/04/google-appengine-and-gwt-now-marriage.html
Вам вообще не нужно создавать отдельные экземпляры, на самом деле лучше не делать этого. В любом случае ваши объекты JDO должны быть простыми объектами POJO и никогда не должны содержать бизнес-логику. Это для вашего бизнес-уровня, а не для самих постоянных объектов.
Все, что вам нужно сделать, это включить источник аннотаций, которые вы используете, и GWT должен правильно скомпилировать ваш класс. Кроме того, вы хотите избежать использования библиотек, которые GWT не может компилировать (например, вещей, использующих отражение и т. Д.), Но во всех проектах, которые я делал, это никогда не было проблемой.
Краткий ответ: вам не нужно создавать повторяющиеся классы .
Я рекомендую вам взглянуть на следующие обсуждения групп Google на gwt -список авторов:
Вот интересный отрывок:
Если это все ты заинтересован, я описал способ сделать GAE и GWT-RPC работают вместе "из box ". Просто объявите свои объекты как: @PersistenceCapable (identityType = IdentityType.APPLICATION, съемный = "false") открытый класс MyPojo реализует Serializable {}
, и все будет работать, но вы приходится иметь дело с вручную повторное прикрепление при отправке объектов от клиента обратно на сервер.
Вы можете использовать эту опцию, и вам не понадобится зеркальный (DTO) класс. Вы также можете попробовать gilead (бывший hibernate4gwt), который позаботится о некоторых деталях в рамках проблем сериализации расширенных объектов.
Вам не нужно создавать два версии модели предметной области.
Вот два совета:
Используйте строковый ключ, а не класс Appengine Key.
pojo = pm.detachCopy(pojo)
... удалит все улучшения JDO.