<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>Toulouse, France, September</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Deriving component designs from global requirements</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Gregor v. Bochmann</string-name>
          <email>bochmann@site.uottawa.ca</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>School of Information Technology and Engineering (SITE) University of Ottawa</institution>
          ,
          <country country="CA">Canada</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2008</year>
      </pub-date>
      <volume>29</volume>
      <issue>2008</issue>
      <fpage>55</fpage>
      <lpage>69</lpage>
      <abstract>
        <p>ion from the physical distribution of the different system functions, into a system design that identifies a certain number of distributed components. The temporal constraints of the global requirements on the execution of the different activities imply certain coordination messages between the different system components. The paper presents a transformation algorithm that derives, from a given global behavior, the local behaviors for each of the system components including the exchange of coordination messages for the global synchronization of the activities. In contrast to earlier work, strong and weak sequencing is distinguished and the primitive sub-activities included in the global behavior descriptions may be collaborations involving several components.</p>
      </abstract>
      <kwd-group>
        <kwd />
        <kwd>Distributed applications</kwd>
        <kwd>workflow</kwd>
        <kwd>model transformations</kwd>
        <kwd>Activity Diagrams</kwd>
        <kwd>component design</kwd>
        <kwd>protocol derivation</kwd>
        <kwd>distributed system design</kwd>
        <kwd>Web Services</kwd>
        <kwd>design derivation</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1 Introduction</title>
      <p>Various kinds of system models can be used during the system development process.
In this paper, we are concerned with the transformation from a global requirements
model, which describes the functional behavior of a distributed system in an abstract
manner, to a distributed system design where the different system components are
identified and their behavior must be determined such that their interactions give rise
to a behavior satisfying the global requirements model. At the design level, the
behavior of the different system components are often modeled using communicating
state machines or modeling languages such as SDL or UML State Diagrams. The
translation from these models into implementation code can be largely automated.</p>
      <p>We consider in this paper distributed applications, for instance systems providing
communication services, workflow management systems, e-commerce applications,
etc. Various notations have been proposed for defining the global requirement models
for such system. We mention in particular UML Activity Diagrams, Use Case Maps
(UCM), the Process Definition Language (XPDL) of the Workflow Management
Coalition, the Business Process Execution Language (BPEL), and the Web Services
Choreography Description Language (WS-CDL) developed by W3C. These different
notations contain many common concepts, but also show important differences. They
all have in common that the overall workflow behavior can be decomposed into
several sub-activities, and further into sub-sub-activities. Most of these notations
assume that the basic (primitive) activities in this behavior decomposition are
activities that are allocated to a single system component within the architectural
design of the system. However, for many of these applications, the basic building
blocks of the behavior are activities that are actually collaborations between several
system components, for instance a service operation between a client and a server.
Therefore we have proposed to use the UML Collaborations as the basic building
blocks for constructing global requirement models [1]. Our approach was to use the
sequencing operations of UML Activity Diagrams and use Collaborations as the basic
activities; the temporal order among these collaborations is then defined by the flow
relations of the Activity Diagrams (an example is discussed in Section 2).</p>
      <p>Before the transformation into a design model, it is important to define the
architectural design and to identify the different system components that are involved
in providing the different functions of the system. For each of the primitive
collaboration activities identified in the global requirements model, one has to
determine which system component will implement each of the collaboration roles
involved. This goes hand in hand with the allocation of system resources and is very
important for obtaining the desired system performance characteristics. This question
of what is the best architectural design, resource allocation and allocation of
collaboration roles to different system components is not further developed in this
paper. Instead, we concentrate here on the subsequent question: What should be the
dynamic behavior of each of the system components in order to coordinate the
activities in such a manner that the sequencing rules of the global requirements model
will be satisfied.</p>
      <p>
        We note that the same kind of question has been addressed by many papers during
the last 10 years in a context where the global requirements are defined in terms of
Message Sequence Charts (MSCs) or UML Sequence Diagrams. In this context, one
usually wants to describe the behavior of each system component in the form of a
state machine. This approach encountered many difficulties; a review of these issues
is included in [1]. In many cases, a given MSC execution scenario may only be
realizable by the given set of components if at the same time other so-called implied
scenarios would also be realized [
        <xref ref-type="bibr" rid="ref13">14</xref>
        ]. Furthermore, the distributed nature of the
design often gives rise to so-called race conditions which means that certain messages
may arrive before they are expected, or in a different order than expected [
        <xref ref-type="bibr" rid="ref15">16</xref>
        ].
      </p>
      <p>These difficulties are increased by the use of weak sequencing operators in the
description of the global system behavior. We note that strong sequencing between
two activities A1 and A2 means that all sub-activities of A1 must be completed before
any sub-activity of A2 may start. In contrast, weak sequencing between A1 and A2
means that each system component locally applies sequencing to the local
subactivities of A1 and A2, that is, a component may start with sub-activities that belong
to A2 as soon as it has completed all its local sub-activities that are part of A1. Strong
sequencing implies weak sequencing, but not inversely. We note that weak
sequencing was introduced in High-Level MSCs (HMSCs) as the normal sequencing
operator between different sequence charts. It is also supported in UML Sequence and
Interaction Overview diagrams.</p>
      <p>We think that weak sequencing is an important concept for modeling abstract
requirements of distributed systems, because it requires less synchronization
messages than strong sequencing. Therefore we consider in this paper weak and
strong sequencing. We use a number of temporal ordering operators, similar to those
found in Activity Diagrams, XPDL and BPEL, to build the global requirements model
for a system. In this paper, we show how such an abstract model, together with the
allocation of collaboration roles to the system components identified by the
architectural design, can be automatically transformed into a set of component
behavior models. These component models are correct by construction, that is, they
will give rise to a global system behavior that satisfies the global requirements model.</p>
      <p>
        The transformation algorithm presented in this paper is inspired by some of our
