はじめに
前回は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”をクリックします。
そうすると、箱にフォーカスが当たり、右側のパネルにCheckDrivingBehaviorについての設定項目が表示されます。ここで、いくつか重要なものを説明します。
まず、ターゲットと書かれた項目に”CheckDriveOperation”と指定しています。これは、この<call>がCheckDriveOperation(ビジネス・オペレーション)を呼び出すものであることを指示しています。このビジネス・オペレーションの実体は、前回の連載で定義したものです。
その下のリクエストと書かれた項目は、呼び出し時にビジネス・オペレーションへ送信するリクエスト・メッセージについて設定します。「要求メッセージ・クラス」にDriveDemo.Request.CheckDriveRequestを指定しています。このクラスも、前回の連載で定義したものです。
さらにその下には、要求アクション設定、そして「リクエスト・ビルダ」ボタンがあります。これらは、ビジネス・オペレーションを呼び出すときに送信するリクエスト・メッセージをどのように生成するかを定義するものです。「リクエスト・ビルダ」ボタンを押すと、次のような画面が表示されます。
ご覧のとおり、前回の連載で説明したデータ変換と同じような画面は表示されます。この画面で、ビジネス・プロセスが受け取ったリクエスト・メッセージ(左側)からビジネス・オペレーションへ送信するリクエスト・メッセージ(右側)への変換を定義しています。