The real problem is that Unchecked exceptions still exist, and are way over used.
-shrug- On Fri, Apr 10, 2009 at 8:28 AM, Andre Dantas Rocha < andre.dantas.ro...@uol.com.br> wrote: > I totally agree with you about HandleUtil.handle(); this is a point that I > want to avoid either. However, the current weaving implementation isn't so > flexible and today this is the only way it works. > > As I wrote in my last emails, it is still necessary to work on Mojo/weaving > to solve this kind of problem. > > Andre > > -----Mensagem original----- > De: Gaurav Arora [mailto:gauravar...@codercorp.com] > Enviada em: sexta-feira, 10 de abril de 2009 09:00 > Para: Commons Developers List > Assunto: Re: RES: RES: RES: Possible incubation? > > Apologies for the late reply. > > > But... and if does the user specify an handler that are not supposed to > > handle that code? Isn't better to throw an exception instead of returning > > the original one? > > Hmm, when I think about it, I think it is better to throw the exception > than return it, returning would again cause extra code in the caller. > > I just want to touch up on a point you mentioned in your other mail about > HandlerUtil.handle(). I personally would love to avoid such a call at all. > I think the entire framework should be as transparent as possible to avoid > unnecessary code. The annotation already provides metadata for a developer > to refer too so there isn't a need for an explicit call. > > Gaurav > > > I agree with you in some points. Maybe it is better to return inside > > exceptions to the caller instead of catch them locally. > > > > The problem, for me, remains in this part: "see if we have a method to > > handle such an exception by checking if a method > > handleIllegalArgumentException exists" > > > > I believe that implement an handleIllegalArgumentException() method it's > > not > > the best solution for the problem. Maybe the best strategy is to overload > > handle() method for handling exceptions of handler's responsibility. For > > example, Instead of handleIllegalArgumentException(), codify a > > handle(IllegalArgumentException e): > > > > public class MyHandler implements handler { > > public Throwable handle(IllegalArgumentException e, ...) { > > // specific code > > } > > > > public Throwable handle(Throwable t, ...) { > > return t; > > } > > } > > > > But... and if does the user specify an handler that are not supposed to > > handle that code? Isn't better to throw an exception instead of returning > > the original one? > > > > Andre > > > > > > -----Mensagem original----- > > De: Gaurav Arora [mailto:gauravar...@codercorp.com] > > Enviada em: quarta-feira, 8 de abril de 2009 12:37 > > Para: Commons Developers List > > Assunto: Re: RES: RES: Possible incubation? > > > > I agree with you that there is no elegant way to say what can and cannot > > be handled by the handler so what I suggest is let the handler decide > what > > it can and cannot handle. Looking at the handler should give one a clear > > picture of what its equipped to handle. > > > > Here's what I mean with an example: > > > > @ExceptionHandler(MyHandler.class) > > public void foo() { > > try { > > doSomething(); > > } catch (Exception ex) { > > handler.handle(ex); > > } > > } > > > > Assume the above method throws an IllegalArgumentException. > > > > In our handler: > > public Throwable handle(Exception e) { > > // get the type of exception > > // see if we have a method to handle such an exception by checking if > > a method handleIllegalArgumentException exists > > // if we don't simply return the exception back > > } > > > > This way there is no need to explicitly define what exceptions can and > > cannot be handled. What is not handled is simply thrown back to the > > caller. But what it does is provides a very clean caller in the sense > that > > it has no actual exception handling code, just a single catchAll. > > > > I am not sure on what exceptions should be handled by the handle method > > itself. Asking the handler to handle all it's own exceptions, in a way, > > again asks you to duplicate the code, which is what Jeha is trying to > > remove. Otherwise, you'll need to define exception handlers for the > > handlers themselves which in my view can get tricky real fast. > > > > I don't think that the option of rethrowing should rest with the caller. > > What the caller is saying is that the handler will handle all it's > > exceptions and it itself knows nothing about what is going on. Asking the > > caller to handle rethrows sort of splits the responsibility between the > > two which again, is something that can get tricky. > > > > Gaurav > > > > > >> Hi Gurav, > >> > >> The weaving could be accomplished statically using ASM, BCEL, Javassist > >> or > >> any similar tool. In my opinion, a bytecode library must be used only > >> during > >> compilation process; it's better (and cleaner) if the program does not > >> need > >> it to work. > >> > >> Personally, I think that attach handlers with specific exception types > >> could > >> be a problem when you have a method that throws exceptions of different > >> kinds. I don't think that it could be specified (in a elegant way) in > >> annotations. Maybe it preferable to let it more generic... > >> > >> I believe that the strategy of rethrowing an exception or not must be > >> accomplished by the caller method, and exceptions inside the handler > >> must > >> be > >> tackled there. Maybe a (new) parameter could specify what to do. > >> > >> What do you think? > >> > >> Andre > >> > >> > >> > >> -----Mensagem original----- > >> De: Gaurav Arora [mailto:gauravar...@codercorp.com] > >> Enviada em: quarta-feira, 8 de abril de 2009 10:37 > >> Para: Commons Developers List > >> Assunto: Re: RES: Possible incubation? > >> > >> I just want to take the discussion towards converting compile time > >> weaving > >> to load time weaving for a second here. Please feel free to correct me > >> if > >> I have gone off the wrong path here. > >> My idea is to simply have something like this: > >> 1. apply throws advice on every method which has the annotation > >> 2. from within the advice, call the underlying handler's handle method > >> 3. if a runtime exception is thrown from within the handler or advice > >> let > >> it go (complies with every methods signature) > >> 4. if however a checked exception is thrown ... > >> > >> My knowledge of AOP is limited but I think the above should be possible > >> and would make it easier to change in the future. #4 is something which > >> has me stumped and I can't see a way around it except on a good-faith > >> basis, the handler respects what the method may throw. Is the above > >> possible with compile time weaving? (I ask because I have never used > >> compile time weaving before) > >> > >> Coming back to handling only specific exceptions. I was thinking of > >> something along the lines of calling a particular method to handle a > >> particular type of exception. For example, the handler must have a > >> handleIllegalArgumentException if the handler is expected to handle > >> IllegalArgumentExceptions for the method/class. If it doesn't, the > >> exception is simply rethrown. > >> > >> > >> Gaurav > >> > >>> You're right. Today Transform task put the handler code in all catch > >>> blocks, > >>> regards type of exception. You have to do the calls manually if you > >>> what > >>> to > >>> be more precise. > >>> > >>> The improvement suggested by Gaurav is very useful and can be done in > >>> the > >>> task (or even a Mojo). > >>> > >>> Andre > >>> > >>> -----Mensagem original----- > >>> De: sebb [mailto:seb...@gmail.com] > >>> Enviada em: quarta-feira, 8 de abril de 2009 07:46 > >>> Para: Commons Developers List > >>> Assunto: Re: Possible incubation? > >>> > >>> On 08/04/2009, gauravar...@codercorp.com <gauravar...@codercorp.com> > >>> wrote: > >>>> I think it's more valid to look at Jeha as a framework that only > >>>> handles > >>>> what you ask to handle. In the case you describe, if you don't ask > >>>> Jeha > >>> to > >>>> handle a certain type of exception, then that exception is simply > >>>> propagated up the stack. I don't think it interferes with the method > >>>> signature, unless i'm missing something. > >>> > >>> That may be so, but it's not mentioned in the Quick Start guide - the > >>> only examples catch Exception, and there is no indication that the > >>> Transformer task can be used to only add handlers for particular > >>> Exceptions. > >>> > >>>> Gaurav > >>>> > >>>> > >>>> > Hi Andre, > >>>> > > >>>> > Andre Dantas Rocha wrote at Dienstag, 7. April 2009 14:38: > >>>> > > >>>> >> Hi all, > >>>> >> > >>>> >> This message was originally sent to incubator list, but they > >>>> suggest > >>> to > >>>> >> post it here because *maybe* the idea can fit in Commons project. > >>>> >> > >>>> >> I'm developing a framework called Jeha. The main idea is to > >>>> provide > >>> easy > >>>> >> exception description and handling using annotations in methods > >>>> and > >>>> >> classes > >>>> >> and some commons handlers. I believe that the idea is simple, but > >>>> >> powerful. > >>>> >> > >>>> >> The initial code and start guide of framework are here: > >>>> >> > >>>> > > >>> > >> > > > < > http://sourceforge.net/project/showfiles.php?group_id=242203&package_id=294 > >>>> >> 931&release_id=650572> > >>>> >> > >>>> > > >>> > >> > > > > http://sourceforge.net/project/showfiles.php?group_id=242203&package_id=2949 > >>>> >> 31&release_id=650572 > >>>> >> > >>>> >> I'd like to hear from community if this idea is valuable for a > >>> possible > >>>> >> incubation. > >>>> >> > >>>> >> Please let me know your opinion. > >>>> > > >>>> > It might be only me, but I see this approach a bit critical. On one > >>> hand > >>>> > you're right, writing exception code is quite tedious sometimes, > >>>> but > >>> with > >>>> > your solution you wipe out any useful method signature regarding > >>> exception > >>>> > declaration. What happens if I don't wanna handle certain exception > >>> types > >>>> > or RuntimeException instances? I cannot simply rethrow from the > >>> handler. > >>>> > > >>>> > - Jörg > >>>> > > >>>> > > >>>> > > --------------------------------------------------------------------- > >>>> > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > >>>> > For additional commands, e-mail: dev-h...@commons.apache.org > >>>> > > >>>> > > >>>> > >>>> > >>>> > >>>> --------------------------------------------------------------------- > >>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > >>>> For additional commands, e-mail: dev-h...@commons.apache.org > >>>> > >>>> > >>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > >>> For additional commands, e-mail: dev-h...@commons.apache.org > >>> > >>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > >>> For additional commands, e-mail: dev-h...@commons.apache.org > >>> > >>> > >> > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > >> For additional commands, e-mail: dev-h...@commons.apache.org > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > >> For additional commands, e-mail: dev-h...@commons.apache.org > >> > >> > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > > For additional commands, e-mail: dev-h...@commons.apache.org > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > > For additional commands, e-mail: dev-h...@commons.apache.org > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > >