OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

wsbpel message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [wsbpel] Issue - 107 - Extension points and opacity


Yaron,


* As for abstract process usage *

I agree that there CAN be two kinds of usages for abstract process.

I believe Usage #1 is useful. Hopefully nobody in the TC disagrees.

I am yet to be convinced of the usefulness of #2.
I don't care how, for example, my trading partner implements
the service as far as the implementation adheres to the agreed-upon interface.
I believe standardizing on template should require more effort and time than
standardizing on interface. I guess the extra effort and time cannot be justified
against the merit expected in most cases. I see 80%-20% principle here.


* As for putting <receive> into <opaque> *

I think we agree on this. I should have clarified what I meant "in most cases"
in my original statement:
 >> Therefore, I think putting <assign> in the place of <opaque> should be
 >> acceptable (at least in most cases, I believe) while putting <receive> is

If putting <receive> does not change the public (in other words, observable-
to-the-outside-party) behavior, it is legal. This is true for all other
activities.


* As for the two examples of ambiguity *

What I had in mind was Usage #1.
Do you agree that if we are to support only #1, we don't need <opaque>?

If we are to support #2, it seems reasonable to have a measure to
specify where in the process one can/must put his/her own implementation
details. I agree that <opaque> is a good candidate as the measure.

Yuzo Fujishima
NEC Corporation



Yaron Y. Goland wrote:

