Question

Le Http serveur embarqué dans JDK 6 est une grande aide pour développer des services web, mais j'ai obtenu la situation où je publiais un point final, puis le code tombé en panne et quitté le serveur en cours d'exécution.

Comment avez-vous arrêter le serveur embarqué une fois que vous avez perdu la référence à (ou le point final publié)?

Pas de solution correcte

Autres conseils

J'utilise le code ci-dessous pour démarrer

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

et le code ci-dessous pour l'arrêter

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

Je ne l'ai jamais utilisé ce serveur avant et je ne peux pas trouver une bonne documentation. Peut-être que ces solutions moins élégantes se sont produits à vous déjà, mais je pensais que je voudrais les mentionner.

On dirait com.sun.net.httpserver.HttpServer a une classe d'implémentation appelée HttpServerImpl. Il a une méthode appelée arrêt ().

Ou peut-être vous pouvez trouver le fil à l'écoute sur la prise de serveur et d'interruption d'appel ().

Sean

Qu'en est-il pas perdre la référence, alors? Quand vous dites de plantage de votre code, je suppose que vous obtenez une exception quelque part. Où exactement? Ainsi, quelqu'un capable d'intercepter cette exception doit évidemment avoir aussi une référence à la HttpServer, que vous pourriez avoir à passer autour de vous.

Modifier : Oh. Dans ce cas, si vous ne voulez pas tuer toute la machine virtuelle Java avec le HttpServer en elle, alors vous aurez besoin d'offrir une certaine forme de l'IPC à l'environnement, par exemple un canal de commande via RMI qui peut être appelé à partir d'un programme Java (et donc Ant).

Une autre solution serait d'avoir le serveur écouter une requête de cookie « secret », où vous par exemple imprimer / enregistrer le cookie au démarrage afin que le script Ant peut récupérer le cookie, et vous pouvez déclencher une requête à l'URL de votre « secret » sur lequel le serveur lui-même sortir gracieusement.

Je vais avec une solution RMI rapide.

netstat -a

pour trouver le pid du processus qui a le port ouvert (en supposant que vous connaissez le port), et

kill -9 $pid

pour tuer le processus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top