У меня есть следующие Java-сервлет, который выполняет то, что я называю «Сложение Service»:Реализация услуг GWT RequestFactory для не-сущности просит
public class AdditionService extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) {
// The request will have 2 Integers inside its body that need to be
// added together and returned in the response.
Integer addend = extractAddendFromRequest(request);
Integer augend = extractAugendFromRequest(request);
Integer sum = addend + augend;
PrintWriter writer = response.getWriter();
writer.write(sum);
}
}
Я пытаюсь получить RequestFactory GWT, чтобы сделать то же самое (добавление двух номеров на сервер приложений и возврат суммы в ответ) с использованием ValueProxy
и AdditionService
, и я столкнулся с несколькими проблемами.
Вот AdditionRequest
(клиентский уровень), который представляет собой значение объект, содержащий два типа Integer быть добавлены:
// Please note the "tier" (client, shared, server) I have placed all of my Java classes in
// as you read through the code.
public class com.myapp.client.AdditionRequest {
private Integer addend;
private Integer augend;
public AdditionRequest() {
super();
this.addend = 0;
this.augend = 0;
}
// Getters & setters for addend/augend.
}
Следующая мой прокси-сервер (клиентский уровень):
@ProxyFor(value=AdditionRequest.class)
public interface com.myapp.client.AdditionRequestProxy extends ValueProxy {
public Integer getAddend();
public Integer getAugend();
public void setAddend(Integer a);
public void setAugend(Integer a);
}
Следующая моя API службы (в общем эшелоне):
@Service(value=DefaultAdditionService.class)
public interface com.myapp.shared.AdditionService extends RequestContext {
Request<Integer> sum(AdditionRequest request);
}
Следующая страница Моя запрашиваемая фабрика (общий уровень):
public class com.myapp.shared.ServiceProvider implements RequestFactory {
public AdditionService getAdditionService() {
return new DefaultAdditionService();
}
// ... but since I'm implementing RequestFactory, there's about a dozen
// other methods GWT is forcing me to implement: find, getEventBus, fire, etc.
// Do I really need to implement all these?
}
Наконец, где происходит волшебство (сервер ярус):
public class com.myapp.server.DefaultAdditionService implements AdditionService {
@Override
public Request<Integer> sum(AdditionRequest request) {
Integer sum = request.getAddend() + request.getAugend();
return sum;
}
// And because AdditionService extends RequestContext there's another bunch of
// methods GWT is forcing me to implement here: append, create, isChanged, etc.
// Do I really need to implement all these?
}
Вот мои вопросы:
- Является ли мой "уровень" Стратегия правильно? Я упаковал все типы в правильные пакеты client/shared/server?
- Я не думаю, что мои настройки верны, потому что
AdditionService
(в общих) ссылкахDefaultAdditionService
, который находится на сервере, чего он не должен делать. Общие типы должны иметь возможность жить как на клиенте и на сервере, но не имеют зависимости от либо ...
- Я не думаю, что мои настройки верны, потому что
- Если
ServiceProvider
быть класс, который реализуетRequestFactory
, или он должен быть интерфейс, который расширяет это ? Если последний, где я могу определитьServiceProvider
impl, и как мне связать его со всеми этими другими классами? - О всех этих методах в
ServiceProvider
иDefaultAdditionService
? Нужно ли мне реализовать все 20+ этих основных методов GWT? Или я использую API неправильно или не так просто, как я мог бы его использовать? - Где здесь находится коэффициент локатора? Как?
Я думаю, что я рядом, но мне нужна помощь, пересекая финишную черту здесь. Если кто-то может взять мой код и настроить его, чтобы показать правильный способ использования RF/ValueProxies, я думаю, что это свяжет всю структуру вместе для меня ... спасибо заранее!
Почему не используется стандартный GWT-RPC? – Fedy2
Спасибо @ Fedy2 - хорошо, я буду использовать RF для всех моих других сервисов, ориентированных на CRUD/сущность, для которых в основном используется RF. Но RF также предлагает коммуникацию с не-сущностью сервера (вот что мне нужно здесь, в этом вопросе), и я хотел бы оставаться в соответствии с остальной частью моей архитектуры. – IAmYourFaja