Какой GWT EventBus следует использовать?
В gwt-user.jar есть 2 интерфейса EventBus и импланты SimpleEventBus.
com.google.gwt.event.shared.EventBus
и com.google.web.bindery.event.shared.EventBus
Я буду называть их "gwt.event" и "web.bindery".
Глядя на JavaDocs и исходный код, я вижу, что gwt.event просто обертывает web.bindery. Однако реализация gwt.event также скрывает ряд устаревших методов
Итак, какую реализацию я должен использовать? (Я на GWT 2.4)
Ответы
Ответ 1
Как правило, вы должны использовать его в com.google.web.bindery
. Единственная версия, которая использовалась в com.google.gwt.event
, но когда RequestFactory и AutoBeans были перемещены из самого GWT и в com.google.web.bindery
, чтобы они могли работать с клиентами, не являющимися GWT.
Если вы используете версию com.google.web.bindery
в своих презентаторах и т.д., это упростит использование внешних приложений GWT, если вам нужно. Вы также не получите предупреждения об устаревании при передаче этого экземпляра в PlaceController
и другие классы, которые используют EventBus.
Ответ 2
Я знаю, что этот вопрос уже имеет ответ, но, возможно, стоит добавить следующее. Как я уже сказал в своем комментарии выше, Activity по-прежнему нуждается в классе com.google.gwt.event.shared.EventBus. Чтобы избежать устаревших предупреждений, я сделал следующее (я использую GIN):
public class GinClientModule extends AbstractGinModule {
@Override
protected void configure() {
bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
...
}
@Provides
@Singleton
public com.google.gwt.event.shared.EventBus adjustEventBus(
EventBus busBindery) {
return (com.google.gwt.event.shared.EventBus) busBindery;
}
...
При этом вы всегда будете использовать объект из "новой" версии шины событий в пакете bindery.
Ответ 3
Если вы используете "Действия", вам, вероятно, придется использовать устаревший, по крайней мере, до тех пор, пока они не очистят весь API: http://code.google.com/p/google-web-toolkit/issues/detail?id=6653.
Ответ 4
Сделать выбор еще более сложным. Я использую guava в своем приложении GWT, и ребята из Google добавили еще один EventBus (даже более неполная функция).
Возможно, этим парням нужно сидеть вместе и определить ОДИНУЮ реализацию, чтобы управлять ими все?
Очевидно, я хотел бы избежать всех зависимостей от GWT для кода, который строго не используется в коде GWT, поэтому Guava выглядел мне интересным.