1
我正在使用drools引擎構建警報系統。當條件滿足時,我們需要執行Spring Framework框架中對規則(RHS)操作實例化的@服務的方法。如何在Drools規則中使用Spring服務?
通過Spring框架創建的Drools規則的動作(RHS)將使用什麼方法來獲取@service實例?
我按照以下指示:
- 使用表單導入功能(Rule1.drl)。此解決方案不起作用,因爲該類在drools中實例化並需要執行靜態方法。
- 使用全局會話變量(Rule2.drl)。此解決方案在「運行時」引發異常,表明它不是同一類類型。
有關如何使用它的任何想法?
由於
文件:Rule1.drl
package com.mycompany.alerts.Alert;
import function com.mycompany.alerts.service.SecurityService.notifyAlert;
rule "Activate Alert Type"
salience 9000
when
$alert: Alert(type == "TYPE1")
then
System.out.println("Running action:" + drools.getRule().getName());
$alert.setActive(Boolean.TRUE);
notifyAlert($alert.getStatus(),$alert.getSmsNumber());
System.out.println("End action:" + drools.getRule().getName());
end
文件:Rule2.drl
package com.mycompany.alerts.Alert;
global com.mycompany.alerts.service.SecurityService securityService;
rule "Activate Alert Type 2"
salience 9000
when
$alert: Alert(type == "TYPE2")
then
System.out.println("Running action:" + drools.getRule().getName());
$alert.setActive(Boolean.TRUE);
securityService.notifyAlert($alert.getStatus(),$alert.getSmsNumber());
System.out.println("End action:" + drools.getRule().getName());
end
文件:SecurityService.java
package com.mycompany.alerts.service;
import com.mycompany.alerts.service.UserRepository;
@Service
@Transactional
public class SecurityService {
private final Logger log = LoggerFactory.getLogger(SecurityService.class);
private final UserRepository userRepository;
public SecurityService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void notifyAlert(String status, String sms) {
System.out.println("Alert notify with:" + status + " sms:" + sms);
}
}