early work under the title “Deriving protocol specifications from service
specifications” in the 1980ies [
        <xref ref-type="bibr" rid="ref2 ref3 ref4 ref5">3, 4, 5, 6</xref>
        ], where we concentrated our attention on
strong sequencing. The main contribution of this paper is the extension of the
previous work to requirement specifications that contains weak sequencing. Some
inspiration also came from my collaboration with Humberto Nicolás Castejón and
Rolv Braek on the modeling of distributed applications using the concept of
collaborations [
        <xref ref-type="bibr" rid="ref1">1, 2</xref>
        ] and the discussion of problems that must be solved during the
development of the component behaviors.
      </p>
      <p>The paper is structured as follows. In Section 2, we consider the temporal ordering
of activities in a global requirements model, present the ordering operators that we
assume in this paper and introduce a simple example. The main body of the paper is
Section 3. After a review of past work on the transformation from global requirements
to component behaviors, we describe in Section 3.1 the principles of our automatic
transformation approach. One important question, not addressed by the earlier work
mentioned above, is the following: In the case of choices, it is not evident how a
component involved in some specific sub-activity may determine when this
subactivity is completed and the next sub-activity (in weak sequence) may be started ? –
This problem is solved by the so-called choice indication messages. Then in Section
3.2, we present an algorithm that does this transformation automatically. The
application of this algorithm to the example of Section 2 is discussed in Section 4.
Finally, Section 5 provides our conclusions.</p>
    </sec>
    <sec id="sec-2">
      <title>2 Describing composed collaborations and work flow applications</title>
      <p>As mentioned above, various notations have been proposed for describing global
requirements for distributed applications, workflows, or communication services. We
consider here in particular UML Activity Diagrams (AD). They include the following
concepts for defining the order of execution of activities: sequential execution,
alternative choice, concurrency, as well as loops and partial-order dependencies. In
addition, they support interruptible regions of activities which are useful for modeling
exception handling and external priority interrupts. ADs also support the explicit
modeling of dataflow relationships between different activities and the specification
of the type of data exchanged (using UML Class Diagrams). XPDL and BPEL have
similar constructs for describing the control flow of applications. All these notations
support hierarchical decomposition where an activity shown at one level of
abstraction as a basic, non-divisible activity can be described at a more detailed level
to be composed out of a number of smaller units with a specific control structure
defining the order of execution of these more basic activities. It is our intention to
support these same concepts for describing the control structure using the notation
introduced below.</p>
      <p>We note that most of these notations assume that the basic (primitive) activities in
this behavior decomposition are activities that are allocated to a single system
component within the architectural design of the system. This is also the case for
Message Sequence Charts (MSCs) or UML Sequence Diagrams, where the primitive
actions are the sending or reception of messages by specific system components. In
contrast, as mentioned in the Introduction, we assume that the basic activities in the
description of the overall behavior may be collaborations involving several
components.</p>
      <p>One may ask the question whether different notations are required for describing
the dynamic behavior of the global requirements model, on the one hand, and the
behavior of the different system components, on the other hand. In this paper, we use
essentially the same behavior expressions to describe both of these behaviors.
However, the distinction between weak and strong sequencing disappears when one
deals with the behavior of a single component. The operators used for describing the
temporal properties of these behavioral models are listed in Table 1. They are closely
related to the sequencing operators of UML Activity Diagrams and High-Level
MSCs. We distinguish between strong and weak sequence. Following the spirit of
“Structured Programming”, we restrict ourselves to flow control constructs that have
a single entry point and a single exit point.</p>
      <p>We write “&lt;name&gt;(R) = C” to indicate that the behavior of a collaboration, called
&lt;name&gt;, which involves the set of roles R, is given by the expression C. The
expression is composed out of primitive actions, the invocation of collaborations and
certain sequencing operators as shown in Table 1. We refer to the sub-expressions C1,
C2, and C3 in the table as sub-collaborations of the collaboration C. We note that our
notation does not include the equivalent of the Join and Merge operators used in
Activity Diagrams. However, the presence of a Merge node is implied at the end of a
choice expression, and a Join node is implied at the end of the concurrency construct.</p>
      <p>It is possible to invoke a collaboration that has no explicitly defined behavior; in
this case, its behavior may be defined by some other formalism, such as a sequence
diagram or an implementation in some programming language.</p>
      <p>As an example we consider the telemedicine consultation service described in [1].
A patient is being treated over an extended period of time for an illness that requires
frequent tests and consultations with a doctor at the hospital to set the right doses of
medicine. Since the patient may stay at home and the hospital is a considerable
distance away from the patient’s home, the patient has been equipped with the
necessary testing equipment at home. The patient will call the hospital on a regular
basis to have remote tests done and consult with a doctor. A consultation may proceed
as follows: The patient calls the telemedicine reception desk to ask for a consultation
session with one of the doctors. The receptionist will register the information needed,
and then see if the doctor is available (collaboration &lt;registr&gt; below). If the doctor is
available, the patient will be assigned to the doctor and the consultation can start.
Otherwise, the patient is put on hold, possibly listening to music, until a doctor is
available (collaboration &lt;w&gt; below). If the patient does not want to wait any longer,
he/she may hang up (action &lt;h-up&gt; below) and call back later.</p>
      <p>
        Table 1: Operators used in behavior expressions
Construct Notation Explanation of the semantics
primitive &lt;action&gt;(r) Execution of a local action with name &lt;action&gt;
activity performed by role r
invocation &lt;subcol&gt;(R) Execution of a collaboration with name &lt;subcol&gt;
of sub-col. involving the set R of participating roles
strong C1 ;s C2 C2 is executed after C1 in strong sequence, that is, all
sequence actions of C1 are completed before C2 can start
weak C1 ;w C2 C2 is executed after C1 in weak sequence, that is, only
sequence local order is enforced by each participating role
choice C1 [] C2 Either C1 or C2 is executed; this may be a local choice
(that is, the choice is performed by a single role /
component) or competing initiatives from several roles;
for a more detailed discussion, see [
        <xref ref-type="bibr" rid="ref1">2</xref>
        ])
