On Fri, Jul 15, 2011 at 12:42 PM, Mike Edwards
<mike.edwards.inglen...@gmail.com> wrote:
> On 15/07/2011 12:08, Simon Laws wrote:
>>
>> Commenting on the last two posts. Generally I prefer the strong typing
>> of context and the ability to have that type injected into an
>> implementation. I do though accept that there is no API alternative to
>> injection for anything other than RequestContext or derivatives. In
>> the derivative case the app writer would be still be expected to cast
>> to TuscanyRequestContext which isn't so elegant but will work.
>>
> Well, I suppose we could envisage an annotation like @TuscanyRequestContext
> that would signal injection of a TuscanyRequestContext which would then not
> need any cast - but of course my concern is that any such code would only
> work with Tuscany and would not work with any other SCA runtime, which is
> the flip side of the concern.

I was thinking more of allowing the following as a Tuscany specific
extension. Of course you need to be in Tuscany to use
TuscanyRequestContex but that's true of a cast also.

@Context
TuscanyRequestContext myRequestContext.

>
> In terms of "strong typing of context" I would be concerned about a scheme
> in which each potential atom of context was separately injected - this would
> get out of hand very quickly I think.  I suppose one scheme is to treat
> context like a set of Properties to be injected, where the property names
> are simple strings (of the type I'm advocating for getContext()), with the
> implication that each field/setter would be annotated like
>  @TuscanyRequestContext( "foo" ) - and with the assumption that the type of
> the field/method had better match the implied type of that context property
> (which must be defined by the runtime, not by the application).

I'm slightly uneasy about that as it requires the Tuscany specific
annotations. I have considered the following but maybe that's just as
complex. WDYT?

@Context
RequestContext requestContext;

@Context
TuscanyRequestContext requestContext;

@Context
MyContextUnrelatedToRequestContext myContextReference1;

public void someServiceOperation(){
    ContextValue value1 =  myContextReference1.getSomeValueFromTheContext();
    ContextValue value2 =
requestContext.getExtendedContext(MyContextUnrelatedToRequestContext.class.getName()).getSomeValueFromTheContext();

    // I would expect value1 and value2 to be the same object.
}

>
> I agree that the best we get for the set of names for context atoms is
> simply documentation - what would be good is a catalog that aims to promote
> the maximum amount of commonality, especially between Bindings, where I hope
> that header fields, for example, could use the same names and types for a
> wide range of binding types.  This is really a matter of trying to get
> developers of binding implementations to use common context fields as far as
> possible.
>
> Of course, once you head down the headers road, then there could be a desire
> to reflect any and all headers into the application - something I don't
> think is a great idea - if it matters that much to the application it should
> be part of the service signature in 99.99% of cases.

+1

>
>
> Yours,  Mike.
>

Simon

-- 
Apache Tuscany committer: tuscany.apache.org
Co-author of a book about Tuscany and SCA: tuscanyinaction.com

Reply via email to