GWT: Где (как) определить POJO, чтобы сделать их доступными для клиента и сервера?(и использовать хранилище данных на стороне сервера) - PullRequest
1 голос
/ 22 октября 2010

Я пытаюсь запустить приложение, которое должно взаимодействовать с сервером через RPC (JDO в Google DataStore). Поэтому я определил постоянный POJO на стороне сервера, чтобы поместить его в хранилище данных через PersistenceManager (как показано в gwt rpc tuts). Все отлично работает Но я не могу получить POJO обратного вызова на стороне клиента, потому что POJO определен только на стороне сервера. Как я могу понять, что клиент знает такой объект? (извините за мой плохой английский) Lars

Ответы [ 2 ]

4 голосов
/ 22 октября 2010

Поместите ваши POJO в отдельный пакет / каталог (например, com.example.common), а затем добавьте объявление источника в дескриптор вашего модуля GWT (xyz.gwt.xml):

<source path="common"/> //relative to your xyz.gwt.xml location 

Компилятор GWT также скомпилирует POJO, и они будут видны другим вашим кодом GWT.

Отредактировано: @Lars - теперь я понимаю твою проблему. На мой взгляд, у вас есть несколько вариантов:

  1. Если возможно, используйте Objectify вместо JDO. Objectify использует чистые POJO, и они прекрасно играют с GWT. Я использую это в своих проектах. Одна хорошая вещь, которую дает Objectify, - это @PostLoad & @ PrePersist для методов запуска некоторого кода до / после загрузки POJO / сохранения в хранилище данных. Я использую это для обработки сериализации GeoPoint, например.

  2. Используйте JDO и делайте копии классов вашего домена. Это боль, но это сработает. Используйте «временное» ключевое слово java в классах JDO вашего сервера, чтобы исключить поля, которые вы не хотите использовать в RPC.

Редактировать # 2: есть третий вариант, который вы можете предпочесть:

  1. Создание "поддельных" классов аннотаций JDO с использованием суперсорсинга. Это обычная техника для замены классов версией GWT. Описано здесь: http://fredsa.allen -sauer.com / 2009/04 / 1st-look-at-app-engine-using-jdo.html
0 голосов
/ 22 октября 2010

Вы можете использовать DTO ( stackoverflow , moar ) для передачи данных клиенту.Базовый образец здесь (метод getTenLatestEntries() в вашем случае).Или вы можете использовать некоторые сторонние библиотеки, такие как objectify и перестать беспокоиться о создании DTO.

...