Frage

Der HTTP-Server in JDK 6 eingebettet ist eine große Hilfe Web-Service zu entwickeln, aber ich habe Situation, wo ich einen Endpunkt veröffentlicht und dann der Code abgestürzt und verließ den Server ausgeführt wird.

Wie Sie Abschaltung der eingebettete Server, sobald Sie den Verweis auf sie (oder die veröffentlichte Endpunkt) verloren haben?

Keine korrekte Lösung

Andere Tipps

Ich verwende den folgenden Code, um es zu starten

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

und unter Code zu stoppen es

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

Ich habe noch nie verwendet diesen Server vor und ich kann jede gute Dokumentation nicht finden. Vielleicht sind diese weniger elegante Lösungen haben Ihnen bereits aufgetreten ist, aber ich dachte, ich würde sie erwähnen.

Scheint, wie com.sun.net.httpserver.HttpServer eine Implementierung Klasse namens HttpServerImpl hat. Es hat eine Methode namens stop ().

Oder vielleicht können Sie das Thema Hören auf dem Server-Socket und Call-Interrupt () finden.

Sean

Wie wäre es die Referenz nicht zu verlieren, dann? Wenn Sie Ihren Code abstürzt sagen, ich nehme an, Sie irgendwo eine Exception. Wo genau? So jemand fähig ist, diese Ausnahme abfangen offensichtlich muss auch einen Verweis auf die Httpserver, die Sie um sich herum passieren müssen könnten.

Bearbeiten : Oh. In diesem Fall, wenn Sie nicht möchten, dass die gesamte JVM mit dem Httpserver in ihnen töten, dann müssen Sie irgendeine Form von IPC an die Umgebung bieten, zum Beispiel ein Befehlskanal über RMI, die von einem Java-Programm aufgerufen werden können (und damit Ant).

Eine andere Lösung wäre der Server für einige „geheime“ Cookie Abfrage hören haben, wo man zum Beispiel Druck / das Cookie beim Start speichern, so dass der Ant-Skript, die Cookie abrufen kann, und Sie können eine Anfrage an Ihre „geheimen“ URL abfeuern, auf das der Server selbst ordnungsgemäß verlassen wird.

ich mit einer schnellen RMI Lösung gehen würde.

netstat -a

die pid des Prozesses zu finden, der den Port offen hat (vorausgesetzt, Sie kennen den Hafen) und

kill -9 $pid

, um den Prozess zu beenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top