2008-10-25 19 views

Respuesta

1

GWT no proporciona una solución de un solo paso para agrupar en lotes varios RPC arbitrarios. Sin embargo, tenga en cuenta que la serialización automática de GWT hace que sea bastante fácil escribir versiones en serie y en lote de cada uno de sus métodos RPC. Por ejemplo, supongamos que ha definido este RPC:

FooResponse callFoo(FooRequest request); 

Es tan fácil escribir un "lote" versión de la misma RPC mismo:

ArrayList<FooResponse> batchCallFoo(ArrayList<FooRequest> requests) { 
    ArrayList<FooResponse> responses = new ArrayList<FooResponse>(); 
    for (FooRequest request : requests) { 
    responses.add(callFoo(request)); 
    } 
} 
+0

Su solución no funciona porque los RPC en GWT asynchronouse son; regresan inmediatamente después de la llamada; el manejador AsyncCallback es responsable de manejar el valor. –

+0

A menos que su loteCallFoo sea la implementación del lado del servidor, en cuyo caso, funcionaría, pero como una llamada del lado del cliente, su implementación por lotes no hace nada por el estilo - llama a callFoo repetidamente, que es la antítesis de las llamadas "por lotes" . –

1

Es una buena pregunta, pero no lo hago creo que hay una solución fácil.

Creo que tendrá que crear un método separado que agrupe sus métodos para lograr el procesamiento por lotes de forma similar a DWR.

Es decir, si tiene:

public int add(int x, int y); 
public int sub(int i, int j); 

, debes crear un nuevo método para combinarlos:

public Map<String, Integer> addAndSub(Map methodsAndArguments) { 
    // Call add and sub methods with it's arguments 
} 

todavía tendrá para manejar toda la respuesta en el mismo método de devolución de llamada, por supuesto, .

Me doy cuenta de que puede que no sea la solución más elegante, pero debido a la forma en que GWTs RPC funciona, creo que es el camino a seguir. Con GWT creo que generalmente debe intentar escribir sus métodos para que el procesamiento por lotes ni siquiera sea un problema que deba tener en cuenta.

8

Ray Ryan de Google hizo una presentación sobre Best Practices For Architecting Your GWT App, donde habló sobre el uso de un patrón de comando. El envío de comandos asincrónicos que pasen por encima de RPC es lo que probablemente desee. Una vez que envía comandos en lugar de RPC, es muy fácil agruparlos.

Consulte gwt-dispatch para obtener una biblioteca que implemente este patrón para usted. Estoy empezando a usarlo, así que no sé si se procesa automáticamente, pero es todo de código abierto con una licencia permisiva, por lo que puede solucionarlo si no lo hace.

1

También puede utilizar GWTEventService si su aplicación se inscribe en el ámbito de la cometa (del lado del servidor push):

GWTEventService es un marco de comunicación cliente-servidor basado en eventos. Utiliza GWT-RPC y la técnica Comet/server-push. El lado del cliente ofrece una API de alto nivel con oportunidades para registrar oyentes en el servidor, como un componente de la GUI. Los eventos se pueden agregar a un contexto/dominio en el lado del servidor y los oyentes del lado del cliente se informan sobre los eventos entrantes. El lado del servidor es completamente independiente de la implementación del cliente y es altamente configurable.

Debido a que una de las ventajas que ofrece este modelo de eventos es:

Los eventos se agrupan para reducir servidor llama