第 4 章 担当機能の開発
4.3 仮想マシンの制御機能
4.3.4 设计のポイント
35
図4-17 仮想マシン制御機能の分析クラス図
Controller 部分では、クライアントからの要求に対するアクション(Action)を定義した。ア
クションは ActionServlet を継承し、 クライアントからの要求を受け取ると、リクエストデータ
をActionFormBeanに格納し、アクションを呼び出す。アクションは、アクションフォームビーン
に格納されたデータを元にビジネスロジック(Model)を実行し、画面表示(View)を呼び出す。
Model部分では、データにアクセスするオブジェクトであるDAO(Data Access Object)
を定義し、データベースのテーブルごとに一つクラスとした。これは、データベース側の変 更に合わせたプログラムの変更を局所化するためである。データベースとクラスが1対1で 対応しているため、テーブルを変更した場合に、変更しなければならないクラスが自動的に 決まる。各クラスの中には、テーブルを表すメソッド以外に、データベースへの操作を行う メソッドを定義した。このメソッドは、データベースの接続、切断、問い合わせ実行、コミ ット、ロールバックなどを役割し、共通部分を抽出した形になっている。
Kumoiとのやり取り
前述により、専用の ServletがShell のライブラリを利用し、VMの起動・停止などを行 うことになっている。専用のServlet がどのようにShell のライブラリを利用するかと考え
ると、Controller 部分でKumoiとのやり取りための専用クラスKumoiControllerを定義し
た。このクラスにいくつかメソッドが定義される。これらのメソッドは Kumoi のライブラ リを呼び出し、Kumoiにログイン、ログアウト、またはVMの起動、停止などそれぞれKumoi に関する操作を実現する。3.3節に記述した課題と解決策で、本プロジェクトは極力Kumoi に依存しない形で開発するということが要求されている。この方針によって、クラス
KumoiControllerを定義した。今後、Kumoiではなく、別のクラウド環境に対応と要求され
る場合、本機能に関する部分の修正はほとんどしなく、クラスKumoiControllerに対応する だけである。
PHPとのやり取り
前述により、第2イテレーションで開発したWebインターフェースはPHPで開発され、VM 制御機能は付属機能としてScala専用のServletを開発している。ユーザはPHP側でログイン させるようにして、ログインが1度で済むようになっている。VM操作機能を利用したい場合、
メニュー画面で、「VMを操作する」のリンクを押すと、VM操作画面(図4-9)が表示される。
この過程に進む条件の一つとして、ユーザに対するOpenIDが必要になっている。したがって、
異なるWebサービス(PHPとServlet)の間で、どのようにデータ(OpenIDなど)を転送す るかを検討した。その結果、安全性が保たれるような解決案が出た。
処理の流れを図4-18に示す。データベースで、frontend_sessionsという名のテーブル(フ ィールド:SessionID、 OpenID)を定義した。PHP側がリンクを押してVM操作機能にサ クセスする際に、該当ユーザに対するOpenID、SessionIDをテーブルfrontend_sessionsに保 存する。同時、SessionIDをユーザ側のCookieに保存する。Servlet側がアクセス要求を受け 次第、Cookieを読み、そのSessionIDを取得する。また、テーブルfrontend_sessionsにアク セスし、取得したSessionIDによって該当のOpenIDを取得する。最後、テーブル
frontend_sessionsから使った記録を削除する。以上の方法を利用し、大切なデータOpenID を安全に転送できるように実現した。
図4-18 PHPとServlet間のデータ(OpenID)交換の処理
37