usando il meccanismo GWT RPC con il mio servlet personalizzato
-
07-07-2019 - |
Domanda
Al momento ho un'applicazione GWT che utilizza il RequestBuilde
per
inviare messaggi a un servlet che ho (usando POST
e GET
) e il mio servlet
(in doPost
e doGet
) " mette in pausa " la richiesta (questo viene fatto usando
Servlet 3.0) e lo aggiunge a una coda.
Inoltre ho un
Thread demone che viene eseguito in background e "riproduce" la richiesta
quando ci sono nuovi dati.
Questo funziona benissimo per me a parte il fatto che sto solo inviando
stringhe per ora e mi piacerebbe utilizzare il meccanismo RPC per inviare
Oggetti.
La mia domanda è questa:
Se creo la mia classe myServiceImpl
che si estende
RemoteServiceServlet
come devo gestire doPost
e doGet
se del tutto?
Devo mettere in pausa la mia richiesta per utilizzare il supporto asincrono, dove questo dovrebbe essere realizzato? Forse avrei forse chiamato il metodo this.getThreadLocalRequest ()
nel mio metodo RPC nella classe myServiceImpl
ma non sono sicuro di quanto sia saggio.
non
sicuramente capisco anche come GWT gestisce la chiamata dal lato client
di quella interfaccia asincrona.
Per caso chiama il doGet
per esempio del servlet e
si assicura che chiama il metodo RPC richiesto?
Mi dispiace se ho fatto un casino di cose, è solo che non riesco a trovare altro
informazioni tecniche dettagliate su come funziona esattamente questo business RPC.
Apprezzo qualsiasi mano di prestito
Ittai
Soluzione 2
Penso che il principale fraintendimento che ho avuto in quel momento fosse legato al fatto che GWT RPC si basa sul meccanismo servlet (internamente) e quindi cercare di usare quel meccanismo con servlet asincroni era, al momento, impossibile poiché GWT RPC era costruito su servlet 2.5 (di nuovo, al momento).
Altri suggerimenti
Per capire RPC dimentica di POST e OTTIENI che funziona diversamente (cioè dal punto di vista della programmazione. Internamente lo usa, ma non lo vedi o non devi capirlo, a meno che tu non voglia fare qualcosa di esotico). Un buon punto di partenza è su RPC sono i documenti GWT: http://code.google .com / webtoolkit / tutorial / 1.6 / RPC.html
Per darti un riepilogo. Quando si utilizza RPC il servlet myServiceImpl
deve implementare i metodi di un'interfaccia denominata myService
, oltre a estendere RemoveServiceServlet
. I metodi ottengono come argomenti i dati che si desidera inviare al server.
Accanto all'interfaccia myService
è necessario creare un'interfaccia myServiceAsync
(entrambe le interfacce devono trovarsi in un pacchetto secondario client). Questa interfaccia myServiceAsync
dovrebbe contenere gli stessi metodi dell'interfaccia myService
tranne per il fatto che ciascun metodo restituisce void
e ha un ultimo argomento aggiuntivo Callback AsyncCallback
.
Nel tuo client devi strumento GWT per generare l'RPC tramite GWT.create (vedi la documentazione per i dettagli.
Per usare RPC, chiama i metodi nell'interfaccia myServiceAsync
nel tuo codice client e GWT si occupa di inviarlo al servlet. Il servlet chiamerà quindi il metodo corrispondente con gli argomenti passati sul client. Questo viene fatto in modo asincrono. Quindi il client ritorna direttamente dalla chiamata.
Quando il server restituisce il risultato, viene richiamato il callback myServiceAsync
o viene chiamato OnError
o OnSuccess
. OnError
se il metodo sul lato server ha generato un errore, altrimenti OnSuccess
. OnSuccess
avrà come argomento il valore restituito da ciò che è stato restituito nel metodo implementato dal servlet.