strong C1 * s C2 C1 is executed zero, one or more times and then C2 will
while loop be executed; more precisely, the behavior starts with a
choice between C1 and C2 ; if C1 is executed, there is
strong sequencing between the end of C1 and the choice
of executing C1 again or terminating the loop with C2 ;
we assume that the choice is local (performed by a
single role).
weak while C1 * w C2 As above, except that weak sequencing is used between
loop the end of C1 and the choice of executing C1 again or
terminating the loop with C2
concurrency C1 || C2 C1 and C2 are executed concurrently
interruption C1 |&gt; C2 C1 is executed, but may be interrupted by C2 which
else C3 represents a choice with priority; C2 is enabled as soon
as C1 starts. If C2 does not occur (or occurs when C1 is
already terminated) then C3 will occur after C1 (this is
the other choice alternative).
      </p>
      <p>This behavior can be described using the operators defined in Table 1 as follows:
&lt;telemed&gt; = &lt;registr&gt;{P, R} ;w ( &lt;w&gt;{P, R} |&gt; &lt;h-up&gt;{P} else &lt;act&gt;{P, R, D} )
where &lt;w&gt;{P, R} = &lt;wait&gt;{P, R} *w İ and</p>
      <p>
        &lt;act&gt;{P, R, D} = &lt;assign&gt;{R, D} ;w &lt;consult&gt;{P, D}
The roles involved in each activity are indicated by the upper indices (P stands for
patient, R for receptionist, and D for doctor). This definition of the &lt;telemed&gt;
workflow indicates that the registration of the patient is followed by a waiting period
&lt;w&gt; that may be empty (İ ); this waiting period may be interrupted when the patient
hangs up the telephone. The waiting period, if not interrupted, is followed by the
&lt;act&gt; sub-collaboration which consists of the weak sequential execution of the
assignment of the patient to the doctor followed by the consultation. We note that the
detailed interactions involved in each of these activities (or collaborations) are not
specified, and we do not need to know them for what we discuss in this paper. The
behavior can also be represented by the UML Activity Diagrams shown in Figure 1.
Our early work in this area [
        <xref ref-type="bibr" rid="ref2 ref3 ref4">3, 4, 5</xref>
        ] covered behavior expressions containing
primitive actions, invocations of behaviors without recursion, strong sequence, choice
and concurrency. Coordination messages were introduced for a strong sequence "C1
;s C2" to ensure that all activities of C1 are completed before any activity of C2 can
start. The various messages introduced by the derivation algorithm included a
parameter that avoided any ambiguities concerning the choices that were made during
the execution of the behavior. A later paper [
        <xref ref-type="bibr" rid="ref5">6</xref>
        ] dealt with recursive behavior
invocations and interruption.
      </p>
      <p>
        In the above references, it was assumed that a choice between different branches of
execution is always made by a single component. This is called a "local choice". In
the case of a "non-local choice" where several components are involved [
        <xref ref-type="bibr" rid="ref6">7</xref>
        ],
distributed algorithms for making a decision may be introduced, for instance, based
on a circulating token. Gouda showed in 1984 [
        <xref ref-type="bibr" rid="ref7">8</xref>
        ] how a choice involving competing
initiatives from two different components may be resolved by giving priority to one of
the parties.
      </p>
      <p>
        During the last 10 years, much research was concerned with weak sequencing and
related race conditions. Most of this work was in the context were the system
behavior is defined in terms of MSCs or Sequence Diagrams; and it was pointed out
that one sequence diagram, when implemented by a set of components, may
necessarily give rise to other so-called “implied sequences” [
        <xref ref-type="bibr" rid="ref13">14</xref>
        ]. The difficulties of
coordination for distributed behaviors including weak sequencing have been
summarized in [
        <xref ref-type="bibr" rid="ref1">2</xref>
        ]. An interesting observation was made by Mooij [
        <xref ref-type="bibr" rid="ref8 ref9">9, 10</xref>
        ] who points
out that many race conditions can be avoided by making a distinction between the
reception of a message by a component and the consumption of this message by the
behavior of a role played by this component. He assumes that received messages are
put into a buffer pool from where appropriate messages may be fetched when the
destination role is ready to process them. A similar idea is the use of the SDL SAVE
construct to reorder the sequence of received messages [
        <xref ref-type="bibr" rid="ref14">15</xref>
        ].
      </p>
      <p>
        In the area of Web Services and workflow management, several approaches have
been described for deriving distributed execution environments for
services/workflows that are specified in a global (centralized) view. For instance, the
decentralized execution of composite Web Services specified in BPEL has been
proposed in [
        <xref ref-type="bibr" rid="ref17">18</xref>
        ]. Here the global BPEL specification is partitioned into small code
fragments which are then combined (based on data flow relations) into several local
partitions that are executed on the different servers identified in the original BPEL
specification. The resulting implementation is in general more efficient since the
number of required messages is reduced. A proposal for workflow fragmentation and
distributed execution [
        <xref ref-type="bibr" rid="ref18">19</xref>
        ] is also based on data flow and uses a variant of Petri nets
for describing the workflow to be performed. The workflow is partitioned into
fragments of which the first is executed locally and the others may be distributed to
other servers. The choice of these servers can be performed dynamically during the
execution of the current fragment. A theoretically oriented paper [
        <xref ref-type="bibr" rid="ref19">20</xref>
        ] considers a
formalization of WS-CDL for the specification of the global behavior and the ʌ –
calculus for the behaviors of the components. We note that these approaches consider
that the basic activities to be performed can be allocated to a single component
(server). Therefore they cannot deal with the more general situation considered in this
paper, where the basic activities are collaborations that may involve, each, several
collaborating components.
      </p>
      <sec id="sec-2-1">
        <title>3.1 Proposed derivation method</title>
        <p>
          The derivation method described here uses the following ideas described previously:
