SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

EDN CodeZine出張所

Delphiユーザー必見の技術情報を集約した
「Delphi 2010 DataSnap活用ガイド」


  • このエントリーをはてなブックマークに追加

2. DATASNAP WINDOWSターゲット

 DataSnap 2010は、VCLフォーム、Windowsサービス、そしてコンソールアプリケーションの3つの異なったWindowsターゲットをサポートしています。この章では、それぞれのメリットと違いについて、そして、それぞれのターゲットタイプを適用するベストケースについて説明します。

 DataSnapサーバーとクライアントの使用例を構築することによって、TDSServer、TDSServerClass、TDSTCPServerTransport、TDSHTTPService、TDSHTTPWebDispatcherそしてTDSHTTPService-AuthenticationManagerコンポーネントと、同様にカスタムサーバーメソッドとTDSServerModuleクラスをカバーします。

 異なったトランスポートプロトコル(TCP、HTTP)についてはそれらの効果と潜在的なメリットを説明していきます。DataSnapサーバーオブジェクトのライフタイムについての異なったオプション(サーバー、セッション、そして起動)について説明し、そしてこれらの効果と現実的な提案をします。最後に、配布における課題についてもいくつか言及します。

2.1. DATASNAPサーバーサンプル

 オブジェクトリポジトリには、2つの異なるDataSnapサーバーウィザードがあります。1つはDataSnapサーバープロジェクトをベースにしたウィンドウを作成するもの、もう1つはIIS(Internet Information Services)のようなWebサーバーによってホストされなければならないDataSnapサーバープロジェクトをベースにしたWebBrokerを作成するものです。まず前者からスタートします。

 Delphi 2010を起動し、[ファイル|新規|その他]メニューを選択すると、オブジェクトリポジトリに「DataSnapサーバーウィザード」があります。オブジェクトリポジトリのDataSnapサーバーカテゴリーは次の3つのアイコンを表示します。

  • DataSnap Server
  • DataSnap WebBroker Server
  • Server Module

 最初のDataSnap Serverアイコンをダブルクリックします(他の2つについてはこのホワイトペーパー内で後ほど説明します)。すると次のようなダイアログが表示されます。

 このダイアログの最初のセクションでは、プロジェクトのターゲット設定を行います。デフォルトは、メインフォームと一緒にビジュアルなVCLフォームアプリケーションを作成します。2番目はコンソールアプリケーションで、コンソールウィンドウで動作します。これはリクエストとその応答状況をトレースするには理想的です(サーバーアプリケーションの中で「何が行われているか」を示すには、シンプルなWriteln文を使用することができます)。この両方のアプリケーションタイプは、デモと初期開発には理想的ですが、DataSnapサーバーアプリケーションを最終的に配布したい場合には、それほど理想的ではありません。新しいDataSnapのアーキテクチャーはCOMベースではないため、受信したクライアント接続はDataSnapサーバーアプリケーションを「起動」することができないのです。そのため、受信したクライアントリクエストを処理するためには、DataSnapサーバーは「起動し、稼動している」状態でなければなりません。そして、もし24時間365日、受信リクエストを処理するのであれば、DataSnapサーバーアプリケーションは、その間ずっと稼動し続けていなければなりません。VCL Formsまたはコンソールアプリケーションのために、使用者はWindowsにログオンした状態でサーバーアプリケーションを稼動させていなければならないことを意味しますが、これは決して理想的な状態ではありません。実際に、この場合は3番目の選択の方がより望ましいのです。つまり、Windowsサービスアプリケーションの使用です。これはマシンが起動された時に自動的にインストールと設定がなされ、実行されます(誰かがマシンにログインしている必要はありません)。サービスアプリケーションのマイナス面は、デフォルトではデスクトップ上にアプリケーション自身が表示されず、デバッグが多少難しくなることがあげられます。この3つのアプリケーション形態からベストのものを得るために、VCLフォームDataSnapサーバーアプリケーション、コンソールDataSnapサーバーアプリケーション、そしてWindowsサービスDataSnapサーバーアプリケーションのそれぞれのプロジェクトグループを作成する手順を紹介します。これらの3つはすべて同じカスタムサーバーメソッドを共有しており、その結果DataSnapサーバーアプリケーションを、必要なときに3つの異なるターゲットにコンパイル(そして配布)することが可能になります。

 新しいDataSnapサーバーダイアログの2番目のセクションでは、使用可能ないろいろな通信プロトコルを選択できます。DataSnap 2009と比較すると、HTTP通信のほかにHTTP認証も利用できるようになりました。柔軟性を持たせるために、ここではすべてのオプションをチェックしておきます。

 これにより、TCP/IPとHTTP、そしてHTTPとHTTP認証の組み合わせについても同様に利用することができます。

 新しいDataSnapサーバーダイアログの最後のセクションは、既に設定されています。サーバーメソッドクラスを生成するメソッドがあるとすれば、次のような上位クラスを選択することができます。

  • TPersistent
  • TDataModule
  • TDSServerModule

 ベストなのは最後の選択で、起動の直後からメソッドのためのRTTIを可能にします(TDataModuleが標準だと感じることがあるかもしれませんが、何のデータベースも非ビジュアルコントロールも使用していない場合にはおそらくTPersistentの使用で十分です)。

 以下のDSServer.pasユニットのコードからの抜粋は、TDSServerModuleとTProviderDataModuleの関連を示しており、TDataModuleから順に派生したものです。

