Exception chaining: Difference between revisions

Content deleted Content added
Marudubshinki (talk | contribs)
No edit summary
m link stack trace using Find link
 
(23 intermediate revisions by 19 users not shown)
Line 1:
'''Exception chaining''', or '''exception wrapping''', is an [[object-oriented programming]] technique of [[exception handling|handling exceptions]] by re-throwing a caught exception after wrapping it inside a new exception. The original exception is saved as a property (such as ''cause'') of the new exception. The idea is that a method should throw exceptions defined at the same abstraction level as the method itself, but without discarding information from the lower levels.
'''Exception chaining''' is the process of designing and implementing [[exception handling|exception handler]]s in an application so that individual [[Exception handling|exceptions]] can be handled by one or more handlers in a [[Hierarchy (object-oriented programming)|hierarchical]] manner. For example, in an [[object-oriented programming]] model, nested objects may receive exceptions at the lowest level. The object decides if it needs to handle the exception, and, if needed, can reraise the exception, sending it up the line. One example of the usefulness of this technique is [[mouse click]] handling. If there is a need to dynamically control what object responds to a click, exception chaining is usually the most efficient way to accomplish this.
 
For example, a method to play a movie file might handle exceptions in reading the file by re-throwing them inside an exception of movie playing. The user interface doesn't need to know whether the error occurred during reading chunk of bytes or calling eof(). It needs only the exception message extracted from ''cause''. The user interface layer will have its own set of exceptions. The one interested in ''cause'' can see its [[stack trace]] during debugging or in proper log.
 
Throwing the right kind of exceptions is particularly enforced by [[exception handling#Checked exceptions|checked exceptions]] in the [[Java (programming language)|Java programming language]], and starting with language version 1.4 almost all exceptions support chaining.
 
In runtime engine environments such as Java or .NET there exist tools that attach to the runtime engine and every time that an exception of interest occurs they record debugging information that existed in memory at the time the exception was thrown (stack and heap values). These tools are called Exception Interception and they provide "root-cause" information for exceptions in Java programs that run in production, testing, or development environments.
 
== References ==
 
* {{cite web |last1=Goetz |first1=Brian |date=2001-09-14 |df=mdy |url=https://www.infoworld.com/article/2075601/exceptional-practices--part-2.html |title=Exceptional practices, Part 2 |work=[[JavaWorld]] |accessdate=2020-07-19}}
* [https://docs.oracle.com/javase/tutorial/essential/exceptions/chained.html ''Chained exceptions''] - Sun's Java tutorial
 
[[Category:Software design patterns]]