2008-10-25 13 views

Odpowiedz

1

GWT nie zapewnia jednoetapowego rozwiązania dla grupowania kilku dowolnych wywołań RPC. Należy jednak pamiętać, że automatyczne serializowanie GWT sprawia, że ​​pisanie seryjnych i partycjonowanych wersji każdej z metod RPC jest dość łatwe. Na przykład, załóżmy, że zostały zdefiniowane ten RPC:

FooResponse callFoo(FooRequest request); 

To takie proste, aby napisać „partia” wersję tego samego RPC siebie:

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

Twoje rozwiązanie nie działa, ponieważ w GWT RPC są asynchronouse; wracają natychmiast po wywołaniu; obsługa obsługi AsyncCbackback odpowiada za obsługę wartości. –

+0

O ile jego batchCallFoo nie jest implementacją po stronie serwera, w takim przypadku działałoby, ale jako wywołanie po stronie klienta jego implementacja wsadowa nic nie robi - wielokrotnie wywołuje callFoo, co jest antytezą wywołań "batchowych". . –

1

To dobre pytanie, ale nie wiem myślę, że istnieje proste rozwiązanie.

Uważam, że trzeba będzie stworzyć oddzielną metodę, która grupuje metody, aby uzyskać grupowanie w podobny sposób do DWR.

Ie jeśli masz:

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

Można by stworzyć nową metodę, aby je połączyć:

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

trzeba jeszcze obsłużyć całą odpowiedź w tej samej metody wywołania zwrotnego oczywiście .

Zdaję sobie sprawę, że to nie może być najbardziej eleganckie rozwiązanie, ale ze względu na sposób działania GWT RPC myślę, że to jest droga. Z GWT myślę, że powinieneś na ogół próbować pisać swoje metody, aby nie było problemu, który musisz wziąć pod uwagę.

8

Ray firmy Google przedstawił prezentację o Best Practices For Architecting Your GWT App, w której mówił o użyciu wzorca polecenia. Wysyłanie asynchronicznych poleceń, które zdarzają się przejść RPC jest to, co prawdopodobnie chcesz. Gdy wysyłasz komendy zamiast wywołań RPC, bardzo łatwo jest je wsadować.

Aby uzyskać bibliotekę, która implementuje ten wzorzec, należy przeczytać stronę gwt-dispatch. Właśnie zaczynam go używać, więc nie wiem, czy to partia automatycznie, ale to wszystko jest open source z permisywną licencją, więc możesz to naprawić, jeśli nie.

1

Można również użyć GWTEventService jeśli aplikacja pasuje do domeny Comet (server-side-push):

GWTEventService jest frameworkiem komunikacji klient-serwer zdarzeń oparte. Wykorzystuje GWT-RPC i technikę Comet/server-push. Strona klienta oferuje interfejs API wysokiego poziomu z możliwością rejestracji słuchaczy na serwerze, podobnie jak komponent GUI. Zdarzenia można dodawać do kontekstu/domeny po stronie serwera, a detektory po stronie klienta otrzymują informacje o nadchodzących zdarzeniach. Strona serwera jest całkowicie niezależna od implementacji klienta i jest wysoce konfigurowalna.

Ponieważ jedną z zalet oferowanych przez ten model zdarzeń jest:

Zdarzenia są dołączane do zmniejszenia wywołuje serwer