(a) coordination messages for strong sequencing [
          <xref ref-type="bibr" rid="ref2 ref3 ref4">3, 4, 5</xref>
          ], (b) the idea that messages
should have an identifier that indicates to which sub-expression of the behavior
expression they belong (particular methods of obtaining such an identifier were
proposed by Nakata [
          <xref ref-type="bibr" rid="ref10">11</xref>
          ], and for Application Protocols in the ASN.1 standard), and
(c) the idea of buffering received messages until they are processed, as proposed in [
          <xref ref-type="bibr" rid="ref8 ref9">9,
10</xref>
          ]. The proposed derivation method extends the previous work by providing a
method to deal with weak sequencing. It also introduces the treatment of loops and a
particular form of interruption. For the treatment of non-local choices, the reader is
referred to [
          <xref ref-type="bibr" rid="ref1">2</xref>
          ].
        </p>
        <p>The main ideas underlying the proposed derivation method, specifically for dealing
with weak sequencing, can be summarized as follows:
1. Each role knows which sub-collaborations are currently active. Message
reordering at reception is used to accept only those messages that relate to
active collaborations.
2. It is assumed that sub-collaborations that may be concurrently active have
disjoint sets of messages that can be received by a given role; or simply, that
their message sets are disjoint.
3. At a given role, each sub-collaboration is in one of the following phases: (1)
inactive (messages for this sub-activity are not accepted), (2) enabled (the
role is not a starting role, the messages of this sub-activity are accepted), (3)
active (local activities for this sub-activity have started, messages are
accepted). We say that a sub-collaboration ends when the role knows that no
further actions pertaining to this sub-collaboration are required. When a
subcollaboration ends, it goes back into the inactive phase.
4. The transition from inactive to enabled occurs when the "previous"
subcollaboration ends. If the role is a starting role, it may immediately go into
the active state. A non-starting role enters the active state when it receives
(and accepts) the first message pertaining to this sub-collaboration. When the
sub-collaboration ends, the "following" sub-activity goes into the enabled or
active state.
5. It is therefore important that each role knows when an active collaboration
ends. This happens when the final action (for this role) is performed. If the
role is participating, it should know when all actions pertaining to this
subcollaboration have been performed (termination decision). If it is not
participating, there is no point in doing anything.
6. If the sub-collaboration contains no choice, then each role knows what
actions must be locally performed. The termination decision is easy: the
subcollaboration ends when all these actions have been performed. If the
subcollaboration consists of a choice C1 [] C2, there are the following cases:
o The role participates in both alternatives: choice propagation is
assured by the disjointness of the message sets of the two
alternatives. The participating role will know which alternative is
performed and will therefore know which actions must be
performed.
o The role does not participate in any alternative: there is no
participation at all.
o The role participates in C1 but not in C2 (or inversely): If C1 is
chosen, there is no problem. If C2 is chosen, we have to introduce a
special kind of coordination message sent to this role by a role
participating in C2 which indicates that C2 was chosen. We call this
message a choice indication message. On the reception of this
message, the given role can consider that the choice has ended.</p>
        <p>The above discussion indicates that we have to identify for each collaboration or
sub-collaboration the following items which are defined based on the partial order
between the actions that compose the collaboration:
• Special kinds of actions of a collaboration
o Initial action(s): An action of a collaboration is initial if there is no other
action in that collaboration that precedes it.
o Final action(s): An action of a collaboration is final if there is no other
action in that collaboration that succeeds it.
o Last action(s) of a given role: During the execution of a collaboration, an
action is a last action for a given role if the action is performed by that role
and there is no other action in that collaboration that must be performed by
that role after the given action.
• Different roles involved in a collaboration
o Starting role: this is a role that performs an initial action of the
collaboration or an initial action of an initial sub-collaboration.
o Terminating role: this is a role that performs a final action of the
collaboration or a final action of a final sub-collaboration.
C1 || C2 PR(C1) U PR(C2)
C1 |&gt; PR(C1) U PR(C2) U
else C3 PR(C3)</p>
        <p>Before we can derive the behavior of the distributed system components that
should implement the actions defined by the collaboration behavior, we have to
determine how the different roles defined in the behavior of the collaboration are
allocated to the different system components. In general, each system component
should have some role to play, but several behavior roles may be allocated to the
same system component. We assume in the following that a function Alloc() defines
for each role the system component to which it is allocated.</p>
        <p>After having calculated the starting (SR), terminating (TR) and participating (PR)
roles for the collaboration and each of its sub-collaborations, we then can derive the
behavior for each system component as follows. Basically, the control flow of the
behavior of each system component follows the control flow of the collaboration
behavior; it is obtained from the global behavior specification of the collaboration "by
projection" onto the particular component. This means that actions not local to the
component in question are dropped. Therefore any sub-collaboration for which no
participating role is allocated to the component in question will also be dropped.</p>
        <p>
          In addition, the following coordination messages between different system
components are introduced (for details, see Table 3):
− Flow message for coordinating strong sequencing, abbreviated fm(x) or fim(x, i);
each message includes a parameter x which indicates to which strong sequencing
construct the message belongs within the syntactical structure of the overall
collaboration behavior, as originally proposed in [
          <xref ref-type="bibr" rid="ref2">3</xref>
          ].
− Choice indication message for propagating the choice to a component that does not
participate in the selected alternative, abbreviated cim(y) where y indicates to
which choice construct the message refers; note that such a message is only
required if the destination component is involved in some activities following the
choice.
− Interrupt and interrupt enable messages for coordinating the interruption of an
ongoing activity, abbreviated im(z) and iem(z), respectively, where z indicates to
which interrupt construct the message refers.
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>3.2 Algorithm for deriving component behaviors from global behavior</title>
        <p>In the following, we define an algorithm that realizes the derivation method explained
