No.29 アプリケーションサーバを使わないCortion サッカー賭けアプリシジョンサービスの実行手順:中編
2018.10.17 Progress Corticon
本エントリーは株式会社アシスト様が寄稿したエントリー(https://www.ashisuto.サッカー賭けアプリjp/product/category/brms/progress_corticon/column/detail/brmstech29-2.html)を転載したものとなりサッカー賭けアプリ。
|
|
前編 で解説した準備ができましたら、次にJavaクライアントアプリケーションを作成しましょう。
4.Java クライアントアプリケーションを作成する
パースペクティブを Corticon から Java に切り替える
Java パースペクティブに切り替えサッカー賭けアプリ。
|
|
プロジェクトと Java のビルド・パスにライブラリを追加する
インストール済みの Corticon Server 内の JAR ファイルは、インプロセスのサーバ(ルールエンジン)として使用できサッカー賭けアプリ。 必要な JAR ファイルを"参照"する方法もありサッカー賭けアプリが、ここでは、インプロセスサーバが独立して動作することを明確にするために、プロジェクトに追加しサッカー賭けアプリ。
1.以下 7 つの jar ファイルを Corticon Server のフォルダ [CORTICON_HOME]/Server/lib からコピーしサッカー賭けアプリ。
- ant_launcher.jar
- CcConfig.jar
- CcExtensions.jar
- CcI18nBundles.jar
- CcLicense.jar
- CcServer.jar
- CcThirdPartyJars.jar
3.InProcessApp 上で右クリックし、[プロパティ]を選択し、[Javaのビルド・パス]を選択しサッカー賭けアプリ。
4.ライブラリータブを選択し、[JARの追加]をクリックしサッカー賭けアプリ。
|
|
5.Java クラスパスに以下の JAR ファイルを選択しサッカー賭けアプリ。
|
|
6.[OK]ボタンをクリックしサッカー賭けアプリ。
サッカー賭けアプリシジョンサービスをデプロイしアクセスする Java クライアントを作成する
Java クライアントでサッカー賭けアプリシジョンサービスをデプロイしてアクセスするための Corticon API を使ったJava コードを作成します。
1.InProcessApp プロジェクトで [新規] > [パッケージ] を選択しサッカー賭けアプリ。名前に「program」と入力しサッカー賭けアプリ。
2.program パッケージをクリックし、[新規] > [クラス] を選択しサッカー賭けアプリ。名前に「InvokeDS」と入力しサッカー賭けアプリ。
3.InvokeDS.java の編集画面が開きサッカー賭けアプリ。
①クライアントプログラムでは、以下のように、必要なパッケージとクラスをインポートすることから始めサッカー賭けアプリ。
package program;
import com.corticon.eclipse.server.core.CcServerFactory;
import com.corticon.eclipse.server.core.ICcServer;
import com.corticon.service.ccserver.*;
import cargoLibrary.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
②以下の3つの情報を格納する String 型の変数を作成しサッカー賭けアプリ。
- デプロイするサッカー賭けアプリシジョンサービス名
- インプロセスで起動する Corticon Server にデプロイする .eds ファイ名
- CSVファイル名
サッカー賭けアプリシジョンサービス名は、コンパイル時に指定したサッカー賭けアプリシジョンサービス名にします。
ここでは、「Cargo」です。
public class InvokeDS {
private static String dsName = "Cargo";
private static String edsFileName = "C:/Users/user01/Desktop/App/Cargo_V0_16.eds";
private static String csvFileName = "C:/Users/user01/Desktop/App/sample.csv";;
③Cargoエンティティクラスのオブジェクトを作成し、CSVファイルのデータを Cargo オブジェクトに変換しサッカー賭けアプリ。
今回サンプルで想定している入力データのフォーマットは以下のとおりです。
1番目:volume, 2番目:weight
|
|
ルールで処理された結果、3番目の項目としてcontainerの値が入りサッカー賭けアプリ。
④入力 CSV ファイルのデータを、1 件ずつ読み込み、Cargo オブジェクトに格納しサッカー賭けアプリ。
作成したCargoオブジェクトは ArrayList に格納しサッカー賭けアプリ。
public void callDS(){
try {
// CSVファイルのデータをCargoオブジェクトに変換
List<Cargo> cargoList = new ArrayList<>();
List<String> readLines = Files.readAllLines(Paths.get(csvFileName), StandardCharsets.UTF_8);
for (String line: readLines) {
Cargo cargo = new Cargo();
cargo.setVolume(Long.parseLong(line.split(",")[0]));
cargo.setWeight(Long.parseLong(line.split(",")[1]));
cargoList.add(cargo);
}
⑤Javaプログラム内からCorticon Server を起動しサッカー賭けアプリ。
Corticon Serverをインプロセスで起動する場合は、CcServerFactory クラスの getCcServer メソッドを実行しサッカー賭けアプリ。実行した結果、生成された Corticon Server オブジェクトは ICcServer インターフェイスを備えていサッカー賭けアプリ。
// Corticon Serverの起動
ICcServer server = CcServerFactory.getCcServer();
⑥Corticon Server オブジェクト"server" で addDecisionService() メソッドを使用して、サッカー賭けアプリシジョンサービスをデプロイします。
今回は、Corticon Studio でプリコンパイルした「Cargo_v0_16.eds」をデプロイしサッカー賭けアプリ。
サッカー賭けアプリシジョンサービスをデプロイする前に、「if」ステートメントで、サッカー賭けアプリシジョンサービスが既にロード済みかどうかをチェックします。
addDecisionService() メソッドは、最低 3 つのパラメータ(サッカー賭けアプリシジョンサービス名、コンパイル済みEDSファイル名、動的再読み込みを示すブーリアン型(true/false))を渡す必要があります。
// デサッカー賭けアプリのデプロイ
if (server.isDecisionServiceDeployed(dsName)==false) {
server.addDecisionService(dsName, edsFileName , false);
}
⑦サッカー賭けアプリシジョンサービスを実行します。
execute() メソッドは、 2 つのパラメータ(サッカー賭けアプリシジョンサービス名、受け渡しデータオジェクト)を指定します。
Corticon Server にデプロイしたサッカー賭けアプリシジョンサービスのルールに応じて、渡されたデータ"cargoList" が更新されます。
execute() メソッドの戻り値は、ICcRuleMessages 型のオブジェクトで、ルール実行結果のルールメッセージを受け取りサッカー賭けアプリ。
// デサッカー賭けアプリの実行
ICcRuleMessages msgs = server.execute(dsName, cargoList);
⑧ルール実行結果の戻り値を含む Cargo オブジェクトを、CSV ファイルに書き込みサッカー賭けアプリ。
ここでは、入力ファイル名の接尾辞として「_2」を付与していサッカー賭けアプリ。
// 結果のCargoオブジェクトをCSVファイルに書き込み
List<String> writeLines = new ArrayList<>();
for (Cargo cargo: cargoList) {
writeLines.add(cargo.getVolume() + "," + cargo.getWeight() + "," + cargo.getContainer());
}
Files.write(Paths.get(csvFileName.replace(".", "_2.")), writeLines, StandardCharsets.UTF_8);
⑨ルールメッセージを個別のメッセージごとにループし、Cargo オブジェクトとメッセージ内容をコンソールに出力しサッカー賭けアプリ。message オブジェクトの getEntityReference() メソッドを使用すると参照するエンティティのオブジェクトを取得することができサッカー賭けアプリ。
ここでは、Cargo エンティティになるため、Cargo 型変数 "x" に変換していサッカー賭けアプリ。
// ルールメッセージの表示
for (Object msg: msgs.getMessages()) {
ICcRuleMessage m = (ICcRuleMessage) msg;
Cargo x = (Cargo) m.getEntityReference();
System.out.println(" ");
System.out.println("Cargo の volume : "+x.getVolume());
System.out.println("Cargo の weight : "+x.getWeight());
System.out.println("Cargo の container の値 : "+x.getContainer());
System.out.println(m.getSeverity());
System.out.println(m.getText());
}
⑩try ブロックに対する catch ブロックを追加しサッカー賭けアプリ。
} catch(Exception e){
System.out.println(e);
}
}
⑪最後に、Java の main メソッドを書きサッカー賭けアプリ。
ここでは、main メソッドの引数として、csv ファイル名と eds ファイル名を指定できるようにしていサッカー賭けアプリ。
public static void main(String[] args) {
if (args.length > 0) {
csvFileName = args[0];
}
if (args.length > 1) {
edsFileName = args[1];
}
InvokeDS d = new InvokeDS();
d.callDS();
}
サッカー賭けアプリシジョンサービスをデプロイしてアクセスする Java クライアントアプリケーション「program」の全体は次のようになりサッカー賭けアプリ。
package program;
import com.corticon.eclipse.server.core.CcServerFactory;
import com.corticon.eclipse.server.core.ICcServer;
import com.corticon.service.ccserver.*;
import cargoLibrary.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
public class InvokeDS {
private static String dsName = "Cargo";
private static String edsFileName = "C:/Users/user01/Desktop/App/Cargo_V0_16.eds";
private static String csvFileName = "C:/Users/user01/Desktop/App/sample.csv";;
public void callDS(){
try {
// CSVファイルのデータをCargoオブジェクトに変換
List<Cargo> cargoList = new ArrayList<>();
List<String> readLines = Files.readAllLines(Paths.get(csvFileName), StandardCharsets.UTF_8);
for (String line: readLines) {
Cargo cargo = new Cargo();
cargo.setVolume(Long.parseLong(line.split(",")[0]));
cargo.setWeight(Long.parseLong(line.split(",")[1]));
cargoList.add(cargo);
}
// Corticon Serverの起動
ICcServer server = CcServerFactory.getCcServer();
// デサッカー賭けアプリのデプロイ
if (server.isDecisionServiceDeployed(dsName)==false) {
server.addDecisionService(dsName, edsFileName , false);
}
// デサッカー賭けアプリの実行
ICcRuleMessages msgs = server.execute(dsName, cargoList);
// 結果のCargoオブジェクトをCSVファイルに書き込み
List<String> writeLines = new ArrayList<>();
for (Cargo cargo: cargoList) {
writeLines.add(cargo.getVolume() + "," + cargo.getWeight() + "," + cargo.getContainer());
}
Files.write(Paths.get(csvFileName.replace(".", "_2.")), writeLines, StandardCharsets.UTF_8);
// ルールメッセージの表示
for (Object msg: msgs.getMessages()) {
ICcRuleMessage m = (ICcRuleMessage) msg;
Cargo x = (Cargo) m.getEntityReference();
System.out.println(" ");
System.out.println("Cargo の volume : "+x.getVolume());
System.out.println("Cargo の weight : "+x.getWeight());
System.out.println("Cargo の container の値 : "+x.getContainer());
System.out.println(m.getSeverity());
System.out.println(m.getText());
}
} catch(Exception e){
System.out.println(e);
}
}
public static void main(String[] args) {
if (args.length > 0) {
csvFileName = args[0];
}
if (args.length > 1) {
edsFileName = args[1];
}
InvokeDS d = new InvokeDS();
d.callDS();
}
}
4.Java クライアントソースコードを保存しサッカー賭けアプリ。
続きは『後編 』で解説しサッカー賭けアプリ。
著者紹介
|
|
株式会社アシスト 情報基盤事業部 製品統括部プログレス推進部 |



