jsr339-experts@jax-rs-spec.java.net

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

From: Bill Burke <bburke_at_redhat.com>
Date: Tue, 17 Apr 2012 14:16:45 -0400

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