サーバー アプリケーションで厄介な問題が発生しました。
次のコードで Apache Mina をバインドします。
acceptor.bind(new InetSocketAddress(PORT));
アクセプターは NioSocketAcceptor です。HTTP インターフェイスを介してサーバーをシャットダウンできるので、サーバーを再起動できます。
Server.ioAcceptor.unbind(new InetSocketAddress(Server.PORT));
for(IoSession session: Server.ioAcceptor.getManagedSessions().values()){
if(session.isConnected() && !session.isClosing()){
session.close(false);
}
}
Server.ioAcceptor.dispose();
Main.transport.stop();
Logger.getRootLogger().warn("System going down. Request from "+context.getRemoteAddress());
System.exit(10);
これは、Mina サーバーを停止するために使用するコードです。ただし、次の数分でサーバーを再起動しようとすると. (5分から15分の間) 起動時に次の例外が発生します: java.net.BindException: Address already in use
シンプルな ioAcceptor.unbind() も試しましたが、違いはありませんでした。サーバーは、OpenJDK を使用する Centos 5 で実行されます。Apache Mina のバージョンは 2.0 RC1 です。
これを解決する方法についてのアイデアを事前にありがとうございます。