2011-02-10 8 views
6

¿Hay alguna manera de usar RequestFactory para crear dos entidades en una única solicitud? Intenté:GWT RequestFactory y solicitudes múltiples

EmployeeRequest request = requestFactory.employeeRequest(); 
    EmployeeProxy newEmployee = request.create(EmployeeProxy.class); 
    newEmployee.setName("Joe!"); 

    Request<Void> createReq = request.persist().using(newEmployee); 
    createReq.fire(); 

    EmployeeProxy newEmployee2 = request.create(EmployeeProxy.class); 
    newEmployee2.setName("Sam!"); 

    Request<Void> createReq2 = request.persist().using(newEmployee2); 
    createReq2.fire(); 

Pero me sale un error que una solicitud ya está en progreso. Cuando hice dos EmployeeRequests por separado:

EmployeeRequest request = requestFactory.employeeRequest(); 
    EmployeeProxy newEmployee = request.create(EmployeeProxy.class); 
    newEmployee.setName("Joe!"); 

    Request<Void> createReq = request.persist().using(newEmployee); 
    createReq.fire(); 

    EmployeeRequest request2 = requestFactory.employeeRequest(); 
    EmployeeProxy newEmployee2 = request2.create(EmployeeProxy.class); 
    newEmployee2.setName("Sam!"); 

    Request<Void> createReq2 = request2.persist().using(newEmployee2); 
    createReq2.fire(); 

Luego se realizan dos solicitudes por separado desde el navegador. Espero que algo en RequestFactory pueda combinar varias solicitudes. Tengo que crear cientos de entidades a la vez, ¡y no quiero hacer cientos de solicitudes!

Respuesta

9

Sí, es posible. En el primer ejemplo, basta con retirar la línea

createReq.fire(); 

Cuando se llama a createReq2.fire() al final, a continuación, GWT envía tanto NewEmployee y newEmployee2 en una sola solicitud (porque ambos eran persistieron en el contexto de su EmployeeRequest "request") Personalmente creo que la semántica es un poco extraña, pero esa es solo mi opinión.

Adición de Riley: La siguiente sintaxis es equivalente y es mucho más intuitivo:

EmployeeRequest request = requestFactory.employeeRequest(); 
    EmployeeProxy newEmployee = request.create(EmployeeProxy.class); 
    newEmployee.setName("Joe!"); 

    request.persist().using(newEmployee); 

    EmployeeProxy newEmployee2 = request.create(EmployeeProxy.class); 
    newEmployee2.setName("Sam!"); 

    request.persist().using(newEmployee2); 
    request.fire(); 
+0

Oh, lo extraño. Muy raro. ¿Significa esto que tengo que crear algún mecanismo para programar una llamada a fire() después de haber realizado todas las llamadas persist() que quiero hacer? Supongo que sería muy fácil hacerlo con un comando diferido, pero ... ¡algo incómodo! –

+0

@Riley: Me gustaría envolver todo el código que crea la solicitud en un método o en su propio objeto. Usaría alguna variable (o campo) para recordar la última solicitud. Luego, después de ejecutar esta parte del código, llamaría a fuego en la última solicitud. (No utilizaría un comando diferido; es demasiado inestable, porque no es fácil asegurarse de cuándo se ejecutará exactamente). –

+0

Actualización: estaba cometiendo un error y ahora su código funciona muy bien. Pensaré en formas de agregar solicitudes. Gracias Chris! –

Cuestiones relacionadas