[ 
https://issues.apache.org/jira/browse/OWB-456?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rohit Dilip Kelapure updated OWB-456:
-------------------------------------

    Description: 
EJB 3.0 spec. mandates that 
- If a bean class has superclasses, any AroundInvoke methods defined on those 
superclasses are invoked, most general superclass first.
- If an AroundInvoke method is overridden by another method (regardless of 
whether that method is itself an AroundInvoke method), it will not be invoked 

In some cases OWB does not remove the overriden parent interceptor from the 
Interceptor stack of a bean leading to TCK failures like these ... 

@Test
   @SpecAssertions({
      @SpecAssertion(section = "1", id = "i"),
      @SpecAssertion(section = "3", id= "b"),
      @SpecAssertion(section = "3.1", id= "c"),
      @SpecAssertion(section = "3.1", id= "d"),
      @SpecAssertion(section = "3.1", id= "e"),
      @SpecAssertion(section = "3.1", id= "f"),
      @SpecAssertion(section = "3.1", id= "g"),
      @SpecAssertion(section = "8", id = "e")
   })
   public void testInvocationOrder() {
      ...
      assert !Interceptor1.isOverridenMethodCalled();  // Error here
   }

Error:
java.lang.AssertionError
        at 
org.jboss.jsr299.tck.interceptors.tests.aroundInvoke.order.InvocationOrderTest.testInvocationOrder(InvocationOrderTest.java:43)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

In this case
@Interceptors( { Interceptor1.class, Interceptor3.class })
class Tram extends RailVehicle  {
}

Inspite of Interceptor1 overriding OverridenInterceptor we see  
OverridenInterceptor.intercept being called.
org.jboss.jsr299.tck.interceptors.tests.aroundInvoke.order.InvocationOrderTest 
is the failing TCK test. 

  was:
EJB 3.0 spec. mandates that 
- If a bean class has superclasses, any AroundInvoke methods defined on those 
superclasses are invoked, most general superclass first.

In some cases OWB does not remove the overriden parent interceptor from the 
Interceptor stack of a bean leading to TCK failures like these ... 

@Test
   @SpecAssertions({
      @SpecAssertion(section = "1", id = "i"),
      @SpecAssertion(section = "3", id= "b"),
      @SpecAssertion(section = "3.1", id= "c"),
      @SpecAssertion(section = "3.1", id= "d"),
      @SpecAssertion(section = "3.1", id= "e"),
      @SpecAssertion(section = "3.1", id= "f"),
      @SpecAssertion(section = "3.1", id= "g"),
      @SpecAssertion(section = "8", id = "e")
   })
   public void testInvocationOrder() {
      ...
      assert !Interceptor1.isOverridenMethodCalled();  // Error here
   }

Error:
java.lang.AssertionError
        at 
org.jboss.jsr299.tck.interceptors.tests.aroundInvoke.order.InvocationOrderTest.testInvocationOrder(InvocationOrderTest.java:43)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

In this case
@Interceptors( { Interceptor1.class, Interceptor3.class })
class Tram extends RailVehicle  {
}

Inspite of Interceptor1 overriding OverridenInterceptor we see  
OverridenInterceptor.intercept being called.
org.jboss.jsr299.tck.interceptors.tests.aroundInvoke.order.InvocationOrderTest 
is the failing TCK test. 


> When multiple interceptors  are defined for a bean OWB does NOT correctly  
> remove the overriden base Interceptors 
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: OWB-456
>                 URL: https://issues.apache.org/jira/browse/OWB-456
>             Project: OpenWebBeans
>          Issue Type: Bug
>          Components: Interceptor and Decorators
>    Affects Versions: 1.0.0-alpha-3
>         Environment: Windows Server 2003 
>            Reporter: Rohit Dilip Kelapure
>            Assignee: Gurkan Erdogdu
>             Fix For: 1.0.0-GA, 1.0.0-alpha-4
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> EJB 3.0 spec. mandates that 
> - If a bean class has superclasses, any AroundInvoke methods defined on those 
> superclasses are invoked, most general superclass first.
> - If an AroundInvoke method is overridden by another method (regardless of 
> whether that method is itself an AroundInvoke method), it will not be invoked 
> In some cases OWB does not remove the overriden parent interceptor from the 
> Interceptor stack of a bean leading to TCK failures like these ... 
> @Test
>    @SpecAssertions({
>       @SpecAssertion(section = "1", id = "i"),
>       @SpecAssertion(section = "3", id= "b"),
>       @SpecAssertion(section = "3.1", id= "c"),
>       @SpecAssertion(section = "3.1", id= "d"),
>       @SpecAssertion(section = "3.1", id= "e"),
>       @SpecAssertion(section = "3.1", id= "f"),
>       @SpecAssertion(section = "3.1", id= "g"),
>       @SpecAssertion(section = "8", id = "e")
>    })
>    public void testInvocationOrder() {
>       ...
>       assert !Interceptor1.isOverridenMethodCalled();  // Error here
>    }
> Error:
> java.lang.AssertionError
>       at 
> org.jboss.jsr299.tck.interceptors.tests.aroundInvoke.order.InvocationOrderTest.testInvocationOrder(InvocationOrderTest.java:43)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> In this case
> @Interceptors( { Interceptor1.class, Interceptor3.class })
> class Tram extends RailVehicle  {
> }
> Inspite of Interceptor1 overriding OverridenInterceptor we see  
> OverridenInterceptor.intercept being called.
> org.jboss.jsr299.tck.interceptors.tests.aroundInvoke.order.InvocationOrderTest
>  is the failing TCK test.       

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to