के साथ अपवाद हैंडलिंग रणनीति हम अपने आवेदन में जेएसएफ, स्प्रिंग और जेपीए का उपयोग कर रहे हैं। हम अपनी परियोजना के लिए हमारी अपवाद हैंडलिंग रणनीति को सरल बनाने की कोशिश कर रहे हैं।स्प्रिंग/जेपीए/जेएसएफ
हमारे आवेदन वास्तुकला नीचे की तरह है:
यूआई (JSF) -> प्रबंधित बीन्स -> सेवा -> डीएओ
हम डीएओ परत के लिए अपवाद अनुवाद सेम पोस्ट प्रोसेसर का उपयोग कर रहे हैं। यह स्प्रिंग एप्लिकेशन संदर्भ फ़ाइल में कॉन्फ़िगर किया गया है।
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
कहाँ स्प्रिंग 'org.springframework.dao.DataAccessException' करने के लिए सभी डेटाबेस अपवाद गिर्द घूमती है। हम डीएओ परत में कोई अन्य अपवाद हैंडलिंग नहीं कर रहे हैं।
हमारी रणनीति नीचे की तरह अपवाद को संभालने के लिए:
प्रस्तुति परत:
Class PresentationManangedBean{
try{
serviceMethod();
}catch(BusinessException be){
// Mapping exception messages to show on UI
}
catch(Exception e){
// Mapping exception messages to show on UI
}
}
सेवा लेयर
@Component("service")
Class Service{
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = BusinessException.class)
public serviceMethod(){
try{
daoMethod();
}catch(DataAccessException cdae){
throws new BusinessException(); // Our Business/Custom exception
}
catch(Exception e){
throws new BusinessException(); // Our Business/Custom exception
}
}
}
डीएओ लेयर
@Repository("dao")
Class DAO{
public daoMethod(){
// No exception is handled
// If any DataAccessException or RuntimeException is occurred this
// is thrown to ServiceLayer
}
}
प्रश्न: हम सिर्फ ऊपर दृष्टिकोण सर्वोत्तम प्रथाओं के अनुसार है या नहीं इस बात की पुष्टि करना चाहते हैं। यदि नहीं, तो कृपया अपवादों को संभालने का सर्वोत्तम तरीका सुझाएं (लेनदेन प्रबंधन के साथ खेलना)?
मैं भी इस दृष्टिकोण का पालन करना चाहता हूं, लेकिन जब मैं अपवाद पकड़ता हूं और अपना कस्टम अपवाद फेंकता हूं, तो मेरा अपवाद हैंडलर उस उत्साह को नहीं समझता है। वसंत मेरे अपवाद को 'org.springframework.transaction.TransactionSystemException' में लपेटें। यह मेरा प्रश्न है http://stackoverflow.com/questions/28295684/unable-to-wrap-dao-exception-in-service-layer-using-spring-mvc। मैं अपनी समस्या का समाधान कैसे करूं? –