13.2. PMML レガシー呼び出しの Java アプリケーションへの直接組み込み
KIE コンテナーは、呼び出しプログラムにナレッジアセットを直接組み込む場合や、KJAR 用 Maven 依存関係を使用して物理的にプルする場合は、ローカルとみなされます。コードのバージョンと、PMML 定義のバージョンとの間に密接な関係がある場合は、ナレッジアセットをプロジェクトに直接組み込みます。意思決定への変更は、アプリケーションを更新して再デプロイしないと有効になりません。このアプローチに対する利点は、適切なオペレーションがランタイムへの外部の依存関係に依存していないことですが、ロックされた環境の場合は制限になる可能性があります。
Maven の依存関係を使用すると、システムプロパティーを使用して、更新を定期的にスキャンして自動的に更新するなど、特定バージョンの意思決定が動的に変更するため、柔軟性が高まります。これにより、外部の依存関係がサービスのデプロイ時間に影響を及ぼしますが、意思決定はローカルで実行されるため、ランタイム時に利用可能な外部サービスに対する信頼が低くなります。
前提条件
- 実行する PMML モデルを含む KJAR が作成されている。プロジェクトのパッケージングの詳細は、Red Hat Decision Manager プロジェクトのパッケージ化およびデプロイ を参照してください。
手順
クライアントアプリケーションで、Java プロジェクトの関連クラスパスに以下の依存関係を追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <version>は、プロジェクトで現在使用する Red Hat Decision Manager の Maven アーティファクトバージョンです (例: 7.67.0.Final-redhat-00024)。注記個別の依存関係に対して Red Hat Decision Manager
<version>を指定するのではなく、Red Hat Business Automation 部品表 (BOM) の依存関係をプロジェクトのpom.xmlファイルに追加することを検討してください。Red Hat Business Automation BOM は、Red Hat Decision Manager と Red Hat Process Automation Manager の両方に適用されます。BOM ファイルを追加すると、提供される Maven リポジトリーから、推移的依存関係の適切なバージョンがプロジェクトに含められます。BOM 依存関係の例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Business Automation BOM の詳細情報は、What is the mapping between RHDM product and maven library version? を参照してください。
重要レガシー実装を使用するには、
kie-pmml-implementationシステムプロパティーがlegacyとして設定されていることを確認します。classpathまたはReleaseIdから KIE コンテナーを作成します。KieServices kieServices = KieServices.Factory.get(); ReleaseId releaseId = kieServices.newReleaseId( "org.acme", "my-kjar", "1.0.0" ); KieContainer kieContainer = kieServices.newKieContainer( releaseId );
KieServices kieServices = KieServices.Factory.get(); ReleaseId releaseId = kieServices.newReleaseId( "org.acme", "my-kjar", "1.0.0" ); KieContainer kieContainer = kieServices.newKieContainer( releaseId );Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、以下のオプションを使用します。
KieServices kieServices = KieServices.Factory.get(); KieContainer kieContainer = kieServices.getKieClasspathContainer();
KieServices kieServices = KieServices.Factory.get(); KieContainer kieContainer = kieServices.getKieClasspathContainer();Copy to Clipboard Copied! Toggle word wrap Toggle overflow PMMLRequestDataクラスのインスタンスを作成し、PMML モデルをデータセットに適用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow PMML4Resultクラスのインスタンスを作成します。このクラスでは、入力データに PMML ベースルールを適用した結果の出力情報を保持します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通常の getter メソッドに加え、
PMML4Resultクラスも、結果となる変数の値を直接取得する以下の方法をサポートします。public <T> Optional<T> getResultValue(String objName, String objField, Class<T> clazz, Object...params) public Object getResultValue(String objName, String objField, Object...params)
public <T> Optional<T> getResultValue(String objName, String objField, Class<T> clazz, Object...params) public Object getResultValue(String objName, String objField, Object...params)Copy to Clipboard Copied! Toggle word wrap Toggle overflow ParameterInfoクラスのインスタンスを作成します。このクラスは、PMMLRequestDataクラスの一部として使用する、基本的なデータタイプオブジェクトのラッパーとして機能します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 先ほど作成した対象の PMML クラスインスタンスをもとに PMML モデルを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルールは
RuleUnitExecutorクラスにより実行されます。RuleUnitExecutorクラスは KIE セッションを作成し、必要なDataSourceオブジェクトをこれらのセッションに追加してから、run()メソッドへのパラメーターとして渡されるRuleUnitをもとに、ルールを実行します。calculatePossiblePackageNamesとgetStartingRuleUnitメソッドは、run()メソッドに渡されるRuleUnitクラスの完全修飾名を決定します。
PMML モデル実行をスムーズに行うため、Red Hat Decision Manager でサポートされている PMML4ExecutionHelper クラスも使用できます。PMML ヘルパークラスに関する詳細は、「PMML 実行ヘルパークラス」 を参照してください。
13.2.1. PMML 実行ヘルパークラス リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Decision Manager には、PMML モデル実行に必要な PMMLRequestData クラスの作成や RuleUnitExecutor クラスを使用したルールの実行をサポートする PMML4ExecutionHelper クラスがあります。
以下では、比較の目的で PMML4ExecutionHelper クラスのある場合とない場合の PMML モデル実行の例を紹介しています。
PMML4ExecutionHelper の使用なしの PMML モデル実行例
PMML4ExecutionHelper を使用した PMML モデル実行例
PMML4ExecutionHelper を使用する場合は、一般的な PMML モデル実行で行うように、考えられる名前または RuleUnit クラスを指定する必要はありません。
PMML4ExecutionHelper クラスを構築するには、PMML4ExecutionHelperFactory クラスを使用して、PMML4ExecutionHelper の取得方法を決定します。
以下は、PMML4ExecutionHelper を構築するのに利用可能な PMML4ExecutionHelperFactory クラスメソッドです。
- KIE ベースにある PMML アセット向けの PMML4ExecutionHelperFactory メソッド
PMML アセットがすでにコンパイルされており、既存の KIE ベースで使用されている場合には、これらのメソッドを使用します。
public static PMML4ExecutionHelper getExecutionHelper(String modelName, KieBase kbase) public static PMML4ExecutionHelper getExecutionHelper(String modelName, KieBase kbase, boolean includeMiningDataSources)
public static PMML4ExecutionHelper getExecutionHelper(String modelName, KieBase kbase) public static PMML4ExecutionHelper getExecutionHelper(String modelName, KieBase kbase, boolean includeMiningDataSources)Copy to Clipboard Copied! Toggle word wrap Toggle overflow - プロジェクトクラスパスにある PMML アセット向けの PMML4ExecutionHelperFactory メソッド
PMML アセットがプロジェクトクラスパスにある場合にこれらのメソッドを使用します。
classPathの引数は、PMML ファイルのプロジェクトクラスパスの場所を指します。public static PMML4ExecutionHelper getExecutionHelper(String modelName, String classPath, KieBaseConfiguration kieBaseConf) public static PMML4ExecutionHelper getExecutionHelper(String modelName,String classPath, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources)
public static PMML4ExecutionHelper getExecutionHelper(String modelName, String classPath, KieBaseConfiguration kieBaseConf) public static PMML4ExecutionHelper getExecutionHelper(String modelName,String classPath, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources)Copy to Clipboard Copied! Toggle word wrap Toggle overflow - バイトアレイ形式の PMML アセット向けの PMML4ExecutionHelperFactory メソッド
PMML アセットがバイトアレイ形式の場合にこれらのメソッドを使用します。
public static PMML4ExecutionHelper getExecutionHelper(String modelName, byte[] content, KieBaseConfiguration kieBaseConf) public static PMML4ExecutionHelper getExecutionHelper(String modelName, byte[] content, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources)
public static PMML4ExecutionHelper getExecutionHelper(String modelName, byte[] content, KieBaseConfiguration kieBaseConf) public static PMML4ExecutionHelper getExecutionHelper(String modelName, byte[] content, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Resourceにある PMML アセット向けの PMML4ExecutionHelperFactory メソッドPMML アセットが
org.kie.api.io.Resourceオブジェクトの形式の場合に、これらのメソッドを使用します。public static PMML4ExecutionHelper getExecutionHelper(String modelName, Resource resource, KieBaseConfiguration kieBaseConf) public static PMML4ExecutionHelper getExecutionHelper(String modelName, Resource resource, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources)
public static PMML4ExecutionHelper getExecutionHelper(String modelName, Resource resource, KieBaseConfiguration kieBaseConf) public static PMML4ExecutionHelper getExecutionHelper(String modelName, Resource resource, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
クラスパス、バイトアレイ、リソース PMML4ExecutionHelperFactory メソッドは、生成されたルールおよび Java クラスの KIE コンテナーを作成します。このコンテナーは、RuleUnitExecutor が使用する KIE ベースのソースとして使用します。ただし、このコンテナーには永続性はありません。PMML アセットの PMML4ExecutionHelperFactory メソッドが KIE ベースにすでにあるには、この方法では KIE コンテナーは作成されません。