java - उपयोगकर्ता को सार्थक संदेश प्रदान करने के लिए आप जेपीए दृढ़ता अपवादों को कैसे संभालें और पार्स करते हैं




parsing exception (3)

PersistenceException के उप-वर्ग हैं: EntityExistsException, EntityNotFoundException, NonUniqueResultException, NoResultException, OptimisticLockException, RollbackException, TransactionRequiredException। स्रोत: http://docs.oracle.com/javaee/5/api/javax/persistence/PersistenceException.html

आप उनका उपयोग कर सकते हैं। अपवाद के प्रकार की जांच करने या एक त्रुटि हैंडलिंग विधि अधिभारित करने का प्रयास करें (जो बेहतर है)। EntityExistsException मुझे लगता है कि आप जिस त्रुटि को खोज रहे हैं उस उदाहरण में जो आपने ऊपर दिया है। लेकिन आपको खुद को "यदि यह मौजूद है" जांचना चाहिए। यह सबसे अच्छा अभ्यास है।

उपयोगकर्ता को दिखाने के लिए SQL त्रुटि की आवश्यकता नहीं होनी चाहिए। वह त्रुटि हमेशा आपके लिए है। किसी भी डेटा से संबंधित त्रुटि जिसे उपयोगकर्ता को सूचित करने की आवश्यकता है मैन्युअल रूप से जांच की जानी चाहिए।

मैं जे 2 ईई वेब पर्यावरण का उपयोग करता हूं। अगर कोई अपवाद है तो मैं सिर्फ त्रुटि.जेएसपी को अनुरोध अग्रेषित करता हूं। मैं त्रुटि.जेएसपी के लिए एक अतिरिक्त ऑब्जेक्ट भी प्रदान करता हूं, जैसे कि उपयोगकर्ता वापस जा सकता है, त्रुटि के बाद कौन सा पृष्ठ जा सकता है। बेशक मैंने इसे स्वचालित किया है, मुझे अनावश्यक कोड लिखना पसंद नहीं है, क्योंकि इसे अपडेट करना मुश्किल है। तो मैं सिर्फ पकड़ ब्लॉक में किसी अन्य वर्ग को अपवाद और त्रुटि संदेश भेजता हूं।

https://code.i-harness.com

मैं जेपीए के लिए बिल्कुल नया हूं और जेपीए से दृढ़ता अपवादों को संभालने के दौरान सर्वोत्तम प्रथाओं को ढूंढना चाहता हूं, जैसे कि अद्वितीय बाधा उल्लंघन, जिसे उपयोगकर्ता द्वारा संबोधित किया जा सकता है। जेपीए ऐप्स लिखने के बारे में कई उदाहरण हैं, लेकिन उनसे अपवादों को दूर करने के बारे में कुछ भी नहीं। : /

उदाहरण के लिए उपयोगकर्ता को पंजीकृत करना, व्यक्ति उस ईमेल पते में प्रवेश करता है जो पहले से ही सिस्टम द्वारा सक्रिय उपयोग में है और बाधा उल्लंघन हो जाता है:

