Drools - 为TypeDeclaration

时间:2016-08-06 16:34:11

标签: java android drools

我基于this tutorial使用Drools和Java创建了一个简单的项目。它工作得很好,所以我把它调整到了我想做的事情。我的DRL文件使用mvel dialect(而不是Java方言),初始化发生在DRL文件中的规则“initial”中。您可以看到此项目(源代码以及库和DRL文件)here。我的DRL文件看起来更像是以下内容:

package omd
dialect "mvel"
declare ocenaKwalifikacji
    value : Double
end
declare ocenaKandydata
    value : Double
end
declare ocenaTestow
    value : Double
end
declare ocenaRozmowy
    value : Double
end

rule "ocenakandydata/1 "
when
$ocenaRozmowy : ocenaRozmowy(value==5.0000)
$ocenaKwalifikacji : ocenaKwalifikacji(value==5.0000)
$ocenaTestow : ocenaTestow(value==5.0000)
then
  insert(new ocenaKandydata (5.0000))
  System.out.println("ocenaKandydata setting to 5.0000)");
end
rule "ocenakandydata/2 "
when
$ocenaRozmowy : ocenaRozmowy(value==5.0000)
$ocenaKwalifikacji : ocenaKwalifikacji(value==4.0000)
$ocenaTestow : ocenaTestow(value==5.0000)
then
  insert(new ocenaKandydata (5.0000))
  System.out.println("ocenaKandydata setting to 5.0000)");
end

...

rule "ocenakandydata/64 "
when
$ocenaRozmowy : ocenaRozmowy(value==2.0000)
$ocenaKwalifikacji : ocenaKwalifikacji(value==2.0000)
$ocenaTestow : ocenaTestow(value==2.0000)
then
  insert(new ocenaKandydata (2.0000))
  System.out.println("ocenaKandydata setting to 2.0000)");
end

rule "initial"
when
then
/*DATA*/
insert(new ocenaKwalifikacji(5.0));
    insert(new ocenaRozmowy(2.0));
    insert(new ocenaTestow(2.0));
end

一切正常,但第一行中的包必须是omd,尽管所有类都在com.sample包中。当我将包名更改为com.sample时,出现以下错误:

Error creating field accessors for TypeDeclaration 'ocenaKandydata' for type 'ocenaKandydata'.

现在有了很多乐趣......

我为Android创建了类似的项目。我使用了相同的代码,但这些库来自another example(以前的库确实将类放在java。*或javax。*包中,这在Android编程时是不允许的)。您可以看到此项目here。我将psc-zatrudnienie-ocena_kandydata.drl文件放在/storage/emulated/0/drools/psc-zatrudnienie-ocena_kandydata.drl下的智能手机存储空间中。当DRL文件中的包为pl.me.drools2tp时(与Android应用中的所有类相同),我会收到以下错误(类似于上面的错误):

Error creating field accessors for TypeDeclaration 'ocenaKwalifikacji' for type 'ocenaKwalifikacji'
Error creating field accessors for TypeDeclaration 'ocenaKandydata' for type 'ocenaKandydata'
Error creating field accessors for TypeDeclaration 'ocenaTestow' for type 'ocenaTestow'
Error creating field accessors for TypeDeclaration 'ocenaRozmowy' for type 'ocenaRozmowy'

当我将DRL文件中的包名更改为其他文件时,错误如下:

Class 'ocenaKwalifikacji' not found for type declaration of 'ocenaKwalifikacji'
Class 'ocenaKandydata' not found for type declaration of 'ocenaKandydata'
Class 'ocenaTestow' not found for type declaration of 'ocenaTestow'
Class 'ocenaRozmowy' not found for type declaration of 'ocenaRozmowy'

有人可以给我一些建议吗?究竟“TypeDeclaration的字段访问器”是什么意思?在DRL文件的declare部分中提到的所有类也在Java中定义,具有value字段以及getter和setter。 dekstop版本使用Drools 5.3.0(来自http://download.jboss.org/drools/release/5.3.0.Final/的大量JAR文件就像TutorialsPoint网站上所说的那样)。还有一个与我有关的问题:Integration of Drools (Expert System) with Android Projects

我将非常感谢一些帮助,提示或示例。

祝你好运, 彼得。

BTW我使用IntelliJ和Android Studio。

1 个答案:

答案 0 :(得分:0)

不要使用com.sample中的Java类和同一个包中的DRL文件进行编译,声明语句与Java类相矛盾。

根据您的问题,我假设您在DRL中声明的类具有相同的重复,或者与某些Java代码相加。

简单地省略所有声明语句并坚持使用Java类保留声明并将Java类移动到另一个包中。

BTW:让你的班级字段保密。