- PR -

J2EEシステムにおけるサービス時間終了後の制御について

投稿者投稿内容
悟空
会議室デビュー日: 2003/06/06
投稿数: 6
投稿日時: 2005-10-05 17:22
現在、J2EEのシステムを構築中ですが当システムのサービス時間は
AM9:00〜PM20:00を想定しております。

・AM9:00のサービス開始時はJOB管理ツール(JP1等)にてサーバーアプリケーション
 を起動します。

・PM20:00にサービスを終了したいのですが、バッチ処理等が裏で動いているので、
 サーバーアプリケーションは停止したくはありません。
 よって、以下2点の機能を実装したいと思っております。
 1)ログイン画面はPM20:00以降使用できない(別の代替画面に置き換わる)
 2)PM20:00以前にログインしていたユーザーリクエストはPM20:00以降の全て
   エラーになる。

皆様はサービス時間終了時の制御はどのように行っているのでしょうか?
私が考えている案としては以下があります。
 案1)予めサーバーの起動パラメータ等に「PM20:00」という変数を与えておき、
    フィルターを利用して現在時刻 > パラメータ(PM20:00)の
    場合はエラーとするという処理を入れる。

    ⇒但しこの場合だとサービス時間中にPM20:00がPM21:00になった場合
     対応できなくなってしまうかなと思っております。

 案2)DB若しくは何らかのプロパティファイル等に「PM20:00」という文字列を
    セットし、フィルターで毎回その媒体を見に行きチェックを行う。

    ⇒但しこの場合だとフィルターで毎回DB等へアクセスが必要になって
     しまうのでちょっと大げさかなと思っております。

何か他に良い方法はありますでしょうか?
Atwight
常連さん
会議室デビュー日: 2003/11/20
投稿数: 46
お住まい・勤務地: 神奈川県在住
投稿日時: 2005-10-05 18:43
お疲れ様です。

JP1を使用しているならそちらでサービス停止処理を行うのはどうでしょう。
単純にサーバとアプリケーションを落とすだけならばスクリプトをJP1から呼び出せばよいだけですし、その時刻を変更する事も可能です。ログイン画面変更はちょっと分かりませんが、いずれにせよスクリプトを作成するのであればそれをJP1から呼び出すようにすればよいと思います。

個人的にはジョブスケジュールソフトを使用しているならば、バッチ処理はそちらに任せた方がよいと思うのですがいかがでしょう。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-10-05 19:01
案2ですが、サーブレットのinitメソッドで1度だけ取得して、
コンテキストに格納すれば、負荷にならないかなと思います。

その後はサーブレットフィルタで時間判定を行い、
終了後ならUnavailableExceptionをスローして、
web.xmlのエラーページ設定にて違うページに
飛ばしてあげればいいと思います。
syo
常連さん
会議室デビュー日: 2003/08/17
投稿数: 43
投稿日時: 2005-10-05 22:56
お世話になっております。

 構成にもよりますが、httpサーバ側で制御って言うのもありかもしれません。ただ、少し大掛かりになってしまいそうなので、ServletFilterを使うのが手っ取り早いでしょうね。

引用:

終了後ならUnavailableExceptionをスローして、
web.xmlのエラーページ設定にて違うページに
飛ばしてあげればいいと思います。



 ServletFilterの中で該当ページ(エラーページ)に飛ばす(リダイレクトする)という手もありますよね。「利用不可」なので、UnavailableExceptionの方が直感的にわかりやすいかもしれませんが。
 この辺はある程度人の好みにも左右されてくるところでしょうか?

#ところで、午前9時の時点でスケジューラで起動しているとのことですので、「バッチが終わっているはず」という時刻に一度停止させているんですよね?
悟空
会議室デビュー日: 2003/06/06
投稿数: 6
投稿日時: 2005-10-06 00:29
回答ありがとうございます。投稿したものです。

いろいろご意見をお伺いしましたが、いくつか質問させてください。

