Во-первых, я сочувствую. Соединение всего этого не задокументировано ни в одном месте. Я отвечу на каждый ваш вопрос по очереди. Добавьте комментарии к моему ответу, если что-то неясно.
ВОПРОС: Как мне написать DispatchServletModule и как заставить его работать (с тем, что я должен обслуживать путь)?
В пакете net.customware.gwt.dispatch.server.guice имеется класс GuiceStandardDispatchServlet; используйте это. Я не уверен на 100%, почему, но путь, который я использую, включает имя моего модуля GWT, за которым следует «/ dispatch». Возможно, вам придется поэкспериментировать с этим.
public class MyServletModule extends ServletModule {
@Override protected void configureServlets() {
serve("/com.my.module.name/dispatch")
.with(GuiceStandardDispatchServlet.class);
}
}
ВОПРОС: что я должен поместить в файл web.xml моего приложения, чтобы иметь возможность корректно выполнять действия с моим докладчиком, в котором реализована реализация DispatcherAsync с использованием GIN?
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.myapp.whatever.MyContextListener</listener-class>
</listener>
...
</web-app>
... и тогда вам потребуется пользовательский прослушиватель контекста, который создает инжектор Guice следующим образом. Обратите внимание, что я включил ваш ContactModule, который связывает обработчики действий.
public class MyContextListener extends GuiceServletContextListener {
@Override protected Injector getInjector() {
return Guice.createInjector(new MyServletModule(),
new ContactModule(), new SQLStuffModule());
}
}
ВОПРОС: Куда мне поместить метод обеспечения SqlSessionFactory (в каком модуле), чтобы можно было внедрять SqlSessionFactory там, где он мне нужен?
Обратите внимание, что я включил новый SQLStuffModule в предыдущий фрагмент кода; это было бы хорошим местом для размещения вашей привязки SqlSessionFactory. Нет ничего плохого в том, чтобы иметь несколько модулей, и я обнаружил, что они прекрасно разделяют различные проблемы.
ВОПРОС: Как создать экземпляр инжектора, чтобы можно было правильно использовать его в других обработчиках действий?
Со стороны сервера см. Фрагмент кода MyContextListener выше.
На стороне клиента вам понадобится пользовательский интерфейс инжектора, примерно такой:
@GinModules(StandardDispatchModule.class, MyClientModule.class)
public interface MyGinjector extends Ginjector {
MyWidgetMainPanel getMainPanel();
}
... и вы можете связать свои MVP-компоненты в пользовательском модуле Gin следующим образом. Мне жаль, что я не знаком с mvp4g, но я предполагаю, что вам нужно соединить представления и докладчиков вместе в классе модуля.
public class MyClientModule extends AbstractGinModule {
@Override protected void configure() {
bind(...).to(...);
...
}
}