Sometimes there is only a "business exception", other times there is an
underlying exception followed by a business exception. So the business
object is thrown a SQL error, wraps it, and throws its own version.
Other times, there can be a business logic error that doesn't wrap
anything else.
Sandeep Takhar wrote:
>
> Thanks Ted & Paul.
>
> As always, a useful piece of the puzzle.
>
> Just wondering what you need the isCause() method. I
> read the article about exception handling, but when
> you write the detail message -- won't this write the
> cause out for you?
>
> Where would you not have the cause?
>
> Also: the business error -- is it the last one thrown
> or the first? The cause: is this the last one thrown
> or the first?
>
> thanks,
>
> Sandeep
> --- Ted Husted <[EMAIL PROTECTED]> wrote:
> > I basically do the same thing as Paul. My business
> > objects throw
> > their own exceptions, which I can catch. These
> > exception classes
> > are "chained" and often include more than one
> > message: the initial
> > cause and my business explanation. I use the
> > ActionError class to
> > send this to the JSP. Since they ActionError can
> > handle a queue of
> > messages, I start with a generic "Oops" message,
> > followed by the
> > more specific business error, followed by the
> > geek-speak initial
> > cause. This way everybody is happy!
> >
> > ActionErrors errors = new ActionErrors();
> > ModelResult modelResult = null;
> >
> > try {
> > modelResult = getResult(
> > mapping,form,request,response,helpers);
> > }
> > catch (ModelException e) {
> > // Log and print to error console
> > servlet.log("Model Exception: ", e );
> > e.printStackTrace();
> > // General error message
> > errors.add(ActionErrors.GLOBAL_ERROR,
> > new ActionError("error.general"));
> > // Generate error messages from exceptions
> > errors.add(ActionErrors.GLOBAL_ERROR,
> > new ActionError("error.detail",e.getMessage()));
> > if (e.isCause()) {
> > errors.add(ActionErrors.GLOBAL_ERROR,
> > new
> > ActionError("error.detail",e.getCauseMessage()));
> > }
> > }
> >
> > The "error.detail" is one big replacement parameter
> >
> > error.detail={0}
> >
> > Then I look for an input mapping, and use that for
> > the error
> > page if there is one. If not, I look for a generic
> > "error" page instead.
> >
> > // -- Report any errors
> > if (!errors.empty()) {
> > saveErrors(request, errors);
> > if (mapping.getInput()!=null)
> > return (new ActionForward(mapping.getInput()));
> > // If no input page, use error forwarding
> > return (mapping.findForward(Tokens.ERROR));
> > }
> >
> > The chained exception class is based on Brian Goetz'
> > class.
> >
> >
> http://www.javaworld.com/javaworld/jw-08-2001/jw-0803-exceptions.html
> >
> > -Ted.
> >
> > --
> > To unsubscribe, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> >
>
> __________________________________________________
> Do You Yahoo!?
> Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month.
> http://geocities.yahoo.com/ps/info1
>
> --
> To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
-- Ted Husted, Husted dot Com, Fairport NY USA.
-- Custom Software ~ Technical Services.
-- Tel +1 716 737-3463
-- http://www.husted.com/struts/
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>