CodeZine(コードジン)

特集ページ一覧

IRISのインターオペラビリティ機能を使いこなそう(後編)~OpenAPIを利用したRESTサーバの構築

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

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

 この連載では、InterSystems IRIS Data Platform(以下IRIS)を使って車載器から発生するデータを扱うIoTアプリケーションの構築方法を紹介しています。これまでの連載をまだご覧いただいていない方は、ぜひこの機会にお試しください。

目次

はじめに

 前回はIRISのインターオペラビリティ機能を紹介しました。今回はその続きを説明し、いよいよアプリケーションを完成させます。

 具体的には、

  • ビジネス・プロセスの作成
  • プロダクション構成

の作成について説明します。

 最後に、OpenAPIで書かれた仕様に基づきRESTサーバをIRISに構築し、REST APIを使ってアクセスする方法についても解説します。

 それでは開発を始めましょう。今回もVisual Studio Codeを使用して開発を行います。準備として、前回の内容を反映したコンテナを起動しておいてください。そのコンテナがない方は、前々回前回の記事の内容を実施してください。

 今回説明するクラスは、DriveDemoディレクトリのIRIS-MQTT/projects/srcs/iris以下にあります。説明を読みながら適宜利用してください。なお、ソースファイルなど一式をまだダウンロードしていない方は、GitHubからpullしてください。

ビジネス・プロセス

 ビジネス・プロセスとは、他のコンポーネントからメッセージを受け取り、定められた業務フローを実行するコンポーネントです。ESB(Enterprise Service Bus)と呼ばれるアーキテクチャでは、ビジネス・プロセスの定義・自動実行をオーケストレーションと呼びますが、IRISのビジネス・プロセスも同様の機能を提供します。

 /DriveDemo/IRIS-MQTT/projects/srcs/iris/DriveDemo/Processディレクトリに、CheckDriveProcess.clsがあるので、Visual Studio Codeのワークスペースに読み込んでください。

 コードを次に示します。

Class DriveDemo.Process.CheckDriveProcess Extends Ens.BusinessProcessBPL
{
  /// BPL Definition
  XData BPL [ XMLNamespace = "http://www.intersystems.com/bpl" ]
  {
    <process language='objectscript' request='DriveDemo.Request.CheckDriveRequest' response='DriveDemo.Response.CheckDriveResponse' height='2000' width='2000' >
      <context>
        <property name='drivingstatus' type='%String' instantiate='0' >
          <parameters>
            <parameter name='MAXLEN'  value='2500' />
          </parameters>
        </property>
        
      </context>
      <sequence xend='200' yend='700' >
        <call name='CheckDrivingBehavior' target='CheckDriveOperation' async='0' xpos='200' ypos='250' >
          <request type='DriveDemo.Request.CheckDriveRequest' >
            <assign property="callrequest" value="request" action="set" />
          </request>
          <response type='DriveDemo.Response.CheckDriveResponse' >
            <assign property="context.drivingstatus" value="callresponse.MessageText" action="set" />
            <assign property="response" value="callresponse" action="set" />
          </response>
        </call>
        
        <if name='EventHappened?' condition='response.hasEvent = 1' xpos='200' ypos='350' xend='200' yend='600' >
          <true>
            <call name='NotifyEvent' target='MQTTOut' async='1' xpos='335' ypos='500' >
              <request type='Ens.StringContainer' >
                <assign property="callrequest.StringValue" value="response.MessageText" action="set" />
              </request>
              <response type='Ens.Response' />
            </call>
          </true>
        </if>
      </sequence>
    </process>
  }
}

 宣言部のExtends句で Ens.BusinessProcessBPLを継承しています。これは、後ほど説明するBPLエディタで図として表示可能なビジネス・プロセスのスーパークラスです。

 前回紹介したデータ変換と同様、XDataブロックにXML形式でビジネス・プロセスの定義が書かれています。このXMLの形式は、ワークフローを記述する標準であるBPMN(Business Process Model & Notation)などを基にしてInterSystemsが開発したものです。

 通常は、このXMLを直接編集するのではなく、IRIS(Windows版)に付属するIDE(Studio)を使ってビジュアルに編集します。ここでは、管理ポータルを使って、視覚的に表現されたビジネス・プロセスを確認しましょう。上に示したCheckDriveProcess.clsをコンパイルしておいてください。

 次のURLで管理ポータルを立ち上げます。

http://localhost:52003/csp/sys/UtilHome.csp

 そして、[インターオペラビリティ]→[構築]→[ビジネス・プロセス]を選択します。そうすると、次の図のような画面が表示されるので、「開く」ボタンを押し、[DriveDemo]→[Process]→[CheckDriveProcess]を選びます。

ビジネス・プロセスを開く
ビジネス・プロセスを開く

 そうすると、次のようなワークフローが表示されます。

ビジネス・プロセスの全体図
ビジネス・プロセスの全体図

 先ほどのXML形式のビジネス・プロセスが、視覚的に表示されているのが分かります。フローを見てみると、

  • 運転状態のチェック
  • イベントが発生していたら通知

という簡単な流れを表していることが分かります。

 ワークフローの最初の処理である「運転状態のチェック」について詳細を見ていきましょう。この処理は<call>と表示されています。<call>とは、プロダクション中の他のコンポーネント(ビジネス・プロセスまたはビジネス・オペレーション)を呼び出す機能を表しています。

 次の図のように、ワークフローの一番上の箱、“CheckDrivingBehavior”をクリックします。

<call>説明
説明

 そうすると、箱にフォーカスが当たり、右側のパネルにCheckDrivingBehaviorについての設定項目が表示されます。ここで、いくつか重要なものを説明します。

 まず、ターゲットと書かれた項目に”CheckDriveOperation”と指定しています。これは、この<call>がCheckDriveOperation(ビジネス・オペレーション)を呼び出すものであることを指示しています。このビジネス・オペレーションの実体は、前回の連載で定義したものです。

 その下のリクエストと書かれた項目は、呼び出し時にビジネス・オペレーションへ送信するリクエスト・メッセージについて設定します。「要求メッセージ・クラス」にDriveDemo.Request.CheckDriveRequestを指定しています。このクラスも、前回の連載で定義したものです。

 さらにその下には、要求アクション設定、そして「リクエスト・ビルダ」ボタンがあります。これらは、ビジネス・オペレーションを呼び出すときに送信するリクエスト・メッセージをどのように生成するかを定義するものです。「リクエスト・ビルダ」ボタンを押すと、次のような画面が表示されます。

リクエスト・ビルダ
リクエスト・ビルダ

 ご覧のとおり、前回の連載で説明したデータ変換と同じような画面は表示されます。この画面で、ビジネス・プロセスが受け取ったリクエスト・メッセージ(左側)からビジネス・オペレーションへ送信するリクエスト・メッセージ(右側)への変換を定義しています。


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

著者プロフィール

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

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

バックナンバー

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