users@jax-rs-spec.java.net

[jax-rs-spec users] [jsr339-experts] Re: Re: Name Binding Alignment with CDI

From: Santiago Pericas-Geertsen <Santiago.PericasGeertsen_at_oracle.com>
Date: Thu, 24 Jan 2013 08:57:25 -0500

On Jan 24, 2013, at 4:30 AM, Sergey Beryozkin <sberyozkin_at_talend.com> wrote:

> Actually, I'm wondering is a good idea at all,
>
> On 23/01/13 15:52, Sergey Beryozkin wrote:
>> On 23/01/13 15:38, Santiago Pericas-Geertsen wrote:
>>> Hello Experts,
>>>
>>> We recently had a discussion with Pete Muir related to name binding in
>>> JAX-RS and CDI (interceptor binding). As a result, I propose making a
>>> small change to our spec in order to align our semantics with CDI's.
>>>
>>> The proposed change relates to the use of multiple binding
>>> annotations. There are two sub-cases: (i) multiple binding annotations
>>> on a resource method or class and (ii) multiple binding annotations on
>>> the filter or interceptor.
>>>
>>> (i)
>>>
>>> @A class MyFilter1 ...
>>> @B class MyFilter2 ...
>>>
>>> // Binds both MyFilter1 and MyFilter2
>>> @A @B public Foo myMethod1() ...
>>>
>>> (ii)
>>>
>>> @A @B class MyFilter ...
>>>
>>> // Binds MyFilter
>>> @A @B public Foo myMethod2() ...
>>>
>>> There are no changes w.r.t. (i), our semantics agreed with CDI's.
>>> Before this change, we could bind MyFilter to myMethod2() using either
>>> '_at_A or @B'. In order to align with CDI, we will now require both '_at_A
>>> and @B' as shown above.
>>
>> So effectively specific method name bindings should contain all ones of
>> the given filter for it to be applicable ?
>
> First, I was not correct above, this update would assume that the name bindings of a specific filter would have to contain all the bindings of a specific method for this filter be bind-able to this filter.

 No, that's why I listed the two cases above. The relationship filters and methods is asymmetric. A method has to list all the annotations on the filter class, but not the other way around. Please check the updated section in the spec.

>
> This may make sense in CDI but CDI is at different level than JAX-RS, for example, replacing @A & @B with something more meaningful:
>
> @GZIP @LOG public Foo myMethod1()
> @LOG public Foo myMethod1()

 It's hard to comment on this example if you don't show the annotations on the filter classes.

-- Santiago