Kandataアプリケーションの作り方
設計と開発の仕方
サンプルの会議室予約システムを使って説明します。
データ構造の設計

サーバ側のデータ構造、クライアント側の大雑把な画面設計、
そしてお互いを結ぶインターフェースを考えます。
会議室の情報を持つクラス Roomと 予約のクラス Reservation
です。
これらのクラスの登録、削除、一覧取得等を作成することになります。
この2つのクラスはサーバとクライアントの両方で扱うため、
roomreservation.common
のパッケージにします。
また、このオブジェクト自体をサーバ・クライアント間でやり取りするので
Serializable
インターフェースにしておきます。
それ以外のクラスは、クライアント側はroomreservation.client
に、
サーバ側はroomreservation.server
のパッケージとします。
サーバ・クライアント間のインターフェースを設計
会議室予約システムの場合:
クライアントが必要な機能は、以下の4つです。
- 部屋の一覧取得():Roomのリスト
- 最新の予約状況の一覧取得(日付):Reservationのリスト
- 予約する(:Reservation):boolean
- 予約をキャンセルする(:Reservatoin):void
これを元にコマンド名、引数、戻り値を決定します。
- 部屋の一覧取得():Roomのリスト
コマンド | "getRoomList" |
引数 | なし |
戻り値 | Roomのリスト |
備考 | 登録順にソート |
- 最新の予約状況の一覧取得(日付):Reservationのリスト
コマンド | "getReservatoinList" |
引数 | date:String // "20030731"の形式 |
戻り値 | Reservationのリスト |
備考 | 会議室、開始時間の順にソート |
- 予約する(:Reservation):boolean
コマンド | "registReservation" |
引数 | :Reservation // 予約の申請内容 |
戻り値 | boolean // 予約できたか? |
備考 | 他の予約と重なっていないかどうかチェックする |
- 予約をキャンセルする(:Reservatoin):void
コマンド | "cancelReservation" |
引数 | :Reservation // 予約の申請内容 |
戻り値 | なし |
備考 | 登録者しかキャンセルできない。クライアント側でチェック |
ここまで決まれば、クライアントとサーバを別々に開発を進めることができます。
サーバ側の開発
サーバ側は、2つのクラスから成っています。
KandataServerインターフェースを実装したRoomReservationServerと、
アプリケーションロジックのRoomReservationです。
RoomReservationServerは、init()でアプリケーションロジックを生成し、
アクションを登録します。アクションは引数を取得し、アプリケーションロジックを
呼び出しています。
RoomReservationは、この会議室予約システムの実際の処理を行っているクラスです。
部屋の一覧取得、最新の予約状況の一覧取得、予約、予約キャンセルを実装しています。
クライアント側の開発
クライアント側は、Clientインターフェースを実装したクラスを作ります。
そして、そのクラスのinit()メソッドから、クライアントGUIを起動させます。
そのとき、Connectorを引数に渡します。
通常の処理は普通のGUIの作り方と同じです。
サーバを呼ぶときは、connectorのinvoke()メソッドにあらかじめ決めておいた、
コマンド、引数を渡し、結果をキャストして受け取ります。
Kandataサーバの立ち上げ方
サーバ側に以下のファイルが必要です。
kandata-roomreservation/WEB-INF/kandata.properties
アプリケーション名、サーバのリソースのパス、クライアントのクラスのパス等を設定します。
# kandata.properties
#
application.name=roomreservation
application.serverclassname=roomreservation.server.RoomReservationServer
application.serverresourcepath=server_resources
application.cliententryclassname=roomreservation.client.RoomReservationClient
application.clientclasspath=classes
application.clientresourcepath=client_resources
kandata-roomreservation/WEB-INF/web.xml
Tomcatを起動するために必要ですが、特に変更する必要はありません。
kandata-roomreservation/WEB-INF/classes/
このディレクトリ以下にKandata、および作成したアプリケーションのクラスファイルを配置します。
kandata.propertiesに記述したパスと一致している必要があります。
kandata-roomreservation/WEB-INF/client_resources/
このディレクトリにクライアントで使用するリソース(画像ファイルなど)を配置します。
kandata.propertiesに記述したパスと一致している必要があります。
kandata-roomreservation/WEB-INF/server_resources/
このディレクトリにサーバで使用するリソース(アプリケーションごとの設定ファイルなど)を配置します。
kandata.propertiesに記述したパスと一致している必要があります。
サーバは必要ならばファイルを出力することもできます。
kandata-home/
ユーザがアプリケーションを登録するための画面を用意します。
このディレクトリを参考にしてください。
デバッグモードの使い方
本来はクライアントとサーバは別プロセスなのですが、同一プロセスで実行します。
JBuilder,Eclipseなどのデバッグ機能(ブレークポイントやウォッチなど)が利用できるため、
デバッグが容易になります。
Tomcatが起動している場合、Tomcatを停止します。
デバッグモードで起動します。(kandata-helloの場合)
java -cp kandata_client.jar kandata.DebugConnector hello.server.HelloServer
Antが使える人は以下で起動できます。
ant -f hello-build.xml debug
戻る