No.29 アプリケーションサーバを使わないCortion ディシジョンサービスの実行手順:前編
2018.10.17 Progress Corticon
本エントリーは株式会社アシスト様が寄稿したエントリー(https://www.ashisuto.co.jp/product/category/brms/progress_corticon/column/detail/brmstech29.html)を転載したものとなります。
|
はじめに
これまでCorticon の機能や考え方などに関連するコラムを、ときにサンプルコードも交えながら掲載してまいりました。毎回楽しみにしているという声を頂戴し、大変嬉しい限りです。
さて、過去にご紹介したコラムの中で、「No.5 Corticon の呼び出し方と処理速度について(大量データ処理インプロセス編) 【前編】」(2016年9月14日) について、手順を一つずつ教えて欲しいというご意見を頂いたので、今回は、このインプロセスでの実行方法について前編/中編/後編の3部構成でご紹介します。
「No.5」はタイトルからも分かるように、大量データを処理する場合の Corticon Server 実行方式の 1つとして「インプロセス」があること、また、この方法を使用すると高パフォーマンスであることを、サンプルコードと実測値で説明しています。もし、「No.5 」を読む機会が無かった場合には、是非この機会にご一読ください。
じつは、「No.5 」は geek な氏が執筆しているため、分かる人には分かる手順となっています。本コラムでは、Eclipse 環境でJava クライアントからインプロセスで Corticon Server にディシジョンサービスをデプロイしアクセスする方法について、また、その後 Java クライアントをコンパイルするところまでの手順を、すこぉぉぉぉしだけ細かく説明します。「No.5 」の執筆者と同じく geek な方には本コラムは少々退屈かもしれませんがご容赦いただけると幸いです。
*Java クライアントアプリケーションの詳細についてはコラム「No.5」とは若干異なりますが、差異の説明は割愛します。
環境:Corticon 5.6.1.26
本コラムでは、Corticon Studio と、Corticon Studio インストーラに同梱の Eclipse 環境を使用して、Corticonをご存じの方にはお馴染み(はず)のサンプルのチュートリアル「tutorial」を、ディシジョンサービス「Cargo」としてインプロセスでデプロイし実行します。
この実行方式では、インプロセスで実行するためにCorticon Server のコアライブラリが必要です。
インプロセス方式で実行する場合、Tomcat 等のアプリケーションサーバ上で稼働中の Corticon Server とは別モノとして実行します。稼働中の Corticon Serverがある場合は、Corticon Serverを停止して後述のステップを進めていただくと、独立したCorticon Serverであることが分かりやすくなります。
サンプルプロジェクト:Tutorialの準備
1. Corticon Studioを起動します。
2. [ヘルプ] > [サンプル]を選択します
3. サンプル ページで [Tutorial]を選択し、[Open]をクリックします。
|
4. プロジェクトのインポート ウィンドウで[OK]をクリックします。
|
これで、Corticon Studio にサンプルのルールプロジェクト「tutorial」が取り込まれ、開きました。
このサンプルの概要を確認しましょう。
▶ ルール語彙:Cargo.ecore
エンティティ:Aircraft、Cargo、FlightPlan
属性:各エンティティに複数あり。
このサンプルで使用する Cargo エンティティの属性は5つ:
cargo、manifestNumber、needsRefrigeration、weight、volume
▶ ルールシート:Cargo.ers
Cargoエンティティの3つの属性(weight、volume、needsRefrigeration)の値に基づき、
使用するコンテナの種類を判断し、containerという属性に値をセットします。
▶ テストシート:Cargo.ert
Cargo.ersに対して、データを用いてテストします。
▶ ルールフロー:tutorial_example.erf
Cargo.ersを指定しています。
こういったルールを事前にコンパイルし、Javaクライアントアプリケーション内で起動した Corticon Serverにデプロイし実行します。なお、今回のサンプルでは、リクエストメッセージとレスポンスメッセージをcsvファイルで受け渡します。
リクエスト(入力)データ:sample.csv |
レスポンス(出力)データ:sample_2.csv |
では、実際の手順をみていきましょう。
1.語彙とマッピングする Java クラスを作成する
パースペクティブを Corticon から Java に切り替える
Corticon Studio 画面右側にあるパースペクティブタブ Java をクリックします。
|
パースペクティブに[Java]が表示されていない場合には、以下の手順で表示します。
[ウィンドウ] > [パースペクティブを開く] > [その他]
|
Java を選択し、[OK]をクリックします。
|
Java プロジェクトを作成する
今回のインプロセスのサンプルで作成するソースを格納する Java プロジェクトを作成します。
1. [ファイル] > [新規] > [Java プロジェクト]を選択する。
2. プロジェクト名に「InProcessApp」を入力する。
3. 選択肢は全てデフォルトのままとし、[終了]ボタンをクリックする。
語彙のクラスに get メソッドとset メソッドを作成する
呼び出すルールで使用する語彙の各エンティティ対してクラスを作成します。本コラムでは、「Cargo」エンティティのみを使用しているため、ここでは「Cargo」用の Java クラスのみを作成します。
4. パッケージ・エクスプローラで InProcessApp フォルダを展開し、[src]上で右クリックし、[新規] > [パッケージ]を選択する。パッケージ名に「cargoLibrary」を入力する。
. [cargoLibrary]パッケージ上で右クリックし、[新規] > [クラス]を選択する。
パッケージ名は「Cargo」と入力する。
(*このクラス名とエンティティ名は大文字小文字まで含めて正確に一致させる。)
Java エディタ画面が開き、ソースを入力する準備ができました。
6. エンティティの属性と一致する変数を定義し、それに併せてgetメソッドsetメソッドを
作成します。(*変数名と属性名は大文字小文字まで含めて正確に一致させること。)
以下となるように入力してください。
package cargoLibrary;
public class Cargo {
public String container;
public String manifestNumber;
public Boolean needsRefrigeration;
public long volume;
public long weight;
public String getContainer() {
return container;
}
public void setContainer(String container) {
this.container = container;
}
public String getManifestNumber() {
return manifestNumber;
}
public void setManifestNumber(String manifestNumber) {
this.manifestNumber = manifestNumber;
}
public Boolean getNeedsRefrigeration() {
return needsRefrigeration;
}
public void setNeedsRefrigeration(Boolean needsRefrigeration) {
this.needsRefrigeration = needsRefrigeration;
}
public long getVolume() {
return volume;
}
public void setVolume(long volume) {
this.volume = volume;
}
public long getWeight() {
return weight;
}
public void setWeight(long weight) {
this.weight = weight;
}
}
7. ファイルを保存します。
8. パッケージ・エクスプローラで CargoLibrary を選択します。
9. [ファイル] > [エクスポート] > [Java] > [JARファイル]を選択します。
10. cargoLibrary と関連するファイルを選択します。
11. 保存場所を選択し、JAR ファイル名に「Cargo」を入力します。
2.Corticon ルールプロジェクトに Cargo.jar をインポートする
作成したCargo.jar ファイルを 語彙エンティティにマッピングします。
また、Cargo.jarをルールプロジェクトの Corticon Extensions に設定します。
パースペクティブを Java から Corticon に切り替える
Corticon Studio の画面右上のパースペクティブタブで、Corticon Designer タブをクリックして、切り替えます。
|
語彙の Java クラスをインポートする
1. プロジェクト・エクスプローラで、[Tutorial] > [Tutorial-Done] を選択し、Cargo.ecore を開きます。
2. [語彙] > [Javaオブジェクトメッセージング] > [Java クラスメタデータのインポート]をクリックします。
3. Javaクラスメタデータのインポート 画面で、先ほど作成した Cargo.jar を選択し、[次へ]をクリックします。
|
4. Javaパッケージ「cargoLibrary」を選択します。
|
5. [終了]をクリックします。
6. 語彙ファイルを保存します。
インポートした語彙の Java クラスのマッピングを確認する
語彙にインポートしてマッピングした Java クラスと変数を確認します。Cargo エンティティをクリックしてください。語彙の詳細情報が表示されていない場合には、[語彙] > [語彙詳細の表示]を選択します。
Cargo エンティティのプロパティ Java パッケージと Java クラス名をご覧ください。Java パッケージが、語彙クラスを作成するときに指定したパッケージ名と一致しています。Java クラス名はエンティティ名と同じです。
|
属性ごとに、Java オブジェクトGetメソッド、JavaオブジェクトSetメソッドがあります。manifestNumber 属性をクリックしてみましょう。Java クラスメタデータをインポートしたので、Get メソッドと Set メソッドが関連付けられていることがわかります。
|
Corticon プロジェクトに Cargo.jar を追加する
Corticon プロジェクトをプリコンパイル(.eds 化)する前に、プロジェクトに語彙クラスの Java オブジェクト(Cargo.jar)をクラスライブラリに追加します。
1. プロジェクト・エクスプローラ上で Tutorialプロジェクトを選択し、[プロジェクト] > [プロパティ] を選択します。
|
2. プロパティダイアログボックスで Corticon Extensions をクリックし、[追加]ボタンをクリックして、先ほど作成した Cargo.jar を選択し、[OK]をクリックします。
|
3.Corticon のルールプロジェクトをプリコンパイルする
ディシジョンサービスとしてデプロイするために、ルールフローをプリコンパイル(.eds 化)します。
1. プロジェクト・エクスプローラ上で Tutorial プロジェクトを選択し、[プロジェクト] > [デシジョンサービスのパッケージとデプロイ] を選択します。
|
2. デプロイのターゲット 画面で、[後でデプロイするためにパッケージし保存する]を選択し、[次へ]をクリックします。
|
3. ルールフローのパッケージ 画面で、[tutorial_example ]ルールフローを選択し、デシジョンサービス名に「Cargo」を入力します。
|
その他のJarファイル 画面ではデフォルトのまま[終了]ボタンをクリックします。
続きは『中編 』で解説します。
著者紹介
|
株式会社アシスト 情報基盤事業部 製品統括部プログレス推進部 |