Delphi Labs: DataSnap XE - データエクスプローラでサーバーをテストする

By: Chikako Yonezawa

Abstract: この記事では、Delphi XE を使用して、複数の TCP/IP や HTTP ポートをリッスンする DataSnap スタンドアロンサーバーを構築します。そして、クライアントを作成するのではなく、RAD Studio IDE の一部であるデータエクスプローラで、その機能をテストします。

    はじめに

迅速なプリケーション開発のすばらしさは、コンポーネントを組み合わせることによって複雑なシステムを構築できることです。このソフトウェアアプリケーションを構築するアプローチは、Delphi の DataSnap プログラミングに適用するときに輝きを放ちます。ほんの数分で、マルチスレッドサーバーアプリケーションの作成、多くの同時接続クライアントのサービスの提供、複数の通信ポートを同時にリッスンすることができます。

このラボでは、Delphi XE を使用し、複数のトランスポートコンポーネントを使用して簡単な DataSnap サーバーを構築し、データエクスプローラの中から、その機能をテストします。

    サーバーの構築

IDE メニューより [ファイル | 新規作成 | その他] をクリックし、表示された「新規作成」ダイアログ内の「 Delphi プロジェクト – DataSnap Server 」カテゴリ内の DataSnap Server をダブルクリックして、スタンドアロンの Delphi DataSnap サーバーアプリケーションを作成するウィザードを呼び出します。

Hide image
DataSnap01

ウィザードの最初のタブでは、プロジェクトの種類をデフォルトの「 VCL フォームアプリケーション」のままにします。次のタブでは、接続プロトコルの「HTTP」にチェックをつけ、他はデフォルトの選択のままとします。

Hide image
Click to see full-sized image

次の画面では、TCP/IP ポートの 211番と、HTTP ポートの 8080 が空いていることを確認してください。

Hide image
Click to see full-sized image

「DataSnap Server」ウィザードの最後の画面では、サーバーメソッドの上位クラスはデフォルトのままとし、[完了]ボタンをクリックします。

メニューより [ファイル | すべて保存] を選択して、ウィザードによって生成した新しいプロジェクトとファイルをすべて保存します。今回の場合は、新規に “C:\DataSnapLabs\TestingServerInDataExplorer\”フォルダを作成し、プロジェクトのメインのユニットには “FormServerUnit” と名づけ、他のユニットはデフォルトの名前 (“ServerMethodsUnit1”, “ServerContainerUnit1”) のままにし、プロジェクトの名前は “TestingServer” としてあります。

必要に応じて、ウィザードによって生成されたサーバーメソッド “EchoString” と “ReverseString” の実装を変更することができます。

エンタープライズ強化の “echo” メソッドの実装が行いたいので 1度ではなく2度、指定された文字列を返却します。

こちらは、サーバーメソッドユニット内の “EchoString” メソッドの実装です。

function TServerMethods2.EchoString(Value: string): string;
begin
  Result := 'Echoing ' + Value + ' ... ' + Value;
end;

プロジェクトマネージャー内の “Server Container” ユニットをダブルクリックします。先程のウィザードは、1つの “DSServer1” コンポーネント、1つの “DSServerClass1” コンポーネント、2つの通信コンポーネント: “DSTSCServerTransport1” と “DSHTTPService1” を生成しました。

DataSnap サーバーアーキテクチャ内では、中心に 1つの “TDSServer”インスタンスがあり、クライアントが使用可能な異なるサーバーメソッドクラスを表すその数分の “TDSServerClass” コンポーネントと、異なるプロトコルとポートの接続を表すその数分の通信コンポーネントがあります。

先程のウィザードは、TCP ポートの 211 をリッスンするための 1つのコンポーネントと、HTTP ポートの 8080 をリッスンするための 1つのコンポーネントを生成しました。

このデモでは、クライアントのリクエストをリッスンするために追加のポートをサーバーに追加します。

“F6” キーを押し、「IDE インサイト」を表示し、“TDSTCPServerTransport” と入力して、フォームにこのコンポーネントを追加します。

Hide image
DataSnap33

