users@jax-rs-spec.java.net

[jax-rs-spec users] [jsr339-experts] Re: Re: Properties in Response object WAS Re: Re: Re: Review of new Filter API

From: Adam Bien <abien_at_adam-bien.com>
Date: Tue, 17 Apr 2012 20:29:28 +0200

Hi BIll,

even the inclusion of the whole JSR-330 would be not that bad. THe whole spec consists of about 5 annotations.

I guess in 80% percent of all cases JAX-RS will be used together with @Inject anyway...

adam

On 17.04.2012, at 20:16, Bill Burke wrote:

>
>
> On 4/17/12 1:53 PM, Adam Bien wrote:
>>>
>>> Ok, got it.
>>>
>>>> But that's besides the point. I think a way to propagate per-request config/metadata is essential. I don't understand why you are balking at this so vehemently. Its a very simple addition.
>>>
>>> I am not against the addition per se. I am just not happy about the proposed solution. Adding a mutable method to an existing immutable API feels wrong. I am thinking that we could make this information injectable. (E.g. in Jersey we have FeaturesAndProperties injectable interface that we use exactly for this purpose.) Since I am seeing some common aspects with client.Configuration, perhaps we can extract a common super-interface from there and make it injectable? E.g.
>>>
>>> public interface Configuration {
>>> Map<String, Object> getProperties();
>>> Object getProperty(String name);
>>> Configuration setProperties(Map<String, ? extends Object> properties);
>>> Configuration setProperty(String name, Object value);
>>>
>>> // perhaps we can make Feature part of the common API too?
>>> Set<Feature> getFeatures();
>>> boolean isEnabled(Class<? extends Feature> feature);
>>> Configuration enable(Feature feature) throws IllegalStateException;
>>> Configuration disable(Class<? extends Feature> feature) throws IllegalStateException;
>>> }
>>>
>>> public interface ClientConfiguration extends Configuration { ... }
>>>
>>> Alternatively, we could also make the mutable properties map injectable itself. E.g.
>>>
>>> @Context Map<String, Object> properties;
>>>
>>> or with a qualifier (better aligned with JSR-330, JSR-299 injection style)
>>>
>>> @Context @Properties Map<String, Object> properties;
>>> @Context @Property("foo") Object fooValue;
>>>
>>> or using a custom injection annotation (better aligned with JAX-RS injection style)
>>>
>>> @Properties Map<String, Object> properties;
>>> @Property("foo") Object fooValue;
>>
>> +1 But: why @Context and not @Inject?
>
> Wouldn't @Inject bring in an extra dependency? I don't like that idea for standalone jax-rs.
>
> --
> Bill Burke
> JBoss, a division of Red Hat
> http://bill.burkecentral.com