- - PR -
サーブレット上で、メンテナンス停止
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2003-12-30 13:09
こんにちは。
現在、サーブレットで動いているシステムがあるのですが、 メンテナンス(DBのバックアップ等)で夜中にサーバーを停止してやっています。 (PostgreSQLでホットバックアップも可能は可能ですが・・・) web.xml上で、ワイルドカードの指定したものに交換し、すべてのサーブレットを「メンテナンス中です」表示にすることも考えましたが、そのためにはやはり、Tomcatを再起動しなければなりません。 何かよい方法はありませんでしょうか。 |
|
投稿日時: 2003-12-30 14:34
サーブレットフィルタを使い、メンテナンス中の場合はそのメッセージを出力するページに
フォワードしたらどうでしょうか。メンテナンス中かどうかの情報は、DBやファイルに 持っていてもいいでしょうが、メモリ中に持っておくのがパフォーマンスに影響がでなくて よいと思います。 もしアプリケーションサーバがサーブレットフィルタに対応していないのであれば他の方法を 考える必要がありますが… |
|
投稿日時: 2003-12-30 23:24
こんばんわ。
お返事ありがとうございます。 Tomcat4を使用していますので、フィルタは使用可能でした。 (フィルタを知りませんでした(^^; 以下のようなフィルタを作成し、うまく動きました。 ----------- package filters; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MintenanceFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { Boolean bool = (Boolean)((HttpServletRequest)req).getSession().getServletContext().getAttribute("maintenance"); if(bool == null){ bool = new Boolean(false); } if(bool.booleanValue()){ String JSPpath = "/WEB-INF/pages/maintenance.jsp"; RequestDispatcher dispatch = req.getRequestDispatcher(JSPpath); dispatch.forward(req, res); }else{ chain.doFilter(req, res); } } public void init(FilterConfig config) throws ServletException { } public void destroy() { } } --------------- 別にあるメンテナンスモードへの移行用サーブレット内でapplicationスコープ内の状態を操作するようにして、理想どおりのものができました。 ありがとうございました。 |
1