in Section 3.1. We assume that the overall workflow is defined by a
maincollaboration and several sub-collaborations, identified by their name, which are
invoked by the main-collaboration or some activated sub-collaboration. Each of these
collaborations is defined by a behavior expressions C which is formed by primitive
actions, sub-collaboration invocations and the operators introduced in Table 1. For
each of the components c that implements the roles of these collaborations, we define
in the following a translation functions Tc that translates the behavior expressions of
the collaborations into local behavior expressions to be performed by the component
in question. These local behavior expressions will include those primitive actions of
the collaborations that are performed by the component in question, in addition to the
sending and receiving of coordination messages as required by the behavior
expressions. Overall, the syntactic structure of the resulting behavior expressions for
all these components resembles the syntactic structure of the original expression of
the global collaboration behavior.</p>
        <p>
          In the following we make the assumption that all choices are local. We note that
certain standard approaches to solving non-local choices could be easily integrated
with our derivation algorithm. However, as explained in [
          <xref ref-type="bibr" rid="ref1">1, 2</xref>
          ], the nature of non-local
choices may vary a lot in practice and it appears necessary to allow for ad-hoc
solutions to fit the specific requirements in particular cases
        </p>
        <p>Table 3 contains the definition of the translation function Tc (C) that defines for a
given global behavior expression C the behavior of the system component c. It is
defined recursively by the rules in the table. The resulting component behavior
expression is constructed using the same sequencing operators as for describing the
global behavior, however, since the behavior is performed locally by a given
component, there is no point in making a distinction between weak and strong
sequencing. We simply use the operator “;” to denote sequential execution.</p>
        <p>The text defining the translation function in the table uses a notation similar to Java
Server Pages, namely a mixture of text that represents the generated specification of
the component behavior, and of text that represents actions and decisions to be
performed during the translation. The latter is written in italics. We also include some
comments (written between “(*” and “*)” ) and notes for making the definition of the
translation more readable.</p>
        <p>As mentioned at the beginning of Section 3.1, the parameters of the coordination
messages and the buffering of received messages before their consumption are
important elements for the correct operation of the distribution system derived by the
algorithm of Table 3. We make the following assumptions:
1. Each coordination message contains the following parameters: (a) source role,
(b) destination role, (c) name of sub-collaboration it belongs to, (d) the
particular sequencing operator instance it refers to within the global behavior</p>
        <p>
          expression of the given sub-collaboration – these are the parameters named x,
y, and z in Table 3. As noted earlier, the parameters (c) and (d) above are
important for non-ambiguous choice propagation (see also [
          <xref ref-type="bibr" rid="ref2 ref3 ref4">3, 4, 5</xref>
          ]). In
addition, the messages also need addressing information in order to be
transmitted through the network to the right computer and the responsible
application.
        </p>
        <p>The reception of coordination messages proceeds in two steps: When a
message is received by a component, it is first placed into a buffer pool, called
receive-buffer. It will be “consumed” from the receive-buffer only when the
behavior expression generated for the component according to Table 3
foresees the execution of a receive statement for a message of the specific type
and parameter values. The message parameters mentioned above, and the
additional parameter mentioned under point 4 below are used to determine
whether a message in the receive-buffer is “receivable”. If no receivable
message is in the receive-buffer, the execution of the local behavior will wait
until such a message arrives.</p>
        <p>The flow messages used within an interrupt construct, abbreviated fim(x, i),
have an additional Boolean parameter i that indicates whether an interrupt was
successful.</p>
        <p>
          The execution of a weak while loop, say C1*w C2 , within the distributed
environment may lead to situations where the component deciding the looping
conditions, say c1 , may already have performed several iterations of C1 while
another component c2 may have only started the first iteration (as shown in
Figure 9(c) of [1]). When c2 receives a flow message indicating the beginning
of C2 , it is important that c2 can determine whether C2 should be started or
whether more executions of C1 should first be performed. Therefore we
include an additional parameter, say n, in all flow messages that are part of the
coordination within C2 , which contains the number of times that C1 has been
executed. For more details, see [
          <xref ref-type="bibr" rid="ref16">17</xref>
          ].
        </p>
        <p>C = invoke
&lt;subcol&gt;(R)
C = C1 ;s C2
C = C1 ;w C2
Tc (C) = Tc (C1) “;“ SFM(C1 , C2) “;“ RFM(C1 , C2) “;“ Tc (C2)
where SFM(C1 , C2) = if c in Alloc(TR(C1)) then</p>
        <p>“send fm(x) to all c’ in (Alloc(SR(C2)) – {c})”
