Hi, Phil Steitz wrote:
> We are in process of redesigning our exceptions hierarchy in [math] > and we could use some input / perspective from other Commons > community members. Thanks in advance for your feedback and perspective. > > The most recent attempt at agreeing on design principles is [1] and > I have tried to document the points of agreement in a section that I > just added to the [math] Developer's Guide [2] (it will take a few > hours for this to make it to the live site. The source xdoc is in > trunk/src/site/xdoc/developers.xml) > > The JIRA issue [3] referenced in [1] calls out a specific point on > which we are trying to gain consensus in a specific example. > > The currently defined exceptions in [math] can be found in the > top-level package and .exceptions. Those in the top-level have at > this point been deprecated. Has anyone of you considered the usage of an exception context? We introduce this with lang3 (http://commons.apache.org/lang/api-3.0- beta/org/apache/commons/lang3/exception/ExceptionContext.html) and it basically adds a map with key/value pairs to the exception itself. This concept has worked out quite nicely especially in situations where code can nest deeply in conjunction with user-provided code that make calls in the core functionality again. The nice part is that you can add information at each position that can provide useful information (assuming MathException implements this interface): try { geneticAlg.evolve(pop, cond) } catch (MathException ex) { ex.addValue("Initial Population Size", pop.getPopulationSize()); throw ex; } Additionally this approach tends to shorten the prosa, because the algorithm might throw: if (population.getPopulationSize() == 0) { MathException ex = new MathException("Population died"); ex.addValue("Iterations", getGenerationsEvolved()); throw ex; } instead of: if (population.getPopulationSize() == 0) { throw new MathException("Population died after " + getGenerationsEvolved() + " generations, starting with " + initialSizeKeptSomewhere + " chromosomes"); } Even if you keep i18n, it is easier to translate the short messages and the param keys instead of the full text ;-) ... and remember, you can add the context interface to various exceptions, you don't have to maintain a hierarchy. ... and your users can add values also that are interesting e.g. for their stop condition without wrapping or inventing new exceptions. - Jörg --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org