Drools 6.6.0 を使用しています。これらは、pom.xml ファイル内の drools サポートの依存関係です。
<dependency>
<groupId>org.mvel</groupId>
<artifactId>mvel2</artifactId>
<version>2.1.8.Final</version>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr-runtime</artifactId>
<version>3.3</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt</groupId>
<artifactId>core</artifactId>
<version>3.4.2.v_883_R34x</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>knowledge-api</artifactId>
<version>6.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-jsr94</artifactId>
<version>6.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-decisiontables</artifactId>
<version>6.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>6.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>6.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>2.5.16</version>
</dependency>
私は drools オブジェクトに渡しています。これを検証するには、サブクラスの属性にアクセスする必要があります。JBoss のチュートリアルによると、次の方法でベース オブジェクトをサブタイプにキャストできるはずです。
Person( name=="mark", address#LongAddress.( country == "uk" ) )
Person( name=="mark", address#LongAddress.country == "uk" )
Person( name=="mark", address isa LongAddress, address.country == "uk" )
しかし、私の drl ファイルはオペレーター # をキャスティングオペレーターとして認識せず (実際にはコメントを書きたいと考えています)、認識されません。
最初は drools バージョン 5 と PackageBuilder を使用していました。src/main/resources/META-INF フォルダー内に drl ファイルを配置し、ファイルを読み取ることができました。現在、私は drools バージョン 6 を使用していますが、まだ drools 内でオブジェクトをキャストできず、ナレッジ ビルダーは同じ場所にある drl ファイルを認識しません。
これは、drl ファイルを読み取るための私のコードです。
private static String DRL_FILE = "/META-INF/validationrules.drl";
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newFileResource(DRL_FILE), ResourceType.DRL);
if( kbuilder.hasErrors() )
{
System.out.println( kbuilder.getErrors() );
return;
}
Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.insert(message);
正しい drools 依存関係を使用していますか? 実際に drools はルール内でのキャストをサポートしていますか? drl ファイルはどこに配置すればよいですか? Java環境としてIntelliJを使用しています。