Как объединить Spring Roo и GWT

Я пытаюсь разработать приложение Spring Roo / GWT с новейшей интеграцией GWT в Roo.

Заставить леса работать очень просто, но я не совсем понимаю, как там работает RPC.

Может ли кто-нибудь из вас предоставить простой пример того, как сделать простой сервис для подключения клиент / сервер в Spring Roo и GWT.

Было бы очень полезно для начала, так как я не мог найти никаких ресурсов по этому поводу.

спасибо и с уважением, Фло


person Florian Motlik    schedule 19.07.2010    source источник


Ответы (2)


Фло,

Не уверен, что вы вообще участвуете в волне Google, но, похоже, это одно место, где можно не отставать от текущих усилий. В частности, эта волна доступна для всех: RequestFactory Волна

Он охватывает детали (хорошо появляющиеся детали) об API RequestFactory.

Основная идея состоит в том, что объекты вашей модели предметной области необходимы как на стороне сервера, так и на стороне клиента. Использование гибернации может вызвать проблемы с файлами классов, и люди оказались с двумя наборами объектов модели и с использованием настраиваемого GWT-RPC для выполнения запросов к серверу и маршаллинга / отмены маршаллинга между объектами модели на стороне клиента и на стороне сервера. Не идеальное решение. Даже если вы можете использовать одни и те же объекты модели, накладные расходы на RPC - это перетаскивание.

Войдите в RequestFactory, и мы увидим, что инженеры Google, вероятно, получают столько, сколько они стоят. Взгляните на образец кода, сгенерированный из .roo, в частности ApplicationRequestFactory.java.

package com.springsource.extrack.gwt.request;

import com.google.gwt.requestfactory.shared.RequestFactory;

public interface ApplicationRequestFactory extends RequestFactory {
    ReportRequest reportRequest();
    ExpenseRequest expenseRequest();
    EmployeeRequest employeeRequest();
}

Это интерфейс, который предоставляет методы запроса для каждого из объектов домена. В проекте не определена реализация этого класса. Он создается в EntryPoint с помощью вызова GWT.create (...):

final ApplicationRequestFactory requestFactory = 
    GWT.create(ApplicationRequestFactory.class);
requestFactory.init(eventBus);

Внутри пакета com.springsource.extrack.gwt.request вы увидите ApplicationEntityTypesProcessor.java, который ловко использует универсальные шаблоны для упаковки ссылок на классы домена для использования позже в презентации. Остальная часть этого пакета - это события и обработчики для каждого объекта модели.

В частности, для каждого объекта существует четыре автоматически сгенерированных класса:

  • EmployeeRecord.java - это DTO для объекта домена.
  • EmployeeRecordChanged.java - это событие RecordChanged для предоставления метода перехвата onEmployeeChanged.
  • EmployeeChangedHandler.java - это интерфейс, который будет реализован, когда потребуется определенное поведение для onEmployeeChanged.
  • EmployeeRequest.java - это интерфейс, используемый ApplicationRequestFactory для упаковки различных методов доступа для данного объекта.

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

Итак, наконец, эти события можно использовать, как в пакете пользовательского интерфейса, чтобы связать воедино домен и пользовательский интерфейс. ReportListActivity.java:

public void start(Display display) {
    this.registration = eventBus.addHandler(ReportRecordChanged.TYPE, new ReportChangedHandler() {
        public void onReportChanged(ReportRecordChanged event) {
            update(event.getWriteOperation(), event.getRecord());
        }
    });
    super.start(display);
}

Я снова отсылаю вас к волне для получения дополнительной информации. Кроме того, на сайте Funds.roo показано, как использовать Places, а также у него довольно удобная структура Activity. Счастливого GWTing.

С Уважением.

person Jeff    schedule 21.07.2010

Функциональность, о которой вы говорите, в настоящее время находится в стадии интенсивной разработки (по крайней мере, ребята из Google хотят, чтобы мы верили;)), поэтому API и внутренняя работа не являются окончательными и, скорее всего, все еще будут меняться до финальной версии GWT 2.1 (это было указано несколько раз во время сеансов GWT во время Google IO 2010). Однако вы можете просмотреть Bikeshed sample в багажнике, чтобы увидеть рабочий (надеюсь;)) пример. Также существует ветка 2.1 который, похоже, содержит актуальный (?) образец (и кулинарную книгу, обещанную в Google IO).
Лично я бы подождал с переключением вашего кода на новую модель RPC, пока ребята, работающие над GWT скажите, что это безопасно;) (но определенно неплохо было бы сейчас привыкнуть к общей идее - не похоже, что они изменят все: D).

person Igor Klimer    schedule 19.07.2010