Naoki Kurosawa
naoki_kuros****@ybb*****
2003年 12月 16日 (火) 23:54:48 JST
黒澤です。 ワークフローシステム構想その3 どう使うかです。 おいおい絵とか足していきますが、とりあえず文章で。 伝わるかどうか心配。 ■ユーザ登録 実現したいこと ・ユーザ登録画面からニックネーム、パスワード、メールアドレスを入力すると システムに仮登録され、登録確認メールが送信される。 ・1つのメールアドレスに付き、1つのアカウントしか取れない。 ・メールに記載されたURLにアクセスすることで登録確認が行われ、システムに 本登録される。 ・登録確認が行われるまで(仮登録状態のとき)はシステムにログインできない。 ・仮登録してから1週間経過しても登録確認が行われない場合、仮登録がキャン セルされる。 ・登録確認メールがエラーリターンした場合、仮登録をキャンセルする。 どう実現するか ・仮登録時、仮登録情報をDBに登録すると同時にワークフローの 登録確認プロセスを起動する。 ・登録確認プロセスでは、 i .登録確認メールを送信 ii.確認タスクの実行待ち(タイムアウト1週間) →ユーザが登録確認すると確認タスクが完了する。 →タイムアウトしたら、タイムアウト処理で仮登録情報を削除する。 ・エラーメールを受信した場合、強制的にタイムアウトさせるか 登録確認プロセスを強制終了し、仮登録情報削除処理を行う。 要検討事項 ・エラーメール受信プロセス(定期的にPOPとかでポーリングする)が必要。 ■ユーザ・メールアドレス変更 実現したいこと ・メールアドレスが変更されたら、確認メールを送信する。 ・メールに記載されたURLにアクセスすることで変更確認が行われ、 実際に変更される。 ・変更確認が行われるまではシステムにログインできない? ・変更を行ってから1週間経過しても変更確認が行われない場合、変更が キャンセルされる。 ・変更確認が行われるまで、システムからの別のメール(シーズン終了通知など を想定)は送信されない。 送信されないが保留され、変更確認が行われるか、変更がキャンセルされると 送信される(これは不要かなぁ) ・変更確認メールがエラーリターンした場合、変更をキャンセルする。 どう実現するか ・変更リクエストが行われたら、ワークフローの変更確認プロセスを起動する。 この時点ではDB上のメールアドレスは更新せず、メールアドレスの確認中 ステータスにしておく。 ・変更確認プロセスでは、 i .変更確認メールを送信 ii.確認タスクの実行待ち(タイムアウト1週間) →ユーザが変更確認すると確認タスクが完了する。 →タイムアウトしたら、タイムアウト処理で変更をキャンセル (メールアドレスの確認中ステータスを元に戻す)する。 ・エラーメールを受信した場合、強制的にタイムアウトさせるか 変更確認プロセスを強制終了し、キャンセル処理を行う。 ■ロボットクラスチェック 実現したいこと ・間違ってアップロードしたりすることも考えられるので、アップロードを 受け付けてクラスチェックが終わったあと、ロボット情報(ファイル名、 ロボット名、バージョン、説明等)を表示し、「登録していいか?」確認 したい。 ・しかし、アップロードが集中したりしたときにレスポンスがないままじーっと 待っていたくない。 どう実現するか ワークフロープロセス(クラスチェックプロセス) i .ロボットクラスチェックを段階的に(アクティビティを分けて)行う。 この際、進むごとに進捗情報(パーセントとか)を増加させていく。 ii .チェックが終わったらアップロード確認タスクの実行待ち (タイムアウト30分) iii.確認されたら登録する。 Webアプリ側 ・アップロードを受け付けたらクラスチェックプロセスを起動し、 砂時計画面のようなものを返す。 ・砂時計画面は10秒経つごとにリフレッシュし、クラスチェックプロセスの 進捗情報を表示する。 ・砂時計画面リフレッシュ時、クラスチェックが終了していたら確認画面 を出す。 ・確認されたらアップロード確認タスクを完了する。 ■大会の開催 大会フローはいろいろなものが考えられる。 ここでは以下のようなものを例示する。 ・大会には1on1リーグとmeleeリーグがある。 ・それぞれのリーグは予選と本戦に分かれる。 ・予選と本戦はシーズン数が異なるのみ。 予選に参加したロボットはすべて本戦にも参加する。 ・大会が作成されてからしばらくは対戦は行われず、 ロボット参加受付期間を取る。 ・予選リーグ中も参加受付可能。 ・決勝リーグになったら参加受付終了。 大まかに以下のようなフローになる #図を書いたほうがいいかも。 ○大会プロセス作成後スタート 1.1on1予選リーグプロセスとmelee予選リーグプロセスを作成し、開始。 2.ロボット参加受付中フラグを立てる (フラグはDBに書くかもしれないし、プロセスの属性とするかもしれない) 3.1on1予選リーグプロセスとmelee予選リーグプロセスの終了を待つ。 4.ロボット参加受付中フラグを下げる。 5.1on1決勝リーグプロセスとmelee決勝リーグプロセスを作成し、開始。 6.1on1決勝リーグプロセスとmelee決勝リーグプロセスの終了を待つ。 7.最終結果集計 8.大会終了 ○1on1/melee 予選/決勝 リーグプロセス 1.リーグ作成 この時点ではleagueテーブルにリーグ情報を登録するのみ。 seasonはまだ作成しない。 2.シーズン開始日時待ち (決勝リーグではこのアクティビティはなし。すぐにシーズンが開始される) (ロボット参加受け付けのみの期間) 3.第1シーズンプロセスを作成し、開始 4.シーズンプロセスの終了を待つ 5.所定のシーズン数を経過していなければ3に戻る 全シーズン消化していれば終了。 ○シーズンプロセス 1.シーズンデータ作成。 2.そのシーズンに参加するロボットを確定させる。 3.各ロボットの初期順位を決定する。 4.組み合わせを生成し、その組み合わせごとにバトル実行プロセスを作成し、 開始。 5.すべてのバトル実行プロセスが終了するのを待つ。 6.シーズン結果集計。ロボットの順位を決定する。 7.ロボットの戦力分析を行う (このタスクはプライベートリーグでは行うべきではないかもしれない) 8.ランキング集計、順位変動グラフ生成、結果HTML生成等の処理を行う。 9.シーズン終了。 ○バトル実行プロセス 1.バトルが実行されるのを待つ。 2.実行されたらプロセス終了。 要検討事項 ・大会やリーグへの参加資格チェックは大会ごとにいろいろ変えたくなるに 違いない。 - 参加資格チェックをひとつのプロセスとして記述しておいて、 DBの大会情報のひとつとして起動するべき参加資格チェックのプロセス名 を保持しておく。 - 参加資格チェック処理を大会プロセス定義の中に記述できるようにして、 プロセスのイベントハンドラ的に起動する。 上記どっちにするか。あるいは別なうまい方法があるか。 ■スループット集計 やりたいこと ・プロセスを、JBoss起動時にデーモン的に起動し、 集計タスクを一定時間ごとにぐるぐる回す。 あるいは ・プロセスを一定期間ごとに起動する。 さらに以下続報。 -- Naoki Kurosawa <naoki_kuros****@ybb*****> Sharpen up JAVA skills. - Robocode Rumble-JP Project - http://rumble-jp.sourceforge.jp/ http://robocode.ddo.jp/rumblejp/