0

我有一个 Drools Expert KnowledgeAgent 的简单用例。我正在使用 Drools 5.3.0.Final,我的规则已经在 Guvnor 5.3.0.Final 中编译。

我的变更集 xml 文件如下所示:

   <add>
       <resource type="PKG" source="http://ssmdeoasd01.susalud.com:7777/drools-guvnor/org.drools.guvnor.Guvnor/package/co.com.sura.seguros.adultomayor.consultas/LATEST"/>
   </add>

Tha PKG 包含来自单个简单 DTABLE 的规则。

当我更改 DTABLE 并将其上传到 Guvnor(当应用程序仍在运行时)时,Drools Expert 确实识别出更改,但不应用它。控制台如下所示:

Compilando reglas ...
Reglas compiladas ...
Tiempo de compilacion de reglas: 0 ms
Obteniendo manager ...
Manager obtenido ...
Obteniendo sesión de conocimiento ...
listKnowledgePackages.size(): 1
Sesión de conocimiento obtenida ... 
3 Padre
2 Hermanos
1 Conyuge
[2013-01-16 15:54:17,670:debug] ResourceChangeScanner attempt to scan 1 resources
[2013-01-16 15:54:17,684:debug] ResourceChangeScanner modified resource=[UrlResource path='http://ssmdeoasd01.susalud.com:7777/drools-guvnor/org.drools.guvnor.Guvnor/package/co.com.sura.seguros.adultomayor.consultas/LATEST'] : 1358369287000 : 1358369637000
[2013-01-16 15:54:17,684:debug] ResourceChangeNotification received ChangeSet notification
[2013-01-16 15:54:17,684:debug] ResourceChangeScanner thread is waiting for 60 seconds.
[2013-01-16 15:54:17,684:debug] ResourceChangeNotification processing ChangeSet
[2013-01-16 15:54:17,684:debug] ResourceChangeNotification ChangeSet modified resource=[UrlResource path='http://ssmdeoasd01.susalud.com:7777/drools-guvnor/org.drools.guvnor.Guvnor/package/co.com.sura.seguros.adultomayor.consultas/LATEST'] for listener=org.drools.agent.impl.KnowledgeAgentImpl@10655dd
[2013-01-16 15:54:17,686:debug] ResourceChangeNotification thread is waiting for queue update
Compilando reglas ...
Reglas compiladas ...
Tiempo de compilacion de reglas: 0 ms
Obteniendo manager ...
Manager obtenido ...
Obteniendo sesión de conocimiento ...
listKnowledgePackages.size(): 1
Sesión de conocimiento obtenida ... 
3 Padre
2 Hermanos
1 Conyuge

即使 KnowledgeAgent 识别出更改,规则仍保持编译不变,结果中不会反映任何更改。

我没有针对 KnowledgeAgent 的特定配置,也没有特定的扩展。我使用了默认侦听器等。

为什么会这样?

4

1 回答 1

0

我犯了一个错误。

我正在使用现有的知识库构建代理。然后,当代理被实例化时,我从该代理获取基础并保持对该基础的引用,以便始终从该基础获取会话。我认为如果代理中的基础发生了变化,那么我的基础(从代理获得)也会改变。

然后,当 Guvnor 中的规则发生变化时,代理确实完成了它的工作并重新创建了它的知识库,但由于我总是引用代理实例化后立即获得的基础并从旧知识库获取会话,所以执行的规则是那些在旧基地的。

引用现在可以了,规则的更改反映在执行中:)

于 2013-01-17T00:48:44.327 回答