localizador de serviço de estilo Guice
-
07-07-2019 - |
Pergunta
Alguém já viu / tentou escrever um padrão de localizador de serviço que utiliza um sistema de configuração estilo Guice?
Atualmente tenho um projeto GWT (que acontece de usar o GWT-RPC) que usa um padrão de comando na qual o meu servlet RPC que se parece com isso ...
public interface TransactionService extends RemoteService {
<T extends Response> T execute(Action<T> action);
}
Na minha implementação atual do método execute eu faço isso ...
if(action instanceof SomeActionImpl){
doSomeActionImpl((SomeActionImpl)action);
}else if(action instanceof SomeActionImpl2){
doSomeActionImpl2((SomeActionImpl2)action);
}
O que eu gostaria de fazer é descobrir uma maneira de se livrar do gigante if. Eu precisaria de alguma forma de registrar essa classe de ActionImpl1 deve ser delegada a outra implementação do TransactioNService.
Todas as idéias? Eu estava pensando em apenas adicionando entradas para um HashMap, onde a chave é a classe do Ação eo valor é classe do ServiceImpl. Que eu tenho uma referência para a classe ServiceImpl eu poderia usar Guice para obter uma instância de TransactionService.
Solução
Dê uma olhada na classe net.customware.gwt.dispatch.server.DefaultActionHandlerRegistry no GWT-expedição ( http://code.google.com/p/gwt-dispatch/ ); ele faz exatamente o que você está sugerindo. Aqui é a variável de membro que armazena os manipuladores:
Mapa final privado
Se você quiser executar os manipuladores no lado do servidor, em seguida, usar os componentes do lado do servidor gwt-expedição; Se é coisa do lado do cliente, em seguida, considerar a modelagem de sua classe envio em DefaultActionHandlerRegistry.