Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

जेएसएफ + ईजेबी आवेदन में डीबी अपवाद पकड़ो

EJB में सिस्टम अपवादों और अनुप्रयोग अपवादों की अवधारणा है।

रनटाइम अपवाद, जैसे EntityExistsException सिस्टम अपवाद हैं। ये दूसरों के बीच किसी भी लेनदेन को वापस रोल-एड करने का कारण बनेंगे और ईजेबी इंस्टेंस बीन को त्यागने (नष्ट) का कारण बनेंगे। आपकी समस्या के लिए सबसे महत्वपूर्ण बात यह है कि उन्हें EJBException में लपेटा जाएगा ।

इन अपवादों को पकड़ने में कोई जादू नहीं है। उपरोक्त पेट्र से कोड को समायोजित करना,
निम्नलिखित काम करेगा:

बैकिंग बीन:

@EJB
private DAOBean daoBean;

public void savePerson(Entity e) {
     try {
         daoBean.save(e);
     } catch (EJBException e) {         
         FacesMessage message = new FacesMessage("entity is already exists.");
         FacesContext.getCurrentInstance.addMessage(null, message);
     }         
}

ईजेबी:

private EntityManager em;

public void save(Entity e) {    
    em.persist(e);    
}

ध्यान दें कि आप यह देखने के लिए अपवाद के कारण को पुनः प्राप्त कर सकते हैं कि क्या EntityExistsException था या नहीं (संक्षिप्तता के लिए ऊपर छोड़ा गया)।

चूंकि आपको शायद इस मामले के लिए अपने ईजेबी इंस्टेंस को नष्ट करने की कोई आवश्यकता नहीं है, इसलिए एक बेहतर पैटर्न अपने स्वयं के अपवाद को परिभाषित करना है जो RuntimeException से प्राप्त होता है। और @ApplicationException . के साथ एनोटेट किया गया है rollback . के साथ विशेषता सत्य पर सेट है।

उदा.

@ApplicationException(rollback = true)
public class MyException extends RuntimeException {

    public MyException(Throwable cause) {
        super(cause);
    }
}

अपना EntityExistsException लपेटें इस अपवाद में अपने ईजेबी में और इसे फेंक दें और पकड़ें।

मैं आपको दृढ़ता से सलाह देता हूं नहीं परिणामस्वरूप त्रुटि कोड या बूलियन सफलता/विफलता का उपयोग करने के लिए। यह एक प्रसिद्ध विरोधी पैटर्न है और आपके कोड को अविश्वसनीय त्रुटि प्रवण बनाता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle ISNULL () समतुल्य

  2. किसी अन्य कॉलम द्वारा समूहीकृत किसी भिन्न स्तंभ के अधिकतम के आधार पर मान प्राप्त करें

  3. Oracle 11g डेटाबेस को दूरस्थ रूप से कैसे कनेक्ट करें

  4. प्राथमिक कुंजी के लिए Oracle के SYS_GUID () का उपयोग करने के लिए हाइबरनेट को कॉन्फ़िगर करें

  5. इस क्वेरी को तत्काल तत्काल चलाने से यह विफल क्यों हो जाता है?