Localizador de servicios estilo Guice
-
07-07-2019 - |
Pregunta
¿Alguien ha visto / intentado alguna vez escribir un patrón de localización de servicios que utilice un sistema de configuración de estilo Guice?
Actualmente tengo un proyecto GWT (que usa GWT-RPC) que usa un patrón de comando en el que mi servlet RPC se parece a esto ...
public interface TransactionService extends RemoteService {
<T extends Response> T execute(Action<T> action);
}
En mi implementación actual del método de ejecución hago esto ...
if(action instanceof SomeActionImpl){
doSomeActionImpl((SomeActionImpl)action);
}else if(action instanceof SomeActionImpl2){
doSomeActionImpl2((SomeActionImpl2)action);
}
Lo que me gustaría hacer es encontrar una manera de deshacerme de la declaración if gigante. Necesitaría alguna forma de registrar que la clase de ActionImpl1 debería delegarse a otra implementación de TransactioNService.
¿Alguna idea? Estaba pensando en agregar entradas a un HashMap donde la clave es la clase de Acción y el valor es la Clase de ServiceImpl. Uno tengo una referencia a la clase ServiceImpl que podría usar Guice para obtener una instancia de TransactionService.
Solución
Eche un vistazo a la clase net.customware.gwt.dispatch.server.DefaultActionHandlerRegistry en gwt-dispatch ( http://code.google.com/p/gwt-dispatch/ ); hace exactamente lo que estás sugiriendo. Aquí está la variable miembro que almacena los manejadores:
mapa final privado < Clase < ;? extiende Action <? > > ;, ActionHandler <?,? > > manejadores;
Si desea ejecutar los controladores en el lado del servidor, utilice los componentes del lado del servidor gwt-dispatch; si se trata del lado del cliente, considere modelar su clase de despacho en DefaultActionHandlerRegistry.