“DSTCPServerTransport2” コンポーネントを選択し、オブジェクトインスペクタよりプロパティを更新します。

“Port” プロパティの値を 212 に、 “Server” プロパティを “DSServer1” コンポーネントに設定します。

Hide image
DataSnap34

全てを保存します。

サーバーをテストする準備が整いました。

メニューより [実行 | デバッカを使わずに実行] を選択しサーバーを起動させ、最小化しておきます。サーバーの機能をテストするために実行しておく必要があります。

    データエクスプローラでテストを行う

デフォルトのレイアウト上の「プロジェクトマネージャー」の下のタブの「データエクスプローラ」をマウスでクリックして表示するか、または、IDE メニューより [表示 | データエクスプローラ] を選択します。

データエクスプローラ内の “DATASNAP” ノード上で、マウスの右ボタンをクリックし、表示されたポップアップメニューより「新規接続を追加」を選択し、接続名として “TEST_TCP_211” を入力します。

作成した接続 “TEST_TCP_211” 上でマウスの右ボタンをクリックし、表示されたポップアップメニューより「接続の変更」を選択します。

表示されたダイアログ内の、プロトコルとして “tcp/ip” を選択し、ホストには “127.0.0.1”、ポートには “211” を入力します。

[テスト接続] ボタンをクリックし、接続できるかを確認します。

Hide image
Click to see full-sized image

「接続の変更」ダイアログを閉じ、データエクスプローラに 2つの DataSnap 接続を追加します。1つは “TEST_TCP_212” 、もう 1つは “TEST_HTTP_8080” と名前をつけます。同様に接続のプロパティを変更し、接続を確認します。

Hide image
DataSnap36

接続ノードの一つを展開します。

クライアントの視点からは、DataSnap サーバーへの接続は、データベースへの接続にとても似ていることが分かります。さらに、DataSnap サーバーのメソッドを呼び出すことは、データベースのストアドプロシージャを呼び出すのととても似ていることが分かります。

“テーブル” や “ビュー” のノードを展開しようとするとエラーメッセージが表示されます。それらは、DataSnap サーバーのコンテキスト内では意味を持たないからです。

“プロシージャ” ノードを展開すると、異なるサーバークラスに属するサーバーメソッドの長いリストが表示されます。2つの予め生成されたサーバークラスは “DSAdmin” と “DSMetadata” で、沢山のサーバーメソッドを含んでいるのが分かります。

Hide image
Click to see full-sized image

リストの下の方に、今回のサーバーメソッドによって実装された 2つのメソッド “EchoString” と “ReverseString” があります。

“EchoString” メソッド上で、マウスの右ボタンをクリックし、表示されたポップアップメニューより「パラメータの表示」を選択します。

“Value” フィールドにエコーさせたい文字列を入力します。例えば “Delphi” と入力します。フォームの左上の [実行] ボタンを押すと、フォームの下に、返却された値 “Echoing Delphi … Delphi” が表示されます。

Hide image
DataSnap38

これだけ!

    まとめ

この “Delphi Labs” では、Delphi および RAD Studio の一機能である「データエクスプローラ」で DataSnap サーバーのテストを行いました。

DatSnap サーバーは、最初からマルチスレッドに対応し、異なる通信プロトコルを使って、同時に異なるポートをリッスンできます。

この例では、2つの TCP/IP と 1つの HTTP ポートをリッスンするテストサーバーを構築しました。

これが、RAD (Rapid Application Development – 迅速なアプリケーション開発 ) と Delphi DataSnap の力です。いくつかのコンポーネントが、共に接続し、いくつかのプロパティを調整するだけ。たった数分で複雑なサーバーサイドアーキテクチャの準備ができます。

この記事のソースコードは Code Central (http://cc.embarcadero.com/item/28213) にあります。そして、このデモのビデオ版は YouTube (http://www.youtube.com/watch?v=KbRjTb8NHQ8) で公開しています。

"Delphi Labs" に関する詳細情報は、 http://blogs.embarcadero.com/pawelglowacki にて公開しています。

Server Response from: ETNASC03