Pregunta

El servidor HTTP incorporado en el JDK 6 es una gran ayuda para desarrollar servicios web, pero tengo situación en la que publiqué un punto final y luego el código estrellado y el servidor manualmente.

¿Cómo hacer que apagar el servidor incrustado vez que haya perdido la referencia a ella (o el punto final publicado)?

No hay solución correcta

Otros consejos

Yo uso el siguiente código para iniciarlo

    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();

y por debajo de código para detenerlo

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

Nunca he usado este servidor antes y no puedo encontrar ninguna buena documentación. Tal vez estas soluciones menos elegantes han ocurrido ya, pero yo pensaba que iba a hablar de ellos.

Parece que com.sun.net.httpserver.HttpServer tiene una clase de implementación llamada HttpServerImpl. Tiene un método llamado stop ().

O tal vez usted puede encontrar el hilo escuchar en el socket del servidor y de interrupción de llamadas ().

Sean

¿Qué hay de no perder la referencia, entonces? Cuando usted dice que se bloquea el código, supongo que se obtiene una excepción alguna parte. ¿Donde exactamente? Así que alguien capaz de interceptar esta excepción, obviamente, tiene que tener también una referencia a la HttpServer, que puede que tenga que pasar alrededor de sí mismo.

Editar : Oh. En ese caso, si usted no desea matar a toda la JVM con el HttpServer en él, entonces tendrá que ofrecer algún tipo de IPC para el medio ambiente, por ejemplo, un canal de comandos a través de RMI que se puede invocar desde un programa Java (y por lo tanto Ant).

Otra solución sería que el servidor escucha por alguna consulta cookie "secreta", en el que, por ejemplo, Imprimir / Guardar la cookie en el arranque para que el script Ant puede obtener la cookie, y se puede disparar una consulta a la URL de su "secreto" sobre la cual el servidor se cerrará en sí con gracia.

Me gustaría ir con una solución rápida RMI.

netstat -a

para encontrar el pid del proceso que tiene el puerto abierto (suponiendo que conoce el puerto), y

kill -9 $pid

para matar el proceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top