Domanda

Il server HTTP integrato nel JDK 6 è un grande aiuto lo sviluppo di servizi web, ma ho situazione in cui ho pubblicato un endpoint e poi il codice caduto e ha lasciato il server che esegue.

Come si fa a spegnere il server incorporato, una volta che hai perso il riferimento ad essa (o pubblicato Endpoint)?

Nessuna soluzione corretta

Altri suggerimenti

Io uso il codice qui sotto per avviarlo

    this.httpServer = HttpServer.create(addr, 0);
    HttpContext context = this.httpServer.createContext("/", new DocumentProcessHandler());
    this.httpThreadPool = Executors.newFixedThreadPool(this.noOfThreads);
    this.httpServer.setExecutor(this.httpThreadPool);
    this.httpServer.start();

e di seguito il codice per fermarlo

        this.httpServer.stop(1);
        this.httpThreadPool.shutdownNow();

Non ho mai usato questo server prima e non riesco a trovare alcuna buona documentazione. Forse questi meno eleganti soluzioni si sono verificati a voi già, ma ho appena pensato che li avrei parlare.

Sembra com.sun.net.httpserver.HttpServer ha una classe di implementazione denominata HttpServerImpl. Ha un metodo chiamato stop ().

O forse si può trovare il filo in ascolto sul socket server e la chiamata di interrupt ().

Sean

Che ne dici di non perdere il riferimento, allora? Quando si dice di blocco del codice, suppongo che si ottiene un'eccezione da qualche parte. Dove esattamente? Così qualcuno in grado di intercettare questa eccezione, ovviamente, ha bisogno di avere anche un riferimento al HTTPServer, che potrebbe essere necessario passare intorno a voi.

Modifica : Oh. In tal caso, se non si vuole uccidere l'intera JVM con il HTTPServer in esso, allora si avrà bisogno di offrire una qualche forma di IPC per l'ambiente, per esempio un canale di comando tramite RMI che può essere richiamato da un programma Java (e quindi Ant).

Un'altra soluzione sarebbe quella di avere il server ascolta per qualche interrogazione cookie "segreto", dove per esempio stampa / salvare il cookie all'avvio in modo che lo script Ant può recuperare il cookie, e si può sparare una query per l'URL "segreto" su cui il server uscirà stessa grazia.

mi piacerebbe andare con una soluzione rapida RMI.

netstat -a

per trovare il pid del processo che ha la porta aperta (supponendo che si conosce il porto), e

kill -9 $pid

per uccidere il processo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top