我有一些问题有关的应用程序派遣和题之一,因.我使用的题之一,因2.0的应用程序派遣情况1.1.0快照,mvp4g情况1.1.0和杜松子酒1.0

首先,我有义简单的行动,结果,并处理程序:

ListContactsAction.java

public class ListContactsAction implements Action<ListContactsResult>{

    public ListContactsAction() {
    }

}

ListContactsResult.java

public class ListContactsResult implements Result {

    private List<Contact> contactList;

    public ListContactsResult() {
    }

    public ListContactsResult(List<Contact> contactList) {
        this.contactList = contactList;
    }

    public List<Contact> getContactList() {
        return contactList;
    }
}

ListContactsHandler.java

public class ListContactsHandler implements ActionHandler<ListContactsAction, ListContactsResult>{

    @Inject
    private SqlSessionFactory factory;

    public Class<ListContactsAction> getActionType() {
        return ListContactsAction.class;
    }

    public ListContactsResult execute(ListContactsAction a, ExecutionContext ec) throws DispatchException {
        // some code using SqlSessionFactory and returning ListContactResult
        // with list of contacts
    }

    public void rollback(ListContactsAction a, ListContactsResult r, ExecutionContext ec) throws DispatchException {
        /* get action - no rollback needed */
    }

}

在以前版本的我的程序,将其使用rpc服务,而不是命令式,我有一个方法是提供 SqlSessionFactory 对于注射,事情是这样的:

@Provides
    public SqlSessionFactory getSqlSessionFactory(){
        // some code here
    }

我读了上应用程序分开始,我必须提供之间的结合我的行动,并就处理程序,它应类似于:

public class ContactModule extends ActionHandlerModule{
    @Override
    protected void configureHandlers() {
        bindHandler(ListContactsAction.class, ListContactsHandler.class);
    }
}

但是我有问题线这一切题之一,因,因为这个例子应用程序派遣站:

public class DispatchServletModule extends ServletModule {
    @Override
    public void configureServlets() {
        serve( "/path/to/dispatch" ).with( DispatchServiceServlet.class );
    }
}

不起作用,因为没有 DispatchServiceServlet 在包。

我的问题是:

  • 我应该怎么写DispatchServletModule和如何使它将(与什么我应该成为路径)
  • 我应该怎么把web.xml 文件我应用能够正确地执行行动从我的主持人,其中有杜松子酒注射 DispatcherAsync 执行情况
  • 我应该在哪里把我 SqlSessionFactory 提供方法(在哪个模块)能够注入SqlSessionFactory我需要它
  • 我如何实例的注射器然后我可以用它在其他行动处理程序正确

我认为这是所有和我做了自己明确的。如果有什么东西不够清楚,我会尝试更加具体。

没有正确的解决方案

其他提示

你创建的一个GuiceServletConfig类?这是你设置你的派遣servlet模块以及你的行动的处理模块题之一,因.

plubic class GuiceServletConfig extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new HandlerModule(), new DispatchServletModule());
    }
}

该HandlerModule是你的ActionHandler模块类,所以从你的代码,你会把你的ContactModule类。

你SqlSessionFactory,可以建立结对于它在你的ContactModule,与我的代码,我只有一个单一的模块设置了我所有的服务和行动处理绑定。这主要是为了简洁。

应用程序的平台框架的采用应用程序派遣叉处理rpc请求。有大量的代码,其中你可能不得不志对wtite自己,如果你认为严重的是采用调度员和题之一,因.我强烈推荐它。

首先,我同情.把这所有的一起不记录在任何一个地方。我会回答您的每一个问题。添加意见,我的答案如果目前还不清楚。

QU:我应该怎么写DispatchServletModule和如何使它将(与什么我应该成为路径)?

有一个GuiceStandardDispatchServlet类的净额。customware.应用程序.调度。服务器。题之一,因软件包;使用。我不是100%肯定为什么,但我用包括的名称,我应用程序模块,随后通过'/调度'.你可能需要试验。

public class MyServletModule extends ServletModule {
  @Override protected void configureServlets() {
    serve("/com.my.module.name/dispatch")
      .with(GuiceStandardDispatchServlet.class);
  }
}

QU:我应该怎么把web.xml 文件我应用能够正确地执行行动从我的主持人,其中有杜松子酒注射DispatcherAsync的执行?

<?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>

...然后你就需要一个定义方面的听众,创造了一个题之一,因注射器如下。注意到我已经包括你的ContactModule,其结合行动的处理程序。

public class MyContextListener extends GuiceServletContextListener {
  @Override protected Injector getInjector() {
    return Guice.createInjector(new MyServletModule(), 
      new ContactModule(), new SQLStuffModule());
  }
}

QU:我应该在哪里把我SqlSessionFactory提供方法(在哪个模块)能够注入SqlSessionFactory我需要它吗?

注意我的包括一个新的SQLStuffModule在前一段代码;这将是一个良好的把你的SqlSessionFactory结合。有没有伤害具有多个模块,我找到它让的各种关切很好地隔开。

QU:我如何实例的注射器然后我可以用它在其他行动处理程序是否正确?

服务器的端,请参阅MyContextListener代码段所述。

对客户的侧,你会需要一个自定义的喷口是这样的:

@GinModules(StandardDispatchModule.class, MyClientModule.class)
public interface MyGinjector extends Ginjector {
  MyWidgetMainPanel getMainPanel();
}

...你可以结合你的MVP的东西在一个自定义杜松子酒模块如下。我很抱歉,我不熟悉mvp4g,但我认为你需要线的意见和主持人在一起的模块课。

public class MyClientModule extends AbstractGinModule {
  @Override protected void configure() {
    bind(...).to(...);
    ...
  }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top