[Rumble-jp-dev] 分散サーバ登録画面の作成方針

Back to archive index

Naoki Kurosawa naoki_kuros****@ybb*****
2003年 3月 31日 (月) 20:19:46 JST


黒澤です。

分散サーバ登録画面の作成方針です。
以下は私の案です。

各分散サーバのスペックを任意で公開できるようにしたほうが
いいかもしれませんね。
あと、マルチプロセッサマシンの登録禁止をどこかに書いておかないと。
#Robocodeがハングアップするので

■機能の要件
ログイン済みでないと表示できないページで、
さらに、この機能をON/OFFできる必要があります。

・そのユーザが登録している分散サーバ一覧
  (ユーザ詳細ページが兼任してもいいかも)
  以下のページに遷移できる。
  分散サーバの追加
              変更
              削除

・分散サーバの追加・更新ページ
  以下の情報を入力・更新
  - ホスト名
  - アクセスパスワード
  (スペックを公開できるようにする場合、
  - メーカ・機種名
  - CPU
  - MEM
  あたりも入力してもらうべきでしょうか)

・削除ページ
  削除してもいい?という確認をするページ。
  OKしたら削除

削除時には削除フラグを立てるようにして、
実際にはDB上からは消えないようにしたいですね。
なぜかというと、それぞれのバトルを実行したマシンがどれなのか
という情報を残しておきたいからです。
#不正な結果を送信されたりしても、誰がやったかわかるように。

ですので、battlesテーブルの方には、
そのバトルを実行したマシンのmachine_idが保持されています。
machinesテーブルからもデータが消えないように
しておくべきですよね。


上記を踏まえてシステム変更案を立てると、
■テーブルスキーマの変更
machinesテーブルに以下のフィールドを追加

name    varchar(100)    null,       -- メーカと機種名
cpu     varchar(50)     null,       -- CPUスペック
mem     varchar(50)     null,       -- メモリ量
deleted tinyint  not null default 0, -- 削除フラグ 削除されると1になる

さらに、以下のインデックスを追加
unique index (hostname, deleted)

■DistServerManagerの変更
各メソッドがdeletedフラグを参照するよう変更。
特にauthorizeメソッド。

さらに、以下のメソッドを追加
○getServersByUserId
ユーザIDを引数として、そのユーザの分散サーバ一覧を取得
select * from machines where user_id = ?

○addServer
分散サーバの登録。引数としてuser_idとサーバ情報を取る。
指定されたホスト名が削除されていないサーバの中で既に使われていないか
チェック
select * from machines where hostname = ? and deleted = 0 limit 1
ResultSetオブジェクトを取得して、next()メソッドがtrueを返したら
既に同名のサーバが登録されている。

その後、登録。
insert into machines (user_id, hostname, password, name, cpu, mem)
 values (?, ?, password(?), name, cpu, mem)

○updateServer
分散サーバ情報の更新。引数としてuser_idとmachine_id、その他を取る。
machine_idをキーとしてデータを更新。
update machines set hostname = ?, password = password(?),
  name = ?, cpu = ?, name = ? where machine_id = ? and user_id = ?

○deleteServer
分散サーバの削除。引数としてuser_idとmachine_idを取る。
update machines set deleted = 1 where machine_id = ? and user_id = ?

■登録・更新・削除の画面
DistServerManagerのuser_idが必要なメソッドについては、
user_idはセッション情報から取り、リクエストパラメータには含めない。
#リクエストパラメータをいじることで他人のデータをいじる、
#ということができないように。


ということでいかがでしょうか。

------------------------------
補足:ログイン済みでないと表示できないページの実現方法

JSPとactionに手を加える必要があります。
JSPの方は、user_customize.jspを参照していただきたいのですが、
頭の方に以下を追加します。
<logic:notPresent name="loginUser" scope="session">
 <jsp:forward page="login_required.jsp" />
</logic:notPresent>

actionの方は、普通は以下のようにBaseActionからextendして
クラスを作りますが、
public class ConfirmAction extends BaseAction

ログインしていないと実行できないactionは、以下のように
LoginRequiredインターフェースをimplementします。
public class RegistRobotAction extends BaseAction
    implements LoginRequired

LoginRequiredインターフェースは単なるマーカなので、
実装しなければならないメソッドはありません。

これを書きながら気がついたんですが、
「リーグの作成」とかログイン済みでないといけないページで、
上記の処理やってませんね。
そのうちやらなきゃですね。
SourceForgeのタスク管理に追加しておきます。
(実は「タスク整理」メール以降、タスク管理ツールを
使ってみていたりします)

------------------------------
-- 
Naoki Kurosawa <naoki_kuros****@ybb*****>




Rumble-jp-dev メーリングリストの案内
Back to archive index