2014-03-06 28 views
1

重复使用相同的会话我在服务类使用自动装配Autowired StatefulKnowledgeSession。取下Drools的会话对象,并在春季

@Service( “vbOrderService”) 公共类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()),并重复使用相同的StatefulKnowledgeSession进一步requests.If可能怎么能够实现

回答

1

我经常这样做是为了确保在会话性能哪里会需要一段时间来重新插入大量的“静态数据”的事实。

// 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); 

您可能希望将收回后再次触发所有规则带来的会话恢复到以前的状态。