在某些场合,Drools规则的执行过程中有时不可避免要和外部的类发生交互,例如从外部读取数据或者触发外部的事件。绝大多数应用中Spring会承担起Dependency Inject容器的功能。要如何把一个Spring中的Bean注入到规则Drools的规则引擎中呢?下面这段代码是通过以Drools规则全局变量的形式把Spring bean注入到KnowledgeSession中,然后再Drools的规则文件中加以调用。

这段Drl规则文件申明并引用了global变量

package com.acme.app.rules
import com.acme.app.form.ApplicationForm
import com.acme.app.model.Applicant
import com.acme.app.validation.Errors
import com.acme.app.dao.ApplicantDao
global ApplicantDao applicantDao
rule "Check applicant age"
when
    $a : ApplicationForm()
    $errors : Errors()
    $applicant:Applicant( age < 18 ) from applicantDao.findApplicant($a.getApplicantId())
then
    $errors.addError( $a, "applicantId", "Applicant age < 18" );
end

下面这段java代码是在初始化KnowledgeSession的过程中,把Spring中的Bean设置成global变量

StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 ksession.setGlobal("applicantDao", applicantDao);

Spring中配置bean

<bean id="applicantDao" class="com.acme.app.dao.impl.ApplicantDaoImpl"></bean>
</beans>

相关文章:

  • 2022-01-04
  • 2022-12-23
  • 2021-05-31
  • 2021-06-11
  • 2022-12-23
  • 2021-08-10
  • 2021-07-18
猜你喜欢
  • 2021-08-19
  • 2021-12-02
  • 2022-12-23
  • 2021-12-20
  • 2021-07-01
  • 2022-12-23
  • 2021-08-20
相关资源
相似解决方案