commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrea Rombaldi" <andrea.romba...@alice.it>
Subject Re: [lang] [PATCH] new ExceptionUtils.setCause() method
Date Wed, 04 Jan 2006 21:47:31 GMT
Hallo Gary,

the main reason I wrote ExceptionUtils.setCause() is to make my logs the 
more readable as possibile depending on the underlying JRE, so the different 
behavior between JRE < 1.4 and >= 1.4 is by design.

I agree with you that extending NestableException, NestableError, 
NestableRuntimeException *is the best way* to accomplish this task.

But in those cases when the developer is dealing with already defined 
Exceptions that are not subclassed from Nestable* the use of 
ExceptionUtils.setCause() can be useful to avoid the implementation of the 
Nestable interface and get the portability to JRE >= 1.4, as in the 
following example:


import org.apache.commons.codec;
import org.apache.commons.log;

public class MyEncoder implements Encoder {

    public Object encode(Object pObject) throws EncoderException {
        Object result = null;
        try {
            InputStream in = ....
            try {
                // omissis
            } finally {
                in.close();
            }
        } catch (IOException ioe) {
            EncoderException e = new ExcoderException("Encode failed due to 
an I/O error");
            ExceptionUtils.setCause(e, ioe);
            throw e;
        }
        return result;
    }

    protected static Log LOG = LogFactory.getLog(MyEncoder.class);

    public static void main(String[] args) {
        MyEncoder enc = new  MyEncoder();
        try {
            System.out.println(enc.encode("test"));
            LOG.info("encode() succeeded");
        } catch (EncoderException e) {
            LOG.error("encode() failed", e);
        }
    }

}

Ciao,
Andrea.


PS: the simple example I provided could open a debate: why not including 
commons-lang in the other commons-* components and leverage the power of 
lang.builder.*, lang.enums.*, lang.exception.* packages and so on?
IMHO in most cases the commons-lang code is more reliable than the 
equivalent ad-doc imported or written code in the other commons-* packages. 
:-)


----- Original Message ----- 
From: "Gary Gregory" <ggregory@seagullsoftware.com>
To: "Jakarta Commons Developers List" <commons-dev@jakarta.apache.org>
Sent: Wednesday, January 04, 2006 9:00 AM
Subject: RE: [lang] [PATCH] new ExceptionUtils.setCause() method


Hello Andrea:

I have your patch installed on my machine but I want to make sure I
understand the intent. In your example:


public class MyException extends Exception {

  public MyException(String msg) {
    super(msg);
  }

  public MyException(String msg, Throwable cause) {
    super(msg);
    ExceptionUtils.setCause(this, cause);
  }

}

If this code runs in a JRE >= 1.4 , the cause is set in the target.

If this code runs in a JRE < 1.4, nothing happens.

So the code is portable but the behavior is different.

Is the intent to write code in a JRE < 1.4 that will behave OK on a JRE
>= 1.4?

Why not subclass NestableException and get the portability AND the
proper behavior?

Thanks,
Gary

> -----Original Message-----
> From: Andrea Rombaldi [mailto:andrea.rombaldi@alice.it]
> Sent: Tuesday, January 03, 2006 10:44 AM
> To: Jakarta Commons Developers List
> Subject: Re: [lang] [PATCH] new ExceptionUtils.setCause() method
>
> Hi,
>
> this is just a reminder for my trivial patch :-)
>
> Ciao,
> Andrea.
>
>
> > DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG*
> > RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
> > <http://issues.apache.org/bugzilla/show_bug.cgi?id=37574>.
> > ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND*
> > INSERTED IN THE BUG DATABASE.
> >
> > http://issues.apache.org/bugzilla/show_bug.cgi?id=37574
> >
> >
> >
> >
> >
> > ------- Additional Comments From ggregory@seagullsw.com  2005-12-06
> > 01:19 -------
> > I'll try to take a look this week.
> >
> > --
> > Configure bugmail:
> > http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
> > ------- You are receiving this mail because: -------
> > You reported the bug, or are watching the reporter.
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message