> I actually see abstract processes being used in two different contexts.
> 
> #1 - To define the externally visible contract for a protocol. That is, 
> system A wishes to work with system B. System B publishes an abstract 
> process. System A writes its code to work with System B's abstract 
> process and so is able to interoperate with System B's executable process.
> 
> #2 - To provide templates for those wishing to provide implementations 
> of standardized services. For example, the International Association of 
> Widget makers provides a standard for a widget request service. As part 
> of that standard they provide an abstract process definition that 
> specifies how someone implementing the widget request service is to 
> behave. So when a widget maker decides to implement the widget request 
> service they will validate their executable code against the abstract 
> process definition. In other words, they must make sure that their 
> executable process does the same thing the abstract process definition 
> specifies. This is the inverse of the previous example.
> 
> To your point about being able to put in an assign but not a receive, I 
> would offer the following as a counter example. Imagine that a widget 
> maker implementing the widget request service adds in a receive to their 
> implementation of the widget request service that waits for up-to-date 
> information from the widget factories as to the current number of 
> available widgets. This receive not be specified in the abstract process 
> definition since it is not relevant to that definition how the widget 
> request service knows how many widgets are available. So in this case it 
> is completely reasonable for the executable process to add in a receive 
> that was never specified in the abstract process definition.
> 
> Finally, as to your assertion that opaque is not necessary it is very 
> difficult to respond to an assertion. In my original e-mail below I 
> provide two examples where the use of either nothing or empty causes 
> ambiguities and then show how opaque resolves those ambiguities. If you 
> could illustrate that the ambiguities I describe don't actually exist 
> then it would seem likely that you would have made the case that opaque 
> is unnecessary.
> 
>     Thanks,
>         Yaron
> 
> Yuzo Fujishima wrote:
> 
>>
>>
>> Hi,
>>
>> I believe that an abstract process defines the behavior of a process that
>> is observable from outside. In other words, an abstract process is a
>> contract to outside parties. In addition, I assume that an abstract
>> process must be unambiguous as a contract although it does not restrict
>> implementation details.
>>
>> In my opinion, the executable process corresponding to an abstract 
>> process
>> can be implemented in any way the implementor like as far as the contract
>> is satisfied. At the same time, any implementation that does not satisfy
>> the contract should be deemed incompliant.
>>
>> Therefore, I think putting <assign> in the place of <opaque> should be
>> acceptable (at least in most cases, I believe) while putting <receive> is
>> in many cases illegal because it does modify the observable behavior.
>>
>> That being said, my conclusion is that I don't see the necessity of
>> introducing <opaque>. One can derive an executable process from an 
>> abstract
>> process definition by inserting any activity anywhere as far as the 
>> contract
>> is satisfied.
>>
>> Yuzo Fujishima
>> NEC Corporation
>>
>> Yaron Y. Goland wrote:
>>
>>  > One of the big concerns that came up on today's discussion of issue 
>> 107
>>  > was how the opacity proposal altered the ability to extend an abstract
>>  > process.
>>  >
>>  > For example, imagine the following abstract process that uses opaque:
>>  >
>>  > process
>>  >    opaque
>>  >    receive
>>  >    reply
>>  >
>>  > If someone wanted to build an executable process based on this 
>> abstract
>>  > process would it be 'legal' to write something like the following and
>>  > still have it be considered valid against the abstract process?
>>  >
>>  > process
>>  >    ...
>>  >    receive
>>  >    assign
>>  >    reply
>>  >
>>  > In other words, could the executable process programmer insert the
>>  > 'assign' activity between the receive and reply activity and still 
>> have
>>  > their executable process be considered valid against the abstract
>>  > process definition?
>>  >
>>  > In my proposal the answer is - yes. In my opinion one is free to 
>> extend
>>  > an abstract process at absolutely any point one wants. The purpose of
>>  > validating an executable process against an abstract process is to 
>> make
>>  > sure that the executable process does 'at least' what the abstract
>>  > process does but it is free to do much more.
>>  >
>>  > The purpose of opaque is not to restrict where one can extend an
>>  > abstract process when creating an executable process. The purpose of
>>  > opaque is to specify where the abstract process is intentionally 
>> leaving
>>  > out data in situations where the absence of information could be 
>> ambiguous.
>>  >
>>  > For example, let's say that an abstract process has the following code
>>  > snippet:
>>  >
>>  > process
>>  >    scope
>>  >       eventHandlers
>>  >          onEvent ...
>>  >       ...
>>  >
>>  > In this case the onEvent handler in the abstract process has no 
>> content.
>>  >
>>  > So now the reader of the abstract process is left with a quandary. Is
>>  > the onEvent handler empty because the definition of the event 
>> handler is
>>  > left up to the implementer or is the event handler empty because the
>>  > programmer of the abstract process screwed up and forgot to put in the
>>  > definition for the event handler?
>>  >
>>  > One way around this ambiguity is to do the following:
>>  >
>>  > process
>>  >    scope
>>  >       eventHandlers
>>  >          onEvent ...
>>  >             empty
>>  >       ...
>>  >
>>  > By inserting empty it is clear to the reader that the onEvent handler
>>  > was intended to not have any definition. The only problem is that 
>> empty
>>  > has its own very specific meaning - do nothing. So now there is 
>> another
>>  > ambiguity. Is the abstract process author telling the executable 
>> process
>>  > author 'Write your own code for this event handler' or are they 
>> telling
>>  > the executable process author 'You are required to catch the messages
>>  > identified by this event handler but then you should do nothing with
>>  > those messages'?
>>  >
>>  > This is where opaque comes in.
>>  > process
>>  >    scope
>>  >       eventHandlers
>>  >          onEvent ...
>>  >             opaque
>>  >       ...
>>  >
>>  > Now there is no ambiguity. The abstract author is explicitly 
>> telling the
>>  > executable author 'You must catch the messages identified by this 
>> event
>>  > handler but how you handle them is up to you.'
>>  >
>>  > It is only necessary, however, to use opaque if its absence would lead
>>  > to ambiguity. So, going back to the example, that started this mail,
>>  > there is no need to specify
>>  >
>>  > process
>>  >    opaque
>>  >    receive
>>  >    opaque
>>  >    reply
>>  >
>>  > In order to tell the executable programmer "You MAY insert activities
>>  > between the receive and reply".
>>  >
>>  > It's fine to just specify:
>>  >
>>  > process
>>  >    opaque
>>  >    receive
>>  >    reply
>>  >
>>  > The right to insert additional activities between the receive and 
>> reply
>>  > is always implicit and unambiguous so opaque is not needed.
>>  >
>>  >     I hope this clarifies things,
>>  >
>>  >         Thanks,
>>  >
>>  >             Yaron
>>  >
>>  >
>>  > To unsubscribe from this mailing list (and be removed from the 
>> roster of
>>  > the OASIS TC), go to
>>  > 
>> http://www.oasis-open.org/apps/org/workgroup/wsbpel/members/leave_workgroup.php. 
>>
>>  >
>>  >
>>  >
>>  >
>>
> 
> 



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]