CodeZine(コードジン)

特集ページ一覧

IRISのインターオペラビリティ機能を使いこなそう(前編)

InterSystems IRISでシンプルに開発するIoTアプリケーション 第5回

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

目次

メッセージクラスの定義

 これまでの連載で、ビジネス・サービスやビジネス・プロセスなどIRISのコンポーネント間で「メッセージが流れる」という説明をしてきました。ここでは、この「メッセージ」というものについて改めて説明し、定義を行っていきます。

メッセージ

 IRISのインターオペラビリティ機能のコンポーネント同士は、メッセージを送受信することで動作します。IRISでは、メッセージは特別な機能を持ったクラスとして定義されます。

 メッセージは、リクエストとレスポンスに分類されます。次の図をご覧ください。

メッセージのトレース画面
メッセージのトレース画面

 赤で囲んだ部分は、CheckDriveProcess(ビジネスプロセス)とCheckDriveOperation(ビジネス・オペレーション)との間でメッセージが送受信されている様子を示しています。CheckDriveProcessは、CheckDriveRequestというリクエストをCheckDriveOperationに送信し、CheckDriveOperationは、CheckDriveResponseというレスポンスを返しています。

 次に示すのは、CheckDriveRequestクラスの定義です。

Class DriveDemo.Request.CheckDriveRequest Extends Ens.Request [ ClassType = persistent, ProcedureBlock ]
{
    Property CarId As %String;
    Property RelativeTm As %Integer;
}

 Extends句でEns.Requestクラスを継承することによって、このクラスがリクエストとして機能することを指定しています(その後の[ ]で囲まれた部分は今回は“おまじない”として理解してください)。

 その後のProperty定義は、通常のクラス定義と同様です。CheckDriveRequestでは、該当する車のID(CarId)と、相対時刻(RelativeTm)がメッセージに含まれるデータとして定義されています。

 次に示すのは、CarUpdateRequestです。

Class DriveDemo.Request.CarUpdateRequest Extends Ens.Request [ ClassType = persistent, ProcedureBlock ]
{
    Property Data As DriveDemo.Data.DriveRecord;
}

 Ens.Requestを継承する点は、先ほどのCheckDriveRequestと同様です。

 プロパティはData一つだけです。As以下で DriveDemo.Data.DriveRecord を指定しています。これは、先ほど定義した DriveDemo.Data.DriveRecordクラスのインスタンスへの参照を、このリクエストに含めることを意味しています。

 今度はレスポンスの例を見てみましょう。CheckDriveResponseの定義です。

Class DriveDemo.Response.CheckDriveResponse Extends Ens.Response [ ClassType = persistent, ProcedureBlock ]
{
    Property hasEvent As %Boolean;
    Property DrivingBehavior As DriveDemo.Data.DrivingBehavior;
    Property MessageText As %String(MAXLEN = 32767);
}

 Ens.Responseクラスを継承することによって、このクラスはレスポンスとして機能します。

 プロパティには、何らかのイベントが発生したかどうかを示すhasEvent、発生したイベントの内容を保持するMessageTextが定義されています。

 DrivingBehaviorプロパティのAs句では、DriveDemo.Data.DrivingBehaviorと指定されています。先ほどのDriveDemo.Data.DriveRecordと違い、ここでは、プロパティに別のクラスのインスタンスを「埋め込む」ことを指定しています。この違いは、Asで指定されているクラスの種類の違いによるものです。

 では、そのDriveDemo.Data.DrivingBehaviorの定義を見てみましょう。

Class DriveDemo.Data.DrivingBehavior Extends ( %SerialObject, %XML.Adaptor )
{
    Property IsOverSpeed As %Boolean;
    Property IsHighEngineRPM As %Boolean;
    Property IsHighXG As %Boolean;
    Property IsHighYG As %Boolean;
}

 これまで紹介したクラスの定義と同様、4つの%Boolean型のプロパティを定義して、どのようなイベントがあったのか(速度超過、エンジン高回転、大きな加速度)を表すようになっています。

 これまで定義したクラスとの重要な違いは、Extends句にあります。このクラスは%SerialObjectを継承しています。

 %SerialObjectは%Persistentと違い、インスタンスをデータベースに保存することはできません。しかし、他のクラスのインスタンスのプロパティに、「シリアル化」して埋め込むことが可能になっています。

 このDrivingBehaviorクラスを例にとると、インスタンスのDrivingBehaviorプロパティに、DrivingBehaviorのインスタンスが埋め込まれることになります。次の図が、そのイメージです。

 今回のアプリケーションでは、他に、DriveDemo.Request.CarRegisterRequestというリクエストを定義しています。

 以上のクラスをコンパイルしてください。


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

著者プロフィール

  • 堀田 稔(インターシステムズジャパン)(ホリタ ミノル)

    SEマネージャー。 1992年大阪大学基礎工学部情報工学科卒。同年日本ディジタルイクイップメント(株)入社。電気通信など様々な業界向けプロジェクトにシステムエンジニアとして携わる。1996年InterSystems Data Platform製品の日本語版開発プロジェクトに従事し、同製品の販売・サ...

バックナンバー

連載:InterSystems IRISでシンプルに開発するIoTアプリケーション
All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5