RMIサーバを正常に停止する
- 参考
http://stackoverflow.com/questions/241034/how-to-remotely-shutdown-a-java-rmi-server
- RMIサーバを停止する場合は、JavaのプロセスをKillすればよいが、そうするとJVM HotSpotのエラーが出力されたりして、異常停止などした場合など障害切り分けが面倒になる。
- 正常に停止するには、サーバ自身に停止させる必要がある。
- Threadで非同期にすることで、クライアント側では正常にメソッドが実行されたと認識され、Threadでwaitした数秒後に、exitでJVMを終了する。
// 停止用メソッド @Override public void terminate() { // 別スレッドで非同期で停止する。 new Thread() { @Override public void run() { System.out.print("shutting down rmi"); try { for(int i=0; i < 5; i++) { System.out.print("."); sleep(1000); } } catch(InterruptedException e) {} System.out.println("done."); Runtime.getRuntime().exit(0); } }.start(); }