2011-02-11 10 views
6

Mi aplicación GWT tiene diez tipos diferentes de entidades. En este momento, utilizo DTO antiguos simples y los transporte a través de GWT-RPC. Esto funciona bien para casos como el inicio: puedo empaquetarlos todos en una única solicitud.GWT RequestFactory y varios tipos

Estoy pensando en cambiar a RequestFactory porque hay muchas veces durante toda la vida de la aplicación (30 minutos, en promedio) cuando solo tengo que actualizar un tipo de entidad y las características de unificación/ahorro de ancho de banda RequestFactory es atractivo. PERO: no veo una forma de descargar todos mis datos de inicialización en una sola solicitud cuando se carga la aplicación. No quiero tener que hacer diez solicitudes para obtener todos los datos de inicio para mis diez tipos de entidades.

¿Hay alguna manera de hacer un GeneralRequestContext, o algo así? Incluso sería feliz con una solución como:

public interface InitDataProxy extends EntityProxy 
{ 
    public UserProxy getInitUsers(); 
    public OrganizationProxy getInitOrganizations(); 
    ... 
} 

public interface GeneralRequestContext extends RequestContext 
{ 
    Request<InitDataProxy> getInitData(); 
} 

Pero esto no funcionará porque no quieren tener que volver realidad InitDataProxy con nada, sólo quiero usarlo para combinar un montón de diferentes tipos de Proxies en una sola solicitud.

Entonces: ¿Hay alguna manera de recibir múltiples tipos no relacionados de EntityProxy en una sola solicitud?

También me alegraría hacer una solicitud gwt-rpc normal para salir de RequestFactory por estos datos, pero no quiero tener que implementar DTO duplicados para ejecutarlos junto a los proxies de RequestFactory, y escribir código personalizado para copiar los DTO en ellos!

Respuesta

4

En su lugar, el InitDataProxy podría extender ValueProxy, lo que no requiere que el objeto en el servidor tenga ningún tipo de semántica de id o de versión. El tipo de dominio InitData podría ser una interfaz, posiblemente implementada con un tipo anónimo.

interface InitData { 
    User getUser(); 
    Organization getOrgatization(); 
} 
class InitService { 
    static InitData makeInitData() { 
    return new InitData() { ..... }; 
    } 
} 

@ProxyFor(InitData.class) 
interface InitDataProxy extends ValueProxy { 
    UserProxy getUser(); 
    OrganizationProxy getOrganization(); 
} 
@Service(InitService.class) 
interface Init extends RequestContext { 
    Request<InitDataProxy> makeInitData(); 
} 
+0

Ah, genial. Gracias, esto trae la cantidad de obstáculos pendientes entre mí y el uso de RF hasta uno, ¡y siento que se desmorona también! ¡Aprecio tu trabajo! –

+4

Un RequestContext se puede ver como una "bolsa de invocaciones de métodos" que le permite agruparlas en una sola solicitud HTTP. Esto significa que no tiene que combinar sus resultados en un solo tipo; puede llamar a varios métodos en el RequestContext y solo luego fire() para enviar las llamadas al servidor como un "lote". –

+0

Hola, acabo de ver esto y lo intentaré con un ValueProxy demasiado pronto. Pero la última vez que experimenté con ValueProxys (aunque no recuerdo la versión de GWT), GWT siguió quejándose de la clase que representa el ValueProxy, falta el constructor predeterminado y le faltan métodos setter para las propiedades. Veamos si esto funciona en las versiones actuales :) – Gandalf

Cuestiones relacionadas