deltaspike-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Adrian Gonzalez <adr_gonza...@yahoo.fr>
Subject Re: Multiple exceptionHandler classes
Date Mon, 10 Dec 2012 15:31:19 GMT
Ok I found it, there's an error in ExceptionHandlerComparator [1], it doesn't handle qualifiers
correctly.
Should I open a JIRA ?


Lines 57-60 :

            if (returnValue == 0 && !lhs.getQualifiers().isEmpty())
            {
                return -1;
            }

Instead it should : 
 * remove Any qualifier from rhs and lhs
 * compare remaining qualifier size between rhs and lhs.

I've made a quick and ugly correction (not really performant) in my branch [2].
See [3].

[1] https://github.com/gonzalad/incubator-deltaspike/blob/8a8878faf2c12e69ba742dff1fb803b6f7d713b2/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerComparator.java
[2] https://github.com/gonzalad/incubator-deltaspike/tree/exception-multiple-handler
[3] https://github.com/gonzalad/incubator-deltaspike/commit/473eafe621c4401837b7e62411eb9833786544dc#deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerComparator.java

________________________________
De : Adrian Gonzalez <adr_gonzalez@yahoo.fr>
À : "deltaspike-dev@incubator.apache.org" <deltaspike-dev@incubator.apache.org> 
Envoyé le : Lundi 10 décembre 2012 12h48
Objet : Re: Multiple exceptionHandler classes

Hi,

I just added a testcase [1] .

Testcase fails once every twice.

I'll look a bit more at DS code.
If someone has an idea in the meantime ;)

Regards,

[1] https://github.com/gonzalad/incubator-deltaspike/blob/exception-multiple-handler/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/impl/exception/control/event/MultipleExceptionHandlerTest.java


________________________________
De : Jason Porter <lightguard.jp@gmail.com>
À : Adrian Gonzalez <adr_gonzalez@yahoo.fr> 
Cc : "deltaspike-dev@incubator.apache.org" <deltaspike-dev@incubator.apache.org> 
Envoyé le : Jeudi 6 décembre 2012 18h56
Objet : Re: Multiple exceptionHandler classes

If it's being called always from that code it should always hit the one
with the qualifier first, if not, then we have a bug. Take a look at the
tests and see if something is missing either in the suite or something
different with the way you're doing things. I know this worked perfectly in
Seam 3, and the code is nearly a direct port.


On Thu, Dec 6, 2012 at 10:35 AM, Adrian Gonzalez <adr_gonzalez@yahoo.fr>wrote:

> Thanks jason,
>
> > Do you have some code with how you're calling into the exception
> handling?
>
>
> Yep, the code is in [1]
>
>
> I'll try to test it more thoroughly on my side on Monday (week end time
> for me now ;) )
>
> [1]
> https://github.com/gonzalad/incubator-deltaspike/blob/ds-rest/deltaspike/modules/rest/impl/src/main/java/org/apache/deltaspike/rest/impl/exceptions/ExceptionMapper.java
>
> ________________________________
> De : Jason Porter <lightguard.jp@gmail.com>
> À : "deltaspike-dev@incubator.apache.org" <
> deltaspike-dev@incubator.apache.org>; Adrian Gonzalez <
> adr_gonzalez@yahoo.fr>
> Envoyé le : Jeudi 6 décembre 2012 18h25
> Objet : Re: Multiple exceptionHandler classes
>
>
> On Thu, Dec 6, 2012 at 10:11 AM, Adrian Gonzalez <adr_gonzalez@yahoo.fr>
> wrote:
>
> Hello,
> >
> >Is it permitted to have multiple ExceptionHandlers classes in the same
> application ?
> >
> >If yes, I have the impression that qualifiers aren't taken into account
> when it comes to which exceptionHandler method to call first.
> >I have the impression that EHA#handleException is called even if the
> ExceptionToCatchEvent was fired with @RestRequest qualifier.
> >
>
> Yes, this works fine, and is tested quite thoroughly in the test suite.
>
>
> Which ExceptionHandler class is called first depends on every application
> restart.
> >
> >
>
> >@org.apache.deltaspike.core.api.exception.control.annotation.ExceptionHandler
> >public class EHA {
> >public void handleException(
> >
> >@Handles ExceptionEvent<RuntimeException> event) {
> >...
> >event.handled();
> >}
> >}
> >
>
> >@org.apache.deltaspike.core.api.exception.control.annotation.ExceptionHandler
> >public class EHB {
> >public void handleException(
> >
> >@Handles @RestRequest ExceptionEvent<RuntimeException> event) {
> >...
> >
> >event.handled();
> >}
> >}
> >
> >Thanks
> >
> Do you have some code with how you're calling into the exception handling?
>
>
> --
> Jason Porter
> http://lightguard-jp.blogspot.com
> http://twitter.com/lightguardjp
>
> Software Engineer
> Open Source Advocate
>
> PGP key id: 926CCFF5
> PGP key available at: keyserver.net, pgp.mit.edu
>



-- 
Jason Porter
http://lightguard-jp.blogspot.com
http://twitter.com/lightguardjp

Software Engineer
Open Source Advocate

PGP key id: 926CCFF5
PGP key available at: keyserver.net, pgp.mit.edu

Mime
View raw message