Atwightさんへ
 確かにJP1でサーバーとアプリケーションを落とすことは可能なのですが、
 時間になったらアプリケーションは落とさずリクエストだけを除外するという
 処理を行いたいのでJP1での処理を敬遠しておりました。
 そのようなスクリプトがあれば教えていただければと思います。

かつのりさん、syoさんへ
 フィルターでUnavailableExceptionをスローするという案は
 なるほどと思いました。
 しかしサーブレットのinit()にてDB等に保存されたサービス時間情報を
 取得してしまうと、日中運用途中でサービス時間が変更になった場合に、
 対応できなくなってしまうのではと思います。
 サーブレット側になんらかの変更通知を送って
 送られたときだけ再度DB等を読みに行くような
 制御ができたらと思うのですが何かご助言をいただけますでしょうか?

 ちなみに夜間のバッチ処理が終了後にJP1にてサーバーの停止は
 行っております。

 アプリケーションの開発は今までいくつか行っていたのですが、
 運用周りが初めてなので、どうして良いかわからなくて。。
 
 ネットでも調べたのですが良い情報が見つからず
 (っというよりは検索キーワードがわからず)
 こちらの会議室へ投稿いたしました。

以上 よろしくお願いします。
 




[ メッセージ編集済み 編集者: jdk131 編集日時 2005-10-06 00:30 ]
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-10-06 01:19
引用:

日中運用途中でサービス時間が変更になった場合に、
 対応できなくなってしまうのではと思います。


・9時にAPサーバを起動する
・22時で終了

と書いてありましたが、要件が違ってきますね。
正しい仕様を明記すべきでしょう。

引用:

 サーブレット側になんらかの変更通知を送って
 送られたときだけ再度DB等を読みに行くような
 制御ができたらと思うのですが何かご助言をいただけますでしょうか?


変更通知を送る側で悩んでいるんでしょうか。
受け取る側で悩んでいるんでしょうか?
どういう構成になっているのかわからないので、アドバイスは難しいです。
(JP1については、使った事がないので悪しからず・・・)
つばさ
ベテラン
会議室デビュー日: 2005/02/05
投稿数: 54
投稿日時: 2005-10-06 06:22
運用終了時刻変更画面をWEBで作成し、
サーブレットのinit()で格納したサーブレットコンテキスト
を更新してしまうというのはいかがでしょうか?
運用権限を持ったユーザのみ操作可能、1日に一度だけ変更可能
など、いろいろ制約が必要そうですが。
悟空
会議室デビュー日: 2003/06/06
投稿数: 6
投稿日時: 2005-10-06 09:23
投稿したものです。

仕様の説明が途中でおかしくなってしまったので再度説明させていただきます。

通常時のオンラインサービスはAM9:00 - PM20:00であり、
AM9:00にJP1にてアプリケーションの起動を行っております。
本来であればPM20:00にJP1にてアプリケーションの停止を行えば良いのですが、
処理中のバッチプログラムやメンテナンス系処理を行いたいので、
アプリケーションを停止することはできません。

よってアプリケーションを立ち上げたままPM20:00以降は
新規ログインの禁止+ログイン中のリクエスト継続停止を
行いたいと思っております。

但し、PM20:00という時間は日中の業務進捗により、
延長や短縮の可能性もあります。

上記要件のもと、それを達成できる仕組みを構築したいと
考えております。

今までのお話をまとめると以下の案がよさそうであると
思っております。

・Servletのコンテキストパラメータに[09:00 - 20:00]のような
 ものを登録する。
 もしくはDBのようなものに上記値を格納する。
・Servletのinit()処理で上記値を取得し、
 コンテキストに格納しておく。
・各リクエストをフィルターで取得し、
 09:00 < 現在時刻 < 20:00 のようなチェックを行う。
 エラーの場合はUnavailableExceptionをスローし
 web.xmlに登録しておいたエラー画面へ遷移する。
・時間を稼動中に変更し場合は
 専用の画面等でコンテキストの値を変更する。

どうでしょうか?

以上

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