Re: [sca-assembly] Misadventures exploring "@coupledTo" for proposedresolution of ASSEMBLY-227

From
Eric Johnson <>
Date
2010-12-13T20:29:23+00:00
ID
Thread
Re: [sca-assembly] Misadventures exploring "@coupledTo" for proposedresolution of ASSEMBLY-227
Hi Mike,

    

    On 12/9/10 11:29 PM, Mike Edwards wrote:
    
      

      Eric,
      

      

      Some revealing comments - some
        responses
        inline....

      
      

      Yours, Mike
      

      

      

      

        On 12/8/10 8:10 AM, Mike Edwards wrote: 
      

      

        Folks, 

      

        I find it VERY hard to see how this "double headed beast" termed
        "prosumer" (or use whatever other term you find more congenial)
        is 

        in any way simpler or avoiding of the problems laid at the door
        of either
        "groupID" or "coupledTo". 
      

      

        I boil it down to the difference between negative and positive
        assertions.
         I find it far more useful to search a list of positive
        assertions
        about what I MUST do with a "prosumer" rather than to search
        a list of negative assertions about what I cannot do with a
        producer and
        consumer that are "coupled".  With the positive case, I
        can simply search the spec for references to "prosumer".  In
        the negative case, I must read everything to make sure I haven't
        missed
        a constraint.
      

      

      <mje>
      

      If it is positive
          vs negative
          that worries you, I am sure I can cast the requirements on
          consumers /
          producers
      

      using positive
          assertions
      

      </mje>

      
    

    <eej>I probably should have pointed out as well that I found
    myself wanting to have a label for the coupling of a producer and
    consumer.  Then, of course, I want to have normative statements
    about that pairing.  Once I've got normative statements about the
    pairing, that begs the question as to why we're not simply
    representing the pairing in the XML form.

    </eej>

    

    
      
      

      

        The trouble with "prosumer" is that I think it ends up having
        to include all the features and capabilities of both a producer
        and a consumer,
      

        with the need for both @target and @source - and also allowing
        for promotion
      

      Yes.
      

      (and in the worst case allowing
        for
        promotion to a 

        prosumer, to a consumer & to a producer).
      

      

        That's nonsensical to me. I don't see any reason you ever allow
        for splitting
        of a prosumer's characteristics once you've brought them
        together.
      

      

      <mje>
      

      That is one of the
          most
          revealing comments on this issue so far.
      

      

      What that says, in
          my terms,
          is that linked producers/consumers CANNOT be used in ways that
          are
      

      standard for
          non-linked
          ones.
      

    
    

    <eej>To be precise, I said that I don't see any reason
    for doing such a thing</eej>

    
      

      I asked about this
          at the
          F2F and didn't get a crisp answer.  But the comment above
          seems very
          crisp.  Let me paraphrase
      

      how I read that
          comment:
      

      

      "When there is a
          linked
          producer/consumer, the producer/consumer can only EVER be
          connected in
          such a way that the
      

      channel(s)
          connecting them
          always send every event from the producer to the consumer."
           In
          other words if I as the 
      

      Assembly happen to
          want
          to take the events from the producer and send them out to some
          group of
          consumers which
      

      DOES NOT include
          the linked
          consumer, I can't do it.  Even if I did have a separate
          connection
          from the producer to
      

      the linked
          consumer which
          ensures that the required linking is satisfied.
      

    
    

    <eej>All right, but you've identified a feature, not a
    reason/scenario/use-case.  Trying to identify the use case:

    

    A component (CompA) has producer (ProdA) which is wired to multiple
    channels (ChanA, ChanB).  One of those channels (in order to solve
    the use cases I've postulated) must be wired back to the coupled
    consumer (ConA).

    

    The question, then is about the 2nd channel (ChanB).  Why wire the
    producer to it in the first place?  I presume that some producers
    (ProdB & ProdC) are sending messages to ChanB that aren't meant
    to arrive at the coupled consumer (ConA) ?  OK, but why not simply
    have the downstream clients (ConB, ConC) consume both ChanA and
    ChanB?

    

    So it looks like that can't be the problem you're concerned about,
    because within a single composite, I can still solve it with the
    prosumer approach as we've discussed so far.

    

    Perhaps then, you mean to wire the prosumer to a channel within the
    composite, but then promote the producer half of it past the edge of
    the composite?  Can we explore this more?  This involves at least
    three levels of composite nesting to be interesting - the inner
    composite (CompA) that defines a prosumer (or @coupledTo), a
    containing composite that wants to promote the producer side of the
    prosumer, and at least one final wrapping composite that will use
    the events of that promoted producer.  Can you draw a picture?

    

    An odd realization: the "injected channels" approach solves just
    this scenario, by way of letting producers and consumers explicitly
    wire to the channel within the composite, or not, as they see fit,
    and letting the use of that channel beyond the edge of the composite
    happen at the whims of the subsequent assemblers.  But then, I'm
    confused, because you seem to have rejected the possibility of
    solving this problem that way.

    

    However, whether or not we pursue injected channels, I think the
    analysis highlights a key point. To achieve your approach with
    injected channels, obviously, I would promote ProdA to the edge of
    the composite.  To promote the channel to the edge of the composite
    as well, I have to make an affirmative decision to *also* indicate
    said channel at the edge of the composite.

    

    Poking at the premise of your question, one question jumps into my
    mind, why not simply require that the component CompA promote an
    equivalent to ProdA uncoupled from the consumer ConA?  I could ask
    the same question with the injected channels approach - if, as a
    component I chose to promote the channel, but not an independent
    producer, is that OK?

    

    Circling back, this seems to be one nugget of potential discussion
    then - if I promote a coupled producer & consumer (via
    @coupledTo, element prosumer, or injected channel - doesn't matter,
    the problem is always the same), then are the events of the producer
    separately available?  (Note: I don't think this problem applies
    equally to consumers, because a component implementation can already
    decide whether or not to receive events outside of those coupled to
    a producer by simply defining another consumer, so this is already
    under the control of the component, rather than the assembler).

    

    I can think of at least two ways I might extend the prosumer model
    to encompass this requirement:

    
      
Whenever a prosumer appears in a componentType, that implies
        the existence of distinct producer with a related name

      
Allow composite promotion of just the producer side of a
        component prosumer

      

    
    Care to comment on whether either seems better to you?

    </eej>

    
      

      If my paraphrase
          is correct,
          then I am now parting company from this whole notion of
          linking.  This
          is undermining the
      

      capabilities that
          I want
          to see Assemblers having at their fingertips.  What's the
          point of
          that??
      

      </mje>
    

    <eej>

    That seems somewhat draconian to throw the baby out with the
    bath-water.  Rather than reject the policy model outright, because
    it might impose constraints on higher-level composites or unpleasant
    complexity, we've started trying to figure out how that might work. 
    Same thing applies here - this notion of bottom-up constraints
    matters, and we should have a discussion about what it means.

    </eej>

    
      

      

      
      

       AND the rule has to be that some
        combination of these things ensures that there is a "path"
      

        that connects the prosumer to itself via some channel.
      

      

        Since the prosumer has a single identity, defining it at the
        edge of a
        composite, and then wiring that to a channel in the containing
        composite
        results in wiring a *single* thing.  How could the path you
        refer
        to actually be broken?

      
      

      <mje>
      

      This tends to
          confirm my
          paraphrase above.  The restriction implied is too great.
      

      </mje>
      

      

      

        To avoid those problems, you end up having to place restrictions
        on what
        a prosumer can do - and any such restrictions are equally
      

        applicable to "groupID" or "coupledTo" (etc).
        

        

      

        As for avoiding the notion of a producer explicitly naming a
        consumer -
        that IS the game we are in here.  You can't hide it, no matter
      

        how you try.  For sure, the producer and the consumer involved
        may
        be connected via some (as yet unspecified) channel, but the
      

        fact of them BEING connected to one another IS the point of this
        function.
        

        

      

        You want simplicity?  Then don't have this "this producer must
        be connected to this consumer" type of function in the model at
        all.
      

        Clearly an Assembler can achieve this function if they so wish -
        it's a
        piece of cake for the assembler.  It's just that putting this
        metadata
      

        into the model in a way that it can be POLICED by the runtime
        (or by tooling)
        is what generates all this complexity.  Leave it as
      

        descriptive metadata in the implementations/composites.  Job
        done.
      

      

        I think the complexity of the current spec is somewhat
        manufactured.  Take
        this:

        "One technique which enables component producers to send events
        outside
        the composite and for component consumers to receive events from
        outside
        the composite is to configure producers and/or consumers of
        components
        inside the composite to use domain channels – that is, channels
        at the
        Domain level."

        

        Suppose we define "event endpoint" as encompassing "producers"
        and "consumers".  I can then rewrite the above as:

        "One technique which enables event endpoints of components to
        send
        and receive events outside of the composite is to configure
        those event
        endpoints to use domain channels - that is, channels at the
        Domain level."

        

        Now, notice that if I define "event endpoint" as encompassing
        "producers", "consumers", and "prosumers",
        the the above statement stays exactly the same.

        

        Consider the following revision:

        An event endpoint declares where the messages it produces are
        sent through
        a list of one or more target URIs in its @target attribute.  The
        event
        endpoint declares the sources for the messages it receives
        through a list
        of one or more source URIs in its @source attribute.  The form
        of
        these URIs include:
      
        
The URI of a channel in the same composite as
            the producer,
            in the form channelName
        

        
The URI of of a channel at the Domain level
            in the form
            //channelName

      
      The above is simpler than the current
        text.

        

        To bear the above assertions out, I'm currently going through
        and trying
        to make a draft which uses the abstract notion of an event
        endpoint.
      

      

      <mje>
      

      This isn't
          simplifying
          anything other than the language.  The concepts remain.  A
          producer
          ain't the same thing as a consumer.
      

      

      Indeed, I argue
          that it
          is an attempt to sweep complexity under the carpet.  But the
          big bulge
          is still showing.  In fact, it is probably made worse.
      

      </mje>
    

    <eej>As I've pointed out with the various diagrams that I've
    drawn, and with various discussions of specific scenarios, when
    trying to get to the bottom of the problems that arise when coupling
    composition with eventing, we discover complexity.  At the moment,
    the 1.2 WD completely punts on addressing that complexity, by either
    resorting to "use global channels", or creating hopelessly confused
    wiring diagrams.

    

    Ignoring that complexity doesn't make it go away, it just pushes it
    onto our customers, or into implementation-specific extensions that
    solve it, but which won't be portable.

    

    -Eric.

    </eej>

    
      

      

        

        -Eric

      
      

      

        Yours, Mike 
      
        
          

            
              
            
          

          

            
              

            
          

          

            Dr
                Mike Edwards
              
            
             Mail Point
                146, Hursley
                Park 
            
            
              

            
          

          

            STSM
              
            
             Winchester,
                Hants SO21
                2JN 
            
          

          

            SCA
                & Services
                Standards 
            
             United
                Kingdom
              
            
          

          

            Co-Chair
                OASIS SCA
                Assembly TC 
            
             
              
            
            
              

            
          

          

            IBM
                Software Group
              
            
              
            
            
              

            
          

          

            Phone:
              
            
            +44-1962
                818014
              
            
              
            
            
              

            
          

          

            Mobile:
              
            
            +44-7802-467431
                (274097)
              
            
              
            
            
              

            
          

          

            e-mail:
              
            
            
              
            
              
            
            
              

            
          

          

             
              
            
          

          

             
          

        
      
      

      

        

        

      
      
        
          

            From:
              
            
            Eric
                Johnson <>
              
            
          

          

            To:
              
            
            Anish Karmarkar <>
              
            
          

          

            Cc:
              
            
            
              
            
          

          

            Date:
              
            
            07/12/2010 00:11
              
            
          

          

            Subject:
              
            
            Re: [sca-assembly]
                Misadventures exploring
                "@coupledTo" for proposed resolution of ASSEMBLY-227
          

        
      
      

      

      
      

        

      

          Hi Anish,

          

          On 12/6/10 3:57 PM, Anish Karmarkar wrote:

          > I think this is fine.

          > Although, I do find the minimal change to CTs via Mike's
          proposal
          

          > attractive. But certainly understand the complications
          that come with
          

          > it wrt policy/intent and constrains like everything has
          to be promoted
          

          > or connected.

          >

          > A minor difference, perhaps inconsequential at this stage
          is, wrt
          how 

          > I envisioned Mike's proposal to work:

          > I didn't think of a @mustConnectTo or @coupledTo as the
          attribute
          we 

          > would use but an attribute such as @label or @groupID,
          which would
          be 

          > any arbitrary string. The @mustConnectTo or @coupledTo
          identified
          

          > other consumers (or producers). I would rather the
          producers not point
          

          > to consumers (or vice versa). Instead, the producers and
          consumers
          

          > that are to be connected together would be identified
          with a common
          

          > label/group id.

          

          In one of the later emails, Mike and I discussed the problems
          with a 

          generic label, and I think we both agreed that a "groupID"
          kind
          of 

          notion allowed for an extra axis of flexibility (promoting to
          two 

          consumers on the composite, for example, but assigning the
          same group 

          ID) that isn't required by the use case, and simply introduces
          an extra
          

          opportunity for confusion and mis-wiring.  So we had agreed on
          

          @mustConnectTo in the email referenced below (00100).

          

          -Eric.

          

          >

          > -Anish

          > -- 

          >

          >

          > On 11/30/2010 1:47 PM, Eric Johnson wrote:

          >>   As per my action item, I've been trying to write up
          the
          approach that

          >> I agreed to, the one that Mike suggested:

          >>

          >> http://lists.oasis-open.org/archives/sca-assembly/201011/msg00100.html

          >>

          >> Mike labeled this as "@mustConnectTo" in his
          proposal,
          but I thought it

          >> more natural to call this "@coupledTo".

          >>

          >> Rather than spell out the changes I was making, let
          me instead
          describe

          >> the corner I found myself in.

          >>

          >> Just about the time I wrote this:

          >>

          >> "The */coupled consumer and producer of a component/*
          is
          defined as a

          >> consumer and producer from a component, where the
          componentType
          of the

          >> component in question defines a consumer that has
          been @coupledTo
          a

          >> producer from the same component."

          >>

          >> ... I realized I was in trouble.

          >>

          >> To make this notion work, when talking about
          composites, we have
          to make

          >> normative statements to the effect of "whenever you
          promote
          a consumer

          >> coupled to a producer, or vice-versa, the "coupled"
          consumer or producer

          >> MUST also be promoted, and the resulting consumer and
          producer
          MUST be

          >> reflected into the componentType of the composite as
          being coupled."
          To

          >> that end, I wanted to define a notion of "coupled
          consumer
          and producer

          >> of a component." That way, I could say more simply:

          >>

          >> "Either both parts of a coupled consumer and producer
          of
          a component

          >> MUST be promoted and remain coupled, or neither is."

          >>

          >> We've also discussed that a "coupled consumer and
          producer
          of a

          >> component" must also both be connected to a channel,
          if either
          of 

          >> them are.

          >>

          >> I can only begin to imagine the verbal knots we're
          going to get
          into

          >> when we start applying policies, and have to
          introduce gems like
          "the

          >> coupled consumer and producer of a component" must
          share
          the same policy

          >> intents and policy sets.

          >>

          >> The difficulty here stems from a simple problem -
          producers and

          >> consumers, so far at least, have independent
          existence, and now
          we want

          >> to add text that couples them together tightly while
          still giving
          them

          >> an independent identity.

          >>

          >> Having tried to write it up that way, I conclude it
          is far more
          natural

          >> to reflect the notion of "prosumer"

          >> (http://en.wiktionary.org/wiki/prosumer)
          (or conducer

          >> http://en.wiktionary.org/wiki/conduce?)
          as Anish has stated, because:

          >>

          >>     * That creates a thing with a single identity, to
          which specific

          >>       rules can be applied

          >>     * You don't have to create normative rules about
          how coupled

          >>       consumers and producers must be both promoted
          or neither is

          >>       promoted, and likewise about how they're
          both wired to a channel

          >>       or not. With a single prosumer, there's no
          question of a split, so

          >>       fewer normative constraints are required.

          >>     * The policy questions, as applied to a prosumer,
          are likely

          >>       different than those applied to consumers
          and producers 

          >> independently

          >>

          >> The beauty of the "coupledTo" approach is that it
          leaves
          the

          >> componentType almost untouched - with just a single
          additional
          attribute

          >> on either the consumer or producer. Unfortunately, I
          think adds
          huge

          >> conceptual cost, and based on what I've seen from
          what I've tried
          to

          >> write up, it obscures the underlying intended model.

          >>

          >> Having come to this conclusion, and considering that
          I want something

          >> ready for our next call, I'm going to take a run at
          writing up
          the

          >> "prosumer" approach starting Thursday or Friday of
          this
          week. That is,

          >> unless I hear from others enough that convinces me
          I'm jumping
          the gun.

          >>

          >> -Eric.

          >>

          >

          >
          ---------------------------------------------------------------------

          > To unsubscribe from this mail list, you must leave the
          OASIS TC that

          > generates this mail.  Follow this link to all your TCs in
          OASIS
          at:

          > https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php

          

---------------------------------------------------------------------

          To unsubscribe from this mail list, you must leave the OASIS
          TC that

          generates this mail.  Follow this link to all your TCs in
          OASIS at:

        https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
          

        

        

      

      

      

      

      
      

        
      
Unless stated otherwise
            above:

            IBM United Kingdom Limited - Registered in England and Wales
            with number
            741598. 

            Registered office: PO Box 41, North Harbour, Portsmouth,
            Hampshire PO6
            3AU 
      

      

        

          

        

        
      

      

        

        

        
        

        

        
      

      

        

        
      
Unless stated otherwise
            above:

            IBM United Kingdom Limited - Registered in England and Wales
            with number
            741598. 

            Registered office: PO Box 41, North Harbour, Portsmouth,
            Hampshire PO6
            3AU