PDA

View Full Version : [JAVA] chiamata bloccante


Nemok
20-02-2006, 11:06
Ciao a tutti, dovrei implementare un sistema così strutturato:
-un web service scritto in java deployato tramite axis su JBoss - fin qui tutto ok
-un client che utilizza il servizio remoto. In particolare il client effettua una richiesta, il server non risponde subito, ma lo lascia "appeso" in attesa che si scateni un certo evento. Quando l'evento arriva il server invia la risposta al client (in pratica termina il metodo che è stato schierato come web service ritornando un valore).
-l'evento deve essere scatenato da un'azione da parte dell'utente: tramite una jsp egli per esempio preme un bottone e si genera l'evento.

Ora il problema è che la richiesta del client in questo modo risulta bloccante. Ovviamente voglio però che il webservice possa rispondere anche ad altri client (con la stessa procedura di richiesta).
Sapete se un webservice può rispondere a più client contemporaneamente (in pratica se è multithread...).

Per quanto riguarda la gestione degli eventi scatenati da una jsp avete idee?

tglman
20-02-2006, 15:43
Bè è certo che un webServer e multithread e ad ogni richiesta viene generato un nuovo thread, quindi se uno di questi thread esegue una chiamata bloccante non blocca di certo gli altri!!
Ciao!!

Nemok
20-02-2006, 16:10
Si in effetti ho fatto delle prove ed è così, come giustamente dici non poteva essere altrimenti... :p

Idee riguardo gli eventi?

tglman
20-02-2006, 16:23
Tu vuoi praticamente che un utente rimanga appeso fino a che un'altro utente non esegua un'altra azione, se è cosi è bruttissimo :mbe: , di solito si invia un messaggio del tipo: quest'utente non ha fatto questa azione riprova più tardi, e non si lascia appeso, ma se vuoi proprio questo spiega un pochino meglio il problema ;) Ciao!!

Nemok
20-02-2006, 19:08
No no, non voglio lasciare un utente appeso, sarebbe brutto infatti ;)
L'utente in questione è uno solo, che ha a disposizione una sorta di consolle web e può richiedere determinate azioni del sistema. Il sistema quindi cattura la richiesta dell'utente e la passa ad un modulo apposito: è proprio tale modulo a rimanere "appeso", pronto ad offrire il proprio servizio. Per esigenze di sistema però l'applicazione deve essere implementata come segue:

jsp (consolle web) -- web service (Axis) -- modulo che deve eseguire qualcosa

Il modulo ed il web service comunicano tramite soap. In pratica l'utente tramite jsp comanda un play: per far questo pensavo di scatenare un evento, il metodo del web service attende l'evento, quando si verifica ritorna qualcosa al modulo remoto il quale effettua il play effettivo.

Non so se mi sono spiegato, in caso fornisco maggiori dettagli.... :p