どのようにシャットダウンcom.sun.net.httpserver.HttpServerか?
-
06-09-2019 - |
質問
はJDK 6に組み込まれたHTTPサーバは、Webサービスを開発する大きな助けですが、私は、私はエンドポイントを公開し、その後、コードがクラッシュし、実行しているサーバーを残した状況を持っています。
どのようにシャットダウン組み込みサーバーやるあなたはそれへの参照(または公開エンドポイント)を失ってしまった後は?
正しい解決策はありません
他のヒント
私はそれを起動するために以下のコードを使用します。
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();
とそれを停止するためのコード以下
this.httpServer.stop(1);
this.httpThreadPool.shutdownNow();
私は前に、このサーバーを使用したことがないと私は任意の良いドキュメントを見つけることができません。おそらく、これらのあまりエレガントな解決策は、すでにあなたに発生しているが、私はちょうど私がそれらを言及するだろうと思っています。
com.sun.net.httpserver.HttpServerがHttpServerImplと呼ばれる実装クラスを持っているように思えます。それは)(ストップと呼ばれる方法があります。
それともサーバソケットでリスンスレッドを見つけると()割り込みを呼び出すことができます。
ショーン
どのようにして、参照を失うではないでしょうか?あなたのコードがクラッシュを言うとき、私はあなたがどこかで例外を取得を前提としています。正確にはどこで?だから、明らかにこの例外を傍受できる誰かが自分の周りに渡すことも、あなたが持つかもしれないHttpServerを、への参照を持っている必要があります。
編集:ああ。その場合、あなたはそれでHttpServerを持つ全体のJVMを殺すためにしたくない場合は、例えば、環境へのIPCのいくつかのフォームを提供する必要があります。 Javaプログラム(ひいてはANT)から呼び出すことができる。
RMIを介して、コマンドチャネル別の解決策は、サーバーは、例えば、いくつかの「秘密」クッキークエリ、をリッスン持っているだろう印刷/ Antスクリプトがクッキーを取得することができ、およびサーバーが正常自体が終了します、その上にあなたの「秘密」URLにクエリをオフに発射できるように起動時にクッキーを保存します。
私は迅速なRMI溶液で行くと思います。
netstat -a
開いているポートを持っているプロセスのpidを見つけるために(あなたがポートを知っていると仮定)、および
kill -9 $pid
プロセスを殺すために。