0

これは、ワークベンチで作成されたjarファイルをアプリケーションコードからロードするコードです

KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.newKieContainer(
ks.newReleaseId("com.myprojects",   "myProject", "LATEST"));
KieScanner kScanner = ks.newKieScanner( kContainer );
kScanner.start( 10000L );
KieSession kSession = kContainer.newKieSession("defaultKieSession");
kSession.insert( fact );

「事実」を挿入するには?データ オブジェクトに x という名前のメンバーが含まれているとします。jar ファイルが動的にロードされるため、コンパイル エラーを発生させずに x を使用するにはどうすればよいですか?

4

2 に答える 2

0

「ファクト」オブジェクトのクラスをプロジェクトのクラスパスに配置する必要があります。Maven を使用している場合は、ビルドされたワークベンチ jar の場所をプロジェクト pom.xml に追加するだけで簡単に実行できます。

例 :

パッケージ org.myorg.mydrools.client;

org.someorg.somepackage.SomeFact をインポートします。

public void loadAndRun() {

  SomeFact fact = new SomeFact();
  fact.x = "some message";

  KieServices ks = KieServices.Factory.get();
  KieContainer kContainer = ks.newKieContainer(
  ks.newReleaseId("com.myprojects",   "myProject", "LATEST"));
  KieScanner kScanner = ks.newKieScanner( kContainer );
  kScanner.start( 10000L );
  KieSession kSession = kContainer.newKieSession("defaultKieSession");

  kSession.insert( fact );
}
于 2016-11-09T16:46:21.623 に答える
0

適切なアプローチは、常にモデル クラスをルールから別の jar に分離することです。このように、kjar (ルールを含む jar) はモデル jar に依存し、クライアント コード (KIE セッションを作成するもの) もモデル jar に依存します。

クライアント コードは、ルールを「認識する」前にモデルを「認識する」ようになったため、コンパイル エラーなしで使用できます。

それが役に立てば幸い、

于 2016-01-14T10:03:54.737 に答える