2014-03-06 30 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); 

您可能希望將收回後再次觸發所有規則帶來的會話恢復到以前的狀態。