- PR -

サーブレット上で、メンテナンス停止

1
投稿者投稿内容
いわ
会議室デビュー日: 2003/09/22
投稿数: 18
投稿日時: 2003-12-30 13:09
こんにちは。

現在、サーブレットで動いているシステムがあるのですが、
メンテナンス(DBのバックアップ等)で夜中にサーバーを停止してやっています。
(PostgreSQLでホットバックアップも可能は可能ですが・・・)

web.xml上で、ワイルドカードの指定したものに交換し、すべてのサーブレットを「メンテナンス中です」表示にすることも考えましたが、そのためにはやはり、Tomcatを再起動しなければなりません。

何かよい方法はありませんでしょうか。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-12-30 14:34
サーブレットフィルタを使い、メンテナンス中の場合はそのメッセージを出力するページに
フォワードしたらどうでしょうか。メンテナンス中かどうかの情報は、DBやファイルに
持っていてもいいでしょうが、メモリ中に持っておくのがパフォーマンスに影響がでなくて
よいと思います。

もしアプリケーションサーバがサーブレットフィルタに対応していないのであれば他の方法を
考える必要がありますが…
いわ
会議室デビュー日: 2003/09/22
投稿数: 18
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)