try {
     em.persist(credentials);
} catch (javax.persistence.PersistenceException ex) {

जो डुप्लिकेट ईमेल जोड़े जाने पर यह त्रुटि उत्पन्न करता है:

WARNING: SQL Error: 0, SQLState: 23505
SEVERE: ERROR: duplicate key value violates unique constraint "EMAIL_UQ_IDX"
  Detail: Key (email)=([email protected]) already exists.

मैं उपयोगकर्ता को सार्थक उत्तर कैसे प्राप्त कर सकता हूं? उदाहरण के लिए कुछ ऐसा: ओह लगता है कि कोई उस ईमेल पते का उपयोग कर रहा है, क्या आप वाकई पहले पंजीकृत नहीं हैं? क्या इसका विश्लेषण करने के लिए कोई सुविधा बनाई गई है या क्या मुझे कथन (ओं) में अपवाद संदेश (संभावित रूप से एक श्रृंखला) में अपवाद संदेश के विरुद्ध रेगेक्स चलाने की आवश्यकता होगी?

और इसके बारे में क्या है यदि यह व्यवसाय स्तर पर पकड़ा गया है ... प्रस्तुति स्तर पर इसे लात मारने के लिए सर्वोत्तम प्रथाएं क्या हैं ... जैसे मैंने पहले कहा था, ताकि उपयोगकर्ता के लिए 'अच्छा' संदेश प्रदान किया जा सके।

स्पष्टता के लिए जोड़ा गया: बस इतना लोगों को पता है, मैंने अभी भी सभी अलग-अलग प्रकार के दृढ़ता अपवादों को देखा है, और यहां कुछ शोध है जो मैंने किया है, मैंने "कोशिश कथन" के साथ शामिल नहीं किया है उदाहरण मैं ऊपर शामिल किया गया है:

try {
     em.persist(credentials);
     } catch (javax.persistence.PersistenceException ex) {
         System.out.println("EXCEPTION CLASS NAME: " + ex.getClass().getName().toString());
         System.out.println("THROWABLE CLASS NAME: " + ex.getCause().getClass().getName().toString());
                Throwable th = ex.getCause();
         System.out.println("THROWABLE INFO: " + th.getCause().toString());
         Logger.getLogger(CredentialsControllerImpl.class
              .getName()).log(Level.INFO, "Credentials Controller "
                  + "persistence exception "
                      + "EXCEPTION STRING: {0}", ex.toString());
         Logger.getLogger(CredentialsControllerImpl.class
              .getName()).log(Level.INFO, "Credentials Controller "
                  + "persistence exception "
                      + "THROWABLE MESSAGE: {0}", th.getMessage());
         Logger.getLogger(CredentialsControllerImpl.class
              .getName()).log(Level.INFO, "Credentials Controller "
                  + "persistence exceptions "
                      + "THROWABLE STRING: {0}", th.toString());
     }

:)


आप आमतौर पर ऐसा करने के लिए निम्न-स्तर के अपवादों का उपयोग नहीं करते हैं।

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

निश्चित रूप से, रेस की स्थिति हो सकती है यदि दो धागे समानांतर में एक ही चेक करते हैं, लेकिन यह बेहद दुर्लभ होगा, और विशिष्टता की गारंटी के लिए डेटाबेस बाधा है।


वसंत के साथ अपने जेपीए परियोजना को एकीकृत करें और वसंत को अपवाद को DataAccessException रूप में फेंक दें

Org.springframework.dao में DataAccessException उप-वर्ग

class   CannotAcquireLockException
      Exception thrown on failure to aquire a lock during an update, for example during a "select for update" statement.
class   CannotSerializeTransactionException
      Exception thrown on failure to complete a transaction in serialized mode due to update conflicts.
class   CleanupFailureDataAccessException
      Exception thrown when we couldn't cleanup after a data access operation, but the actual operation went OK.
class   ConcurrencyFailureException
      Exception thrown on concurrency failure.
class   DataAccessResourceFailureException
      Data access exception thrown when a resource fails completely: for example, if we can't connect to a database using JDBC.
class   DataIntegrityViolationException
      Exception thrown when an attempt to insert or update data results in violation of an integrity constraint.
class   DataRetrievalFailureException
      Exception thrown if certain expected data could not be retrieved, e.g.
class   DeadlockLoserDataAccessException
      Generic exception thrown when the current process was a deadlock loser, and its transaction rolled back.
class   EmptyResultDataAccessException
      Data access exception thrown when a result was expected to have at least one row (or element) but zero rows (or elements) were actually returned.
class   IncorrectResultSizeDataAccessException
      Data access exception thrown when a result was not of the expected size, for example when expecting a single row but getting 0 or more than 1 rows.
class   IncorrectUpdateSemanticsDataAccessException
      Data access exception thrown when something unintended appears to have happened with an update, but the transaction hasn't already been rolled back.
class   InvalidDataAccessApiUsageException
      Exception thrown on incorrect usage of the API, such as failing to "compile" a query object that needed compilation before execution.
class   InvalidDataAccessResourceUsageException
      Root for exceptions thrown when we use a data access resource incorrectly.
class   OptimisticLockingFailureException
      Exception thrown on an optimistic locking violation.
class   PermissionDeniedDataAccessException
      Exception thrown when the underlying resource denied a permission to access a specific element, such as a specific database table.
class   PessimisticLockingFailureException
      Exception thrown on a pessimistic locking violation.
class   TypeMismatchDataAccessException
      Exception thrown on mismatch between Java type and database type: for example on an attempt to set an object of the wrong type in an RDBMS column.
class   UncategorizedDataAccessException
      Normal superclass when we can't distinguish anything more specific than "something went wrong with the underlying resource": for example, a SQLException from JDBC we can't pinpoint more precisely.






exception-handling