Drools ルールを動的に管理するために KieFileSystem を使用しています。新しいルールがある場合、KieFileSystem を使用して KieServices に追加しますが、ルールを追加するのではなく上書きしています。別のルールを挿入するとすぐに、以前のルールで作成した宣言がなくなります。
- このテストIncrementalCompilationTest.javaの後にコードをモデル化しました
- 簡単な例KieFileSystemExample.java
- Drools は4.2.2.4 を参照します。プログラムによる KieModule の定義
これらのルールを追加する方法がなければなりませんか、それとも変更する方法はありませんか? 私が探している効果は、AddRemoveRulesTest.javaで特定された手法を使用して実現できます。
KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
builder.add( ResourceFactory.newReaderResource( new StringReader( ruleBuilder.getRule() ) ), ResourceType.DRL);
if(builder.hasErrors()){
_log.error( builder.getErrors().toString() );
return;
}
//This is where the magic happens. How equivalent with versioned deployable artifacts?
base.addKnowledgePackages(builder.getKnowledgePackages());
IncrementalCompilationTest を正しく実行している場合、AddRemoveRuleTest の方法で、既存のルールを取得し、新しいルールを使用して新しい jar に追加する方法を見つける必要があるように思われます。既存のルールを取得するためにデータベースに戻ることは避けたいと思います。どのように?
このより扱いにくいが、maven に準拠した方法で作業を進めている場合、セッションにルールを動的に追加するためのより良い方法を見つける必要がありますか? 私が知る限り、バージョン管理された Kie アーティファクトの追加を Maven プラクティスとして使用しており、AddRemoveRulesTest メソッドはそのプラクティスを使用していません。drools-6-add-rules-to-a-running-kiesession を参照してください