and RFM(C1 , C2) = if c in Alloc(SR(C2)) then</p>
        <p>“receive fm(x) from all c’ in (Alloc(TR(C1)) – {c} ”
Note: The term “– {c}” avoids that flow messages are sent to the
component itself.</p>
        <p>Tc (C) = Tc (C1) “;“ Tc (C2)
C = C1 [] C2
C = C1 * s C2
C = C1 * w C2
C = C1 || C2
C = C1 |&gt; C2
else C3
Tc(C) = DOcimc(C1, C2) [] DOcimc(C2, C1)
where DOcimc(C1, C2) = if c in Alloc(PR(C1)) then
“( Tc (C1)” if c is responsible for cim then
“|| send cim(y) to all c’ in (Alloc(PR(C2)) - Alloc(PR(C1))) )” ;
else if c in (Alloc(PR(C2) - Alloc(PR(C1))) then “receive cim(y)“
Note: The function DOcimc(C1, C2) generates code for performing
C1, and looks after the transfer of choice indication messages from
some component participating in C1 to those components not
participating in C1, but in C2.</p>
        <p>We assume Alloc(SR(C1)) = {r}, and Alloc(SR(C2)) = {r} or C2 = İ .</p>
        <p>Tc(C) =“(“ Tc(C1 ) “;“ SFM(C1 , C1) “;“ RFM(C1 , C1) “)* ; ( “ Tc(C2)
if c=r then “|| send cim(y) to all c’ in PR“ if c in PR then “|| receive
cim(y) from r“ “)” where PR = Alloc(PR(C1)) - Alloc(PR(C2)) – {r}
As above, except that the SFM and RFM constructs are absent
Tc (C) = Tc (C1) || Tc (C2)
We assume that C2 has the form “ &lt;action&gt;(r) ;s C2’ “.</p>
        <p>Tc (C) = NormalBeh ||* InterruptBeh . (see note below)
These two parts communicate within each component using the
following boolean local variables which are initially false:</p>
        <p>Interr : an interrupt occured (but it may have occurred too late)</p>
        <p>Interrupted : the normal behavior has been interrupted
In addition, a local variable I-Enabled is used by the InterruptBeh
part. The action “wait(x)”waits until the expression x becomes true.</p>
        <p>NormalBeh =
if c in Alloc(PR(C1)) then “( Tc (C1) |&gt; (wait(Interr);</p>
        <p>Interrupted := true; ) else İ );”
if c in Alloc(TR(C1)) then “send fim(x, Interrupted) to all c’ in SR”
if c in SR then “(for all c’ in (Alloc(TR(C1))–{c}) do
(receive fim(x, i) from c’; if i then Interrupted := true;);
if not Interrupted then DOcimc (C3, C’2); )
||* (wait(Interrupted); DOcimc (C’2, C3) ) ) “
else “ (DOcimc (C’2, C3) [] DOcimc (C3, C’2) ); “
where SR = (Alloc(SR(C’2)) U Alloc(SR(C3))) –{c}
InterruptBeh = if c = r then (
if c in (Alloc(SR(C1)) then “I-Enabled := true; “ else “for all c’ in</p>
        <p>(Alloc(SR(C1))–{c}) do (receive iem(z); I-Enabled := true)
|| ( wait(I-Enabled); &lt;action&gt; (* this may never happen *) ;</p>
        <p>Interr := true; send im(z) to all c’ in (Alloc(PR(C1)) - r) ; ) “
else (* c not equal r *) (
if c in Alloc(SR(C1)) then “send iem(z) to r; “
if c in Alloc(PR(C1)) then</p>
        <p>”(receive im(z) from r (*may not happen *); Interr := true; )”</p>
        <p>The expression “C1 ||* C2” has the meaning that the two sub-expressions C1 and
C2 are executed in parallel, but the whole construct terminates as soon as C1
terminates.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>4 Application to the Telemedicine example</title>
      <p>Referring to the example discussed in Section 2, let us assume that the roles P
(patient), R (receptionist) and D (doctor) are to be implemented on three different
components, also called P, R and D, respectively. In the following we explain how the
algorithm described in Section 3 can be used to derive the behavior of these
components such that they realize the correct coordination of activities among these
three components.</p>
      <p>We assume that the starting and terminating roles of the basic activities are as
follows: SR(&lt;registration&gt;) = TR(&lt;registration&gt;) = {P}; SR(&lt;wait&gt;) = {R};
TR(&lt;wait&gt;) = {P}; SR(&lt;h-up&gt;) = TR(&lt;h-up&gt;) = {P}; SR(&lt;assign&gt;) = TR(&lt;assign&gt;)
= {R}; SR(&lt;consult&gt;) = {D}; TR(&lt;consult&gt;) = {P, D}. Using Table 2, this leads to
the starting and terminating roles of the sub-activities &lt;w&gt; and &lt;act&gt; as follows:
SR(&lt;w&gt;) = TR(&lt;w&gt;) = {R}; SR(&lt;act&gt;) = {R}; TR(&lt;act&gt;) = {P, D, R};</p>
      <p>Let us first determine the behavior for the sub-activities &lt;w&gt; and &lt;act&gt; at each of
the three components:</p>
      <p>TP (&lt;w&gt;) = TP (&lt;wait&gt;) * ; receive cim(y) from R
TP (&lt;act&gt;) = TP (&lt;consult&gt;) (* P is not involved in &lt;assign&gt; *)
TR (&lt;w&gt;) = TR (&lt;wait&gt;) * ; send cim(y) to P
TR (&lt;act&gt;) = TR (&lt;assign&gt;) (* R is not involved in &lt;consult&gt; *)
TD (&lt;w&gt;) = İ</p>
      <p>TD (&lt;act&gt;) = TD (&lt;assign&gt;) ; TD (&lt;consult&gt;)</p>
      <p>Now let us determine the behaviors of the three components for the &lt;telemed&gt;
activity. Applying the rules of Table 3, we obtain the following behaviors for all
components c = P, R or D:</p>
      <p>Tc (&lt;telemed&gt;) = Tc (&lt;registr&gt;) ; Tc (&lt;w&gt; |&gt; &lt;h-up&gt;; İ else &lt;act&gt; )
= Tc (&lt;registr&gt;) ; ( NormalBeh c | | InterruptBeh c )
where TD (&lt;registr&gt;) = İ and the behaviors NormalBeh c and InterruptBeh c are
defined as follows:</p>
      <p>NormalBeh P = (TP (&lt;w&gt;) |&gt; ( wait(Interr); Interrupted := true;) else İ );
( receive cim(y) from R [] TP (&lt;act&gt;) )
InterruptBeh P = receive iem(z) from R; &lt;h-up&gt;; Interr := true; send im(z) to R
NormalBeh R = (TR (&lt;w&gt;) |&gt; ( wait(Interr); Interrupted := true;) else İ );
( receive fim(x, i) from P; if i then Interrupted := true; if not Interrupted
then TR (&lt;act&gt;) ) | | (wait(Interrupted); send cim(y) to D and P )
InterruptBeh R = send iem(z) to P; receive im(z) from P; Interr := true
NormalBeh D = TD (&lt;act&gt;) [] receive cim(y) from R</p>
      <p>InterruptBeh D = İ</p>
      <p>
        By substituting the behaviors of the sub-activities &lt;w&gt; and &lt;act&gt; given above, we
obtain three behavior expressions for the three system components P, R and D. These
expressions include the local behaviors of the primitive collaborations &lt;wait&gt;,
&lt;assign&gt; and &lt;consult&gt; and are independent of their particular nature; the expressions
only depend of the sets of starting, terminating and participating roles given above.
We note that these behaviors can also be represented by UML Activity Diagrams.
Further details are given in [
        <xref ref-type="bibr" rid="ref16">17</xref>
        ]. If the behaviors of the primitive collaborations are
also given, for instance in the form of simple Sequence Diagrams, a complete
description of each component behavior can be obtained by substitution. An example
is discussed in [
        <xref ref-type="bibr" rid="ref16">17</xref>
        ] in more detail, including possible execution scenarios.
      </p>
    </sec>
    <sec id="sec-4">
      <title>6 Conclusions</title>
      <p>We assume that the system design for a distributed system consisting of several
separate components can be developed in the following steps:
1. Construction of a requirements model including the specification of the global
behavior of the system in terms of basic activities and their temporal ordering.
2. Through architectural and non-functional requirements, a certain number of
separate system components are identified; each of the activities identified at
the requirements level is either allocated to one of these components, or
performed as a collaboration among several components.
3. Based on the global behavior of the requirements, the identified components
and a more detailed description of the basic activities, the distributed system
design is developed which defines the behavior of each of the system
components including the messages required for realizing the collaborations
and for ensuring the global coordination of all activities among the different
system components.</p>
      <p>
        We have shown in this paper how the third step can be automated, assuming that
the global behavior is given in a suitable modeling language. The modeling language
supported by our design derivation algorithm described in Section 3 supports most of
the concepts found in UML Activity Diagrams. This includes stepwise refinement
where the behavior of a given activity is further detailed in terms of sub-activities and
their ordering constraints, described as a separate activity diagram. In addition, a
distinction between weak and strong sequencing can be made in the requirements
model. We plan to prove the correctness of the algorithm, as discussed in [
        <xref ref-type="bibr" rid="ref16">17</xref>
        ].
      </p>
      <p>We believe that this approach to the automatic derivation of distributed system
designs is useful in many fields of application, including distributed workflow
management systems, service composition for communication services, e-commerce
applications, or Web Services.</p>
      <p>We plan to work on the implementation of the here proposed derivation algorithm
in a tool environment and on the extension of the algorithm to support more general
order relationships including data flow.</p>
      <p>Acknowledgements: I would like to thank Rolv Braek and Humberto Nicolás
Castejón for many interesting discussions on the problems and issues related to this
paper, and Fedwa Laamarti and Toqeer Israr for suggesting improvements to an
earlier version of this paper.
[1] H. Castejón , G.v. Bochmann, R. Braek, Using Collaborations in the Development of</p>
      <p>Distributed Services, submitted for publication.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>H.</given-names>
            <surname>Castejón</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Braek</surname>
          </string-name>
          , G.v. Bochmann,
          <article-title>Realizability of Collaboration-based Service Specifications</article-title>
          ,
          <source>Proceedings of the 14th Asia-Pacific Soft. Eng. Conf. (APSEC'07)</source>
          , IEEE Computer Society Press, pp.
          <fpage>73</fpage>
          -
          <lpage>80</lpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>G. v.</given-names>
            <surname>Bochmann</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Gotzhein</surname>
          </string-name>
          ,
          <article-title>Deriving protocol specifications from service specifications</article-title>
          ,
          <source>Proc. ACM SIGCOMM Symposium</source>
          ,
          <year>1986</year>
          , pp.
          <fpage>148</fpage>
          -
          <lpage>156</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>R.</given-names>
            <surname>Gotzhein</surname>
          </string-name>
          and
          <string-name>
            <given-names>G. v.</given-names>
            <surname>Bochmann</surname>
          </string-name>
          ,
          <article-title>Deriving protocol specifications from service specifications including parameters</article-title>
          ,
          <source>ACM Transactions on Computer Systems</source>
          , Vol.
          <volume>8</volume>
          , No.
          <volume>4</volume>
          ,
          <issue>1990</issue>
          , pp.
          <fpage>255</fpage>
          -
          <lpage>283</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>F.</given-names>
            <surname>Khendek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G. v.</given-names>
            <surname>Bochmann</surname>
          </string-name>
          and
          <string-name>
            <given-names>C.</given-names>
            <surname>Kant</surname>
          </string-name>
          ,
          <article-title>New results on deriving protocol specifications from services specifications</article-title>
          ,
          <source>Proc. SIGCOMM'89, July</source>
          <year>1989</year>
          , in Computer Communications Review Vol.
          <volume>19</volume>
          no.
          <issue>4</issue>
          , pp.
          <fpage>136</fpage>
          -
          <lpage>145</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>C.</given-names>
            <surname>Kant</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Higashino</surname>
          </string-name>
          and
          <string-name>
            <given-names>G. v.</given-names>
            <surname>Bochmann</surname>
          </string-name>
          ,
          <article-title>Deriving protocol specifications from service specifications written in LOTOS, Distributed Computing</article-title>
          , Vol.
          <volume>10</volume>
          , No.
          <volume>1</volume>
          ,
          <issue>1996</issue>
          , pp.
          <fpage>29</fpage>
          -
          <lpage>47</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>H.</given-names>
            <surname>Ben-Abdallah</surname>
          </string-name>
          and
          <string-name>
            <given-names>S.</given-names>
            <surname>Leue</surname>
          </string-name>
          ,
          <article-title>"Syntactic detection of process divergence and non-local choice in Message Sequence Charts"</article-title>
          ,
          <source>Proc. 2nd Int. Workshop on Tools and Algorithms for the Construction and Analysis of Systems (TACAS'97)</source>
          ,
          <year>1997</year>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>M. G.</given-names>
            <surname>Gouda</surname>
          </string-name>
          and
          <string-name>
            <given-names>Y.-T.</given-names>
            <surname>Yu</surname>
          </string-name>
          ,
          <article-title>Synthesis of communicating Finite State Machines with guaranteed progress</article-title>
          ,
          <source>IEEE Trans on Communications</source>
          , vol. Com-
          <volume>32</volume>
          , No. 7,
          <year>July 1984</year>
          , pp.
          <fpage>779</fpage>
          -
          <lpage>788</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Mooij</surname>
            ,
            <given-names>Arjan J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Goga</surname>
          </string-name>
          , Nicolae, &amp;
          <string-name>
            <surname>Romijn</surname>
          </string-name>
          , Judi.
          <year>2005</year>
          .
          <article-title>Non-local Choice and Beyond: Intricacies of MSC Choice Nodes</article-title>
          .
          <source>Pages</source>
          <volume>273</volume>
          -288 of: FASE.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Mooij</surname>
          </string-name>
          , Arjan, Romijn, Judi, &amp;
          <string-name>
            <surname>Wesselink</surname>
          </string-name>
          , Wieger.
          <year>2006</year>
          .
          <article-title>Realizability criteria for compositional MSC</article-title>
          .
          <source>In: Proc. of 11th Intl. Conf. on Algebraic Methodology and Software Technology (AMAST'06)</source>
          . LNCS, vol.
          <volume>4019</volume>
          . Springer.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A.</given-names>
            <surname>Nakata</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Higashino</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Taniguchi</surname>
          </string-name>
          ,
          <article-title>Protocol synthesis from context-free processes using event structures</article-title>
          ,
          <source>in Proc. of 5th Int'l Conf. on Real-Time Computing Systems and Applications (RTCSA'98)</source>
          , Hiroshima, Japan, IEEE Computer Society Press, pp.
          <fpage>173</fpage>
          -
          <lpage>180</lpage>
          , Oct.
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>H.</given-names>
            <surname>Kahlouche</surname>
          </string-name>
          and
          <string-name>
            <given-names>J. J.</given-names>
            <surname>Girardot</surname>
          </string-name>
          , “
          <article-title>A Stepwise Requirement Based Approach for Synthesizing Protocol Specifications in an Interpreted Petri Net Model,”</article-title>
          <source>Proc. INFOCOM'96</source>
          , pp.
          <fpage>1165</fpage>
          -
          <lpage>1173</lpage>
          ,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>H.</given-names>
            <surname>Yamaguchi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>El-Fakih</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G. v.</given-names>
            <surname>Bochmann</surname>
          </string-name>
          and
          <string-name>
            <given-names>T.</given-names>
            <surname>Higashino</surname>
          </string-name>
          ,
          <article-title>Protocol synthesis and resynthesis with optimal allocation of resources based on extended Petri nets</article-title>
          ,
          <source>Distributed Computing</source>
          , Vol.
          <volume>16</volume>
          ,
          <issue>1</issue>
          (March
          <year>2003</year>
          ), pp.
          <fpage>21</fpage>
          -
          <lpage>36</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Alur</surname>
          </string-name>
          , Rajeev, Etessami, Kousha, &amp;
          <string-name>
            <surname>Yannakakis</surname>
          </string-name>
          , Mihalis.
          <year>2000</year>
          .
          <article-title>Inference of message sequence charts</article-title>
          .
          <source>Pages 304-313 of: 22nd International Conference on Software Engineering (ICSE'00).</source>
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>F.</given-names>
            <surname>Khendek</surname>
          </string-name>
          and
          <string-name>
            <given-names>X. J.</given-names>
            <surname>Zhang</surname>
          </string-name>
          ,
          <article-title>"From MSC to SDL: Overview and an application to the autonomous shuttle transport system"</article-title>
          ,
          <source>Proc. 2003 Dagstuhl Workshop on Scenarios: Models, Transformations and Tools, LNCS</source>
          , vol.
          <volume>3466</volume>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>R.</given-names>
            <surname>Alur</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G. J.</given-names>
            <surname>Holzmann</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Peled</surname>
          </string-name>
          ,
          <article-title>"An analyzer for Message Sequence Charts"</article-title>
          ,
          <source>Software - Concepts and Tools</source>
          ,
          <volume>17</volume>
          (
          <issue>2</issue>
          ),
          <fpage>70</fpage>
          -
          <lpage>77</lpage>
          ,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>G.v.</given-names>
            <surname>Bochmann</surname>
          </string-name>
          ,
          <article-title>"Deriving component designs from global service and workflow specifications", submitted for publication.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>M.G.</given-names>
            <surname>Nanda</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Chandra</surname>
          </string-name>
          and
          <string-name>
            <given-names>V.</given-names>
            <surname>Sankar</surname>
          </string-name>
          , “
          <article-title>Decentralizing execution of composite Web Services”</article-title>
          ,
          <source>Proc. OOPSLA'04 (ACM)</source>
          , Vancouver, Canada,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>W.</given-names>
            <surname>Tan</surname>
          </string-name>
          and
          <string-name>
            <given-names>Y.</given-names>
            <surname>Fan</surname>
          </string-name>
          , “
          <article-title>Dynamic workflow model fragmentation for distributed execution”, Computers in Industry</article-title>
          , Vol.
          <volume>58</volume>
          , pp.
          <fpage>381</fpage>
          -
          <lpage>391</lpage>
          (
          <year>2007</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>M.</given-names>
            <surname>Carbone</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Honda</surname>
          </string-name>
          and
          <string-name>
            <given-names>N.</given-names>
            <surname>Yoshida</surname>
          </string-name>
          , “
          <article-title>Structured communication-centred programming for Web Services“</article-title>
          , ESOP'
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>