Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Far partire più Servlet nello stesso momento

    Siccome ho paura di essere frainteso ho realizzato un video che spiega il risultato che vorrei ottenere:
    https://www.youtube.com/watch?v=PCi0...ature=youtu.be

    La web application deve essere in grado di far girare le due Servlet contemporaneamente.

    Ho realizzato due servlet identiche (Servlet1, Servlet2) che per 10 secondi stampano in console un messaggio:
    codice:
    import java.io.IOException;
    
    
    import javax.servlet.GenericServlet; 
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebServlet;
    
    
    @WebServlet("/Servlet1")
    public class Servlet1 extends GenericServlet {
        private static final long serialVersionUID = 1L;
    
    
        public Servlet1() {
        }
        
        public void stampa(int n, String where){
            for(int i = 0; i<=n; i++){
                System.out.println(where+": "+i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    
    
        @Override
        public void init() throws ServletException {        
            super.init();        
        }
        
        @Override
        public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {        
            stampa(10, this.getClass()+" service");
        }  
    
    
    }


    Come si può evincere dal video, se chiamo le due Servlet il web container giustamente riesce ad eseguirle in contemporanea senza alcun problema.

    Deve esserci un modo per riuscire ad ottenere lo stesso risultato da codice...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da GennyAndroid Visualizza il messaggio
    Deve esserci un modo per riuscire ad ottenere lo stesso risultato da codice...
    Ascolta ... se tu vuoi che sia una applicazione "client" (e non una persona che interagisce con un browser) a fare richieste "concorrenti" ad un server (ad uno stesso url = stessa servlet oppure url differenti = tipicamente servlet differenti ... ovviamente riferito a webapp Java) allora le cose sono due:
    - ci sono più istanze (processi) della stessa applicazione che stanno facendo richieste "concorrenti".
    oppure
    - all'interno di una singola istanza della applicazione ci sono più thread che stanno facendo richieste "concorrenti".

    È questo che intendi? E se è questo ... quale è il dubbio specifico?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Si é questo che intendo, voglio creare una terza servelt che riesca a lanciare le altre due in contemporanea...il problema é che non so come implementarlo...cioè non so che codice scrivere per ottenere tale risultato

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da GennyAndroid Visualizza il messaggio
    Si é questo che intendo
    Io comunque parlavo più in generale di una applicazione "client" che tipicamente è su una macchina distinta dal server ... non un'altra servlet. Poi certo ... il concetto di "client" è generale, nel senso che anche una servlet può essere un "client" che fa richieste ad altro (qualunque cosa sia quel "altro").

    Quote Originariamente inviata da GennyAndroid Visualizza il messaggio
    voglio creare una terza servelt che riesca a lanciare le altre due in contemporanea
    Di base, cioè normalmente, non puoi fare una servlet che fa 2 request contemporanee (allo stesso preciso momento), perché una request es. da browser verso la Servlet3 di per sé viene "servita" sul server da 1 thread che quindi logicamente fa una sola cosa per volta durante il servizio di questa richiesta.

    Ci potrebbero essere mezzi vari per fare request es. asincrone o sfruttare il multi-threading sul server ... cose che però potrebbero essere più o meno valide e più o meno discutibili. Oltre al fatto che in una servlet le cose si complicano poiché una servlet una response la deve fornire e quindi bisogna vedere se il suo output dipende dalla/e response delle richieste che fa a sua volta oppure no.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    No nel mio caso l'output non dipende affatto dalla response.So che potrei benissimo utilizzare dei thread per fare le chiamate alle servlet, ma non ricordo dove ho letto che molti provider ne vietano l'utilizzo.Ti ringrazio per tutte le spiegazioni che mi stai dando, però io c é la sto mettendo tutta per spiegare il mio problema. Ora ho bisogno però di qualche riferimento più preciso come del cosldice di esempio che posso testare per provare a capirci qualcosa

    Se giustamente come dici tu non é corretto fare due request da una servlet allora ti chiedo, quale altro componente posso adoperare alla interno della stessa web application?
    Ultima modifica di GennyAndroid; 05-05-2014 a 22:59

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da GennyAndroid Visualizza il messaggio
    Se giustamente come dici tu non é corretto fare due request da una servlet allora ti chiedo, quale altro componente posso adoperare alla interno della stessa web application?
    Domanda 1: se l'output di Servlet3 non dipende dalle response di Servlet1/2 .... allora cosa contiene e a cosa/chi serve la response di Servlet3?
    E domanda 2: chi dovrebbe poi invocare Servlet3? Una persona tramite browser?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    No non deve essere una persona ad invocare servlet 3.
    Ho parlato della terza servlet per fare un esempio ma a quanto pare ti ho solo confuso le idee.

    Facciami un passo indietro Tu hai detto

    Ci potrebbero essere mezzi vari per fare request es. asincrone o sfruttare il multi-threading sul server ... cose che però potrebbero essere più o meno valide e più o meno discutibili
    Se puoi farni un esempio pratico che funziona... non fa nulla che sia discutibile come soluzione, non é possibile che sia così impossibile

  8. #8
    Credo che dal video sia chiaro il risultato che voglio ottenere. Tale risultato deve essere ottenuto senza l'ausilio di una persona fisica che effettui una chiamata alle servlet.

    Siccome stiamo parlando di webapplication mi serve una soluzione che possa essere implementata all'interno di essa ( le chiamate CONTEMPORANEE alle 2 servlet devono partire dal'interno della web application )

    L'unica soluzione che mi è venuta in mente è quello di effettuare le chiamate alle servlet in due thread diversi (questa soluzione è però da scartare, in quanto so che nessun provider permette l'apertura di più thread sul proprio spazio web)

  9. #9
    Up

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.