Comunicazione tra due servlet

accosimo

Nuovo Utente
18 Nov 2013
6
2
0
Salve, premesso che sono molto inesperto in materia, vorrei chiedervi se è possibile e semmai in che modo è possibile far comunicare due servlet che sono ipoteticamente poste in due differenti server (ovviamente ora le ho entrambe in localhost su due distinte porte....). grazie
 

Slyfer

Utente Attivo
4 Dic 2010
65
21
0
Ciao, ma cosa devi fare esattamente? Se devi comunicare server to server, le servlet non sono il modo migliore...

ciao
 

accosimo

Nuovo Utente
18 Nov 2013
6
2
0
vorrei sviluppare un sistema composto da un client (jsp) e due server (servlet A e servlet B per ora, ma se è il caso di cambiare strategia sono pronto a farlo). Il client (attraverso ajax di jquery ma non è importante) fa una richiesta asincrona alla servlet A che a sua volta manda ciò che richiede il client. Avvenuto ciò il client fa una richiesta analoga alla servlet B. Fin qui niente di strano. Ora vorrei che la servlet B comunichi direttamente qualcosa alla servlet A (o a questo punto stavo pensando di usare un'altro client "nascosto" di "transizione" tra la servlet A e la B): dopo un rapido controllo, se i dati inviati a B sono coerenti con quello cha A conosce, la servlet A manda un messaggio di conferma al client e il gioco è finito... probabilmente mi sono spiegato male e comunque vi chiederete a cosa serve tutto questo inutile giro, ma purtroppo per ora è l'unico modo che mi è venuto in mente per implementare questo particolare metodo di autenticazione! Ah... forse potrebbe essere utile sottolineare il fatto che nel momento in cui il sistema funzionerà con due server, l'idea finale è quella di avere un server A principale e tanti sotto-server secondari B che si comporteranno tutti alla stessa maniera, a meno di opportuni parametri....

EDIT: un'altro nodo cruciale che non so risolvere è il seguente: è semplice gestire asincornicamente lato client la comunicazione, ovvero se al client serve qualcosa, lo chiede e il server risponde. Non so però come fare il contrario, e cioè mandare qualcosa al client senza che ci sia stata una relativa richiesta!!

scusate veramente l'ignoranza, mi rendo conto che sto facendo domande veramente basilari!
 
Ultima modifica:

Slyfer

Utente Attivo
4 Dic 2010
65
21
0
vorrei sviluppare un sistema composto da un client (jsp) e due server (servlet A e servlet B per ora, ma se è il caso di cambiare strategia sono pronto a farlo). Il client (attraverso ajax di jquery ma non è importante) fa una richiesta asincrona alla servlet A che a sua volta manda ciò che richiede il client. Avvenuto ciò il client fa una richiesta analoga alla servlet B. Fin qui niente di strano. Ora vorrei che la servlet B comunichi direttamente qualcosa alla servlet A (o a questo punto stavo pensando di usare un'altro client "nascosto" di "transizione" tra la servlet A e la B): dopo un rapido controllo, se i dati inviati a B sono coerenti con quello cha A conosce, la servlet A manda un messaggio di conferma al client e il gioco è finito... probabilmente mi sono spiegato male e comunque vi chiederete a cosa serve tutto questo inutile giro, ma purtroppo per ora è l'unico modo che mi è venuto in mente per implementare questo particolare metodo di autenticazione! Ah... forse potrebbe essere utile sottolineare il fatto che nel momento in cui il sistema funzionerà con due server, l'idea finale è quella di avere un server A principale e tanti sotto-server secondari B che si comporteranno tutti alla stessa maniera, a meno di opportuni parametri....

EDIT: un'altro nodo cruciale che non so risolvere è il seguente: è semplice gestire asincornicamente lato client la comunicazione, ovvero se al client serve qualcosa, lo chiede e il server risponde. Non so però come fare il contrario, e cioè mandare qualcosa al client senza che ci sia stata una relativa richiesta!!

scusate veramente l'ignoranza, mi rendo conto che sto facendo domande veramente basilari!

mmmm Non ci ho capito molto..., per poterti aiutare serve capire il problema, non quello che hai pensato come soluzione....

Cosa devi fare esattamente? Lasciando perdere i l'implementazione con servlet e jsp:

mi sembra di capire che c'è un client C che de fare una richiesta ad un sistema A e poi un sistema B.

Il sistema A ti da una risposta positiva se e solo se il sistema B conferma i dati inviati dal client C? Giusto?

Quindi ricapitolando

C manda dati ad A
C manda dati a B
B manda dai ad A
A risponde a C

Giusto? A che serve sto giro?

Perdona le domande, ma per aiutarti devo capire....
 

accosimo

Nuovo Utente
18 Nov 2013
6
2
0
mmmm Non ci ho capito molto..., per poterti aiutare serve capire il problema, non quello che hai pensato come soluzione....

Cosa devi fare esattamente? Lasciando perdere i l'implementazione con servlet e jsp:

mi sembra di capire che c'è un client C che de fare una richiesta ad un sistema A e poi un sistema B.

Il sistema A ti da una risposta positiva se e solo se il sistema B conferma i dati inviati dal client C? Giusto?

Quindi ricapitolando

C manda dati ad A
C manda dati a B
B manda dai ad A
A risponde a C

Giusto? A che serve sto giro?

Perdona le domande, ma per aiutarti devo capire....
Ci mancherebbe, è giusto chiedere, soprattutto visto che il problema è il mio che non mi sono spiegato! Il problema è un po' più complesso di così come te l'ho destritto, ma semlificando all'osso, è così:

1) C manda dati ad A
2) A risponde a C
3) C rigira questi dati a B
4) B elabora, aggiunge dati che A non ha e non può avere, e manda tutto ad A
5) A controlla l'effettiva validità e prende nota di quello che B ha aggiunto
6) se tutto è andato a buon fine, A autentica C ad accedere a particolari risorse legate a B

capisco che non è chiaro, per rendere tutto vermante chiaro dovrei desriverti il reale problema, ma non è questa la sede adatta :)

I punti da 1) a 3) li ho realizzati, 5) e 6) sono da rivedere ma a grandi linee funzionano (o dovrebbero funzionare). Il nodo che non riesco a risolvere è il 4). Come faccio a far comunicare l'entità B con l'entita A?

aggiungo anche le ultime due ipotesi su cui sto lavorando:
1-un'altro client ajax che comunica con le due entità A e B
2-l'utilizzo del metodo URLConnection connection = url.openConnection();
Nel caso delle servlet, il metodo:

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
out.write("parametro=parametro");


dovrebbe invocare il metodo doPost(....) della servlet.
 

Slyfer

Utente Attivo
4 Dic 2010
65
21
0
Ciao, ora è più chiaro, ma vedo un problema: se C comunica con B via ajax e B sta su un altro server hai un problema di cross domain call

Detto questo mi pare di capire che C viene autorizzato da A a fare determinate cose, ma per essere autorizzato a farne delle altre C deve chiamare un altro sistema B che a sua volta deve comunicare con A etc etc.

Io la risolverei così

C chiama A dicendo che deve avere accesso anche a delle risorse di B
A chiama B e ottiene o meno l'autorizzazione
A risponde a C

Così risparmi 3 step, non hai cross domain call, C non deve fare polling su A (immagino tu l'abbia fatto così) e C non deve sapere dove sta B (stesso server, server diverso etc etc)

Per fare comunicare A e B puoi usare dei webservice SOAP e REST, e come framework ti consiglio CXF, oppure gli EJB se hai un Application Server (JBOSS)

ciao