TDSServerModuleBase = class(TProviderDataModule)
public
    procedure BeforeDestruction; override;
    destructor Destroy; override;
end;
{$MethodInfo ON}
TDSServerModule = class(TDSServerModuleBase)
end;
{$MethodInfo OFF}

 何をすべきかがわからないときには、TDSServerModuleを上位クラスとして選択してください。

2.1.1. マルチターゲットプロジェクトグループ ― VCLフォーム

 お約束したとおり、マルチターゲットDataSnapサーバープロジェクトグループを作成しましょう。初めにすべての通信プロトコルを選択したDataSnapサーバーとして、VCL Forms Applicationから始めましょう。

 この結果、新しいプロジェクトが作成されます。デフォルトではProject1.dprojという名称で、3つのユニットがあり、これらはデフォルトではServerContainerUnit1.pas、ServerMethodsUnit1.pas、Unit1.pasという名称です。最初に[ファイル|保存]を実行しますが、必要に応じて適当なファイル名を指定して保存します。Unit1.pasファイルは、MainForm.pasという名称で、ServerContainerUnit1.pasはServerContainerUnitDemo.pasという名称、ServerMethodsUnit1.pasはServerMethodsUnitDemo.pas、そしてProject1.dprojは、DataSnapServer.dprojという名称で保存します。

 コンソールアプリケーションとサービスアプリケーションをプロジェクトグループに加えます。そして、この時点での状態を確認し、プロジェクトをコンパイルしてみましょう。DataSnapServerプロジェクトをコンパイルすると、エラーメッセージが表示されるはずです(これは私のミスで、生成したServerMethodsUnit1.pasユニットのファイル名を変更したからです)。すなわち、このエラーメッセージは、実行セクションの節を利用したServerMethodsUnitユニットを含むServerContainerUnitDemo.pasユニットによって生じています(Line 30)。同様に、ServerMethodsUnit1.pasをServerMethodsUnitDemoとして保存します。この問題を解決するために、Uses節を変更して、このユニットのファイル名の変更を反映し、再度コンパイルします。今度はServerMethodsUnit1が条件付けとして使われているTServerMethods1クラスのline 37にエラーが発生します。ここでは、ServerMethodsUnit1をServerMethodsUnitDemoへ変更します。これで、その他の問題なくDataSnap Serverプロジェクトをコンパイルすることができます。

 ServerContainerUnitDemoの実装部は、次のようになります。

implementation
uses
    Windows, ServerMethodsUnitDemo;
    {$R *.dfm}
procedure TServerContainer1.DSServerClass1GetClass(
    DSServerClass: TDSServerClass; var PersistentClass: TPersistentClass);
begin
    PersistentClass := ServerMethodsUnitDemo.TServerMethods1;
end;
end.

 以下、冒頭の目次紹介にもありましたように、さまざまな用途での具体的な解説記事が約60ページにわたって続きます。このBob Swart氏による『Delphi 2010 DataSnapの活用ガイド』は、Delphiユーザーの必読資料となるでしょう。

 資料全体は、エンバカデロ・テクノロジーズ社のWebページよりダウンロードしてください。どなたでも、無償でこの有益なホワイトペーパーをダウンロードすることが可能です。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
EDN CodeZine出張所連載記事一覧

もっと読む

この記事の著者

EDN編集部(イーディーエヌ編集部)

エンバカデロ・デベロッパーネットワーク(EDN)は、ソフトウェア開発者とデータベース技術者のための技術情報サイトです。Delphi、C++Builderをはじめとする開発ツールやER/Studioなどのデータベースツールに関連する技術記事、ビデオなどを提供しています。EDN編集部は、EDN記事と連携...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4741 2012/06/13 13:55

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング