spring - 从 drools session 中删除对象并在 spring 中重用相同的 session

标签 spring drools

我在服务类中使用 Autowiring 的 StatefulKnowledgeSession。

@Service("vbOrderService")
public class VbOrderService {
    
    @Autowired
    private VbOrderDao vbOrderDao ;
    
    @Autowired
    StatefulKnowledgeSession vbDiscSession;
    
    public CpSellerDetails getStep1Data(Integer grpSellerId,Integer catalogueId) throws DataNotFoundException{
        return vbOrderDao.getStep1Data(grpSellerId,null,catalogueId);
    }
    /*public CpSellerDetails getStep1Data(Integer cp_id,Integer orderno) throws DataNotFoundException{
        return vbOrderDao.getStep1Data(cp_id,orderno);
    }*/
    public void getStep2Data(Integer cp_id,VbCpInfoBean info) throws DataNotFoundException{
        vbOrderDao.getStep2Data(cp_id,info);
    }
    public Integer updateStep2Data(VbCpInfoBean info,Integer cp_id) throws UpdateFailedException{
        return vbOrderDao.updateStep2Data(info,cp_id);
    }
    
    public void getOrderStep3(CpSellerDetails sellerDetails) throws DataNotFoundException {
         vbOrderDao.getOrderStep3(sellerDetails);
          fireRules(sellerDetails);
    }
    public void orderStep4(LoginBean user,CpSellerDetails sellerDetails) throws UpdateFailedException {
         vbOrderDao.orderStep4(user,sellerDetails);
        // fireRules(sellerDetails);
    }
    public CpSellerDetails getOrderDetailsForPdfGeneration(String orderno,
            int user) throws DataNotFoundException {
        return vbOrderDao.getOrderDetailsForPdfGeneratio(orderno,user);
    }
    public void addNewAddress(Address address) throws UpdateFailedException {
        vbOrderDao.addNewAddress(address);
    }
    private void fireRules(CpSellerDetails sellerDetails){
        vbDiscSession.insert(sellerDetails);
        vbDiscSession.fireAllRules();
    }
}

是否可以从 getOrderStep3() 调用的 fireRules() 中的 session 中删除插入的对象,并重用相同的 StatefulKnowledgeSession 来进行进一步的请求。如果可能,如何实现

最佳答案

我经常这样做是为了确保 session 的性能,因为在 session 中重新插入大量“静态数据”事实需要时间。

// Insert a fact and get a handle on to it
FactHandle handle = mySession.insert(myFact);

// Fire rules
mySession.fireAllRules();

// And retract the fact
mySession.retract(handle);

您可能希望在撤消后再次触发所有规则,以使 session 恢复到之前的状态。

关于spring - 从 drools session 中删除对象并在 spring 中重用相同的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22215312/

相关文章:

Java Drools - 应用哪些规则和事实列表

java - Drools 5.1 内存问题

java - Spring Data JpaRespositories 整合

java - 如何使用包含存储库 bean 的自定义 validator 注释验证 @PathVariable

java - 使用什么刷新模式 'Auto' 或 'Commit'

java - 在 Drools 电子表格中使用 "ignore rule"回退循环遍历值数组

java - 在 Drools 中为组执行单个规则

java - Drools:规则编译错误 - 无法解析为变量

spring - 无法在tomcat上部署spring项目

java - HQL 中的 Left Join - Hibernate 查询