<!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 />
    <article-meta>
      <title-group>
        <article-title>Cost-minimal adapters for services</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jan Sürmeli</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Humboldt-Universität zu Berlin, Institut für Informatik</institution>
          ,
          <addr-line>Unter den Linden 6, 10099 Berlin</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>The composition of compatible services is central in service orientation. Adapters resolve incompatibilities between services. Adapter synthesis generates an adapter A for two given services N1 and N2. Generally, there exist several different adapters for N1 and N2. In this paper, we suggest a framework to express preference between those adapters. Additionally, we sketch the synthesis of a cost-minimal adapter.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
    </sec>
    <sec id="sec-2">
      <title>Running example</title>
      <p>As a running example, we introduce two simple incompatible services, which are
depicted in Fig. 1 in a notion similar to BPMN: Boxes are tasks, diamonds are
splits and merges. Initialization and termination are represented by circles and
bold circles, respectively. The dashed line encapsulates a service. A rounded box
on the dashed line is a port, consisting of input and output message types. We
further explain syntax and semantics by describing the actual models.</p>
      <p>Service N1 has one port with the input message types ANSWER and CANCEL,
and the output message types LOGIN, REQUEST, and DONE. Initially N1 sends
a LOGIN message. This is modeled as a task named !L, where ! stands for sending,
and L stands for LOGIN – we abbreviate the names of the message types. Then,
N1 enters a loop. In each iteration, it sends an R (resembled by !R) and waits
for an A or a C. If it receives a C, the loop is left. If it receives an A, it decides
internally between starting another iteration, or leaving the loop. In the latter
case, it sends a D to inform its environment that it is done sending requests. Upon
leaving the loop, it terminates. Service N2 serves its environment by receiving a
H followed by a P. It then returns a S followed by receiving a G. Initially and
after receiving a G, N2 can receive a Q to terminate.</p>
      <p>?A
!D</p>
      <p>LOGIN
REQUEST
ANSWER
DONE
CANCEL</p>
      <p>HELLO
PROBLEM
SOLUTION
GOODBYE</p>
      <p>QUIT</p>
      <p>?Q
(b) N2
?H
?P
!S
Obviously, N1 and N2 are incompatible. Even if one tries to map the interfaces
as far as possible (i.e. L 7→ H, R 7→ P, S 7→ A, D 7→ G), the composition deadlocks:
After one iteration of the loop, N2 waits for another H, and N1 waits for an A.</p>
      <p>There exist different adapters for N1 and N2. Figure 2 depicts two adapters
A1 and A2 for our running example. Adapter A1 sends the missing H in each loop
iteration. Once N1 decides to be done, it quits N2. In contrast to the previously
studied models, A1 executes tasks neither starting with ? nor !, e.g. E1. Such a
task is internal, that is, neither sending nor receiving a message. The label E1
refers to a message transformation in Fig. 3(a). We explain this in more detail in
the next section. Adapter A2 resolves the incompatibility trivially by sending a C
to N1, and a Q to N2.</p>
      <p>One might prefer one adapter over the other. For instance, A1 could be
preferable because it enforces both services to enter their main part. In contrast
to that, A2 simply quits both services, which does not seem very useful. However,
one could also prefer A2 over A1, because executing the main part of the services
requires many costly message transformations.</p>
      <p>E1
!H
!P
?S
E2
E9
!A
E3
?D
!Q
(a) A1
?R
?L
E7
?R
E8
E5
!C
E4
!Q
(b) A2</p>
      <p>LOGIN
REQUEST
ANSWER</p>
      <p>
        DONE
CANCEL
In this section, we propose a general approach to synthesize a cost-minimal
adapter. We first explain the approach in [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] to synthesize an arbitrary adapter.
Second, we explain how to extend this approach such that it yields a cost-minimal
adapter.
      </p>
      <p>We synthesize an adapter for N1 and N2 based on a given specification of
elementary activities (SEA). Such an SEA contains all semantical activities an
adapter may perform. An elementary activity is a rule of the form x1, . . . , xm 7→
y1, . . . , yn, where x1, . . . , xm, y1, . . . , yn are message types. For each message type
xi, a message of that type is consumed, for each message type yj , a message of
this type is produced. Message transformations are performed on internal buffers.
That is, the adapter stores incoming and intermediate messages locally.</p>
      <p>Continuing the running example, Fig. 3(a) shows an SEA {E1, . . . , E9}. We
recognize all but one message type from the running example: Message type X is
a temporary message to remember that rule E2 has been applied. That is, that
at least one S has been translated to an A. Using such intermediate messages is a
mechanism to cope with dependencies between rules. We identify which adapter
uses which rules. Adapter A1 (Fig. 2(a)) executes E1, E2, E9, and E3. Adapter
A2 (Fig. 2(b)) executes E7, E8, E5, and E4. Finally, the adapter Amin (Fig. 3(b))
executes E1, E2, E3, E9, E8, E6, and E4.</p>
      <p>
        One advantage of this approach is that adapter synthesis can be reduced to
partner synthesis. Intuitively, partner synthesis [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] solves the problem to find
a compatible service N2 for a given service N1, called partner of N1. First, we
create an engine E from the SEA. The engine has three ports, one for each N1
and N2, and one for a control service. We compose N1, E, and N2. We synthesize
a control service C. The composition of E and C serves as an adapter for N1 and
N2. We shortly discuss the limitations of this approach. It is possible to adapt
more than just two services at once, but only by a central adapter. Additionally,
this approach is adapts single instances of each service. If one desires to adapt n
instances of one service, it is required to treat them each as a different service,
instead. This is obviously infeasible if the number of instances is variable and
not known beforehand.
      </p>
      <p>We propose to specify costs based on the SEA, because it contains all activities
which are known before synthesis. We then follow the above approach and reduce
the problem to synthesize a cost-minimal adapter to the problem to synthesize a
cost-minimal partner.
4</p>
    </sec>
    <sec id="sec-3">
      <title>Cost models and cost functions</title>
      <p>In this section, we introduce two formal constructs: Cost models and cost functions.
A cost model determines how costs are represented, aggregated, and compared.
A cost function specifies the costs for executing a rule of the SEA Σ. These cost
may resemble monetary costs, for calling a web service, or penalties. Given a cost
model and a cost function, the costs of an adapter are well-defined.</p>
      <p>Formally, a cost model C = [D, S, ≤] consists of a set D, called domain of C,
a function S : D∗ → D, called sequence aggregator function (SAF) of C, and a
partial order ≤ on 2D, called set ordering relation (SOR) of C.</p>
      <p>A cost function F : Σ → D specifies the cost of executing a single rule
a ∈ Σ. We combine a cost function with a cost model to determine the costs
of a sequence of rules. Let σ = a1 . . . an ∈ Σ∗. We define the costs of σ as
hF , Ci(σ) := S(F (a1) . . . F (an)). Let L, L0 ⊆ Σ∗ be sets of sequences. We define
hF , Ci(L) := {hF , Ci(σ) | σ ∈ L}. We define L ≤F L0 iff hF , Ci(L) ≤ hF , Ci(L0).</p>
      <p>Let N1 and N2 be incompatible services. The costs of an adapter A w.r.t.
F , C, N1, and N2 are then determined by inspecting the terminating runs
of the composition of N1, N2, and A. A terminating run results in a
common final state of all services. We define hF , C, N, Qi(A) := {hF , Ci(σ|Σ) |
σ is a terminating run of N ⊕ A ⊕ Q}, where σ|Σ denotes the restriction of σ
to alphabet Σ. For two adapters A, A0, we define A ≤F,N,Q A0 if and only if
hF , C, N, Qi(A) ≤F hF , C, N, Qi(A0).</p>
      <p>A general limitation of this approach is the fact that costs for a sequence of rule
executions are built from the costs of the executions of single rules. One may desire
LOGIN
REQUEST
ANSWER</p>
      <p>DONE
CANCEL</p>
      <p>?L ?R
E2 ?S !P
!A
!G
!H
?D
E3
!Q
E9
?R
E8
E6
!C
E4
!Q</p>
      <p>HELLO
PROBLEM
SOLUTION
GOODBYE
QUIT
to express dependencies, for instance, executing rule E = x1, . . . , xm 7→ y1, . . . , yn
could be cheaper if a message X was received beforehand. This can be partly
realized by intermediate messages. For this case, one would introduce three new rules
R = X 7→ X, receivedX , R0 = receivedX 7→ , and E0 = receivedX , x1, . . . , xm 7→
receivedX , y1, . . . , yn. One would apply the appropriate lower costs to E0. An
open question is to find the class of dependencies one can express in this way.
For example, it is not possible to declare that the costs for executing a rule are
reduced by factor two each time.</p>
      <p>In the remainder of this section, we discuss two cost models, and apply these
cost models to our running example. For that purpose, we define a cost function
F based on the SEA in Fig. 3(a). Most of the rules have costs of zero. However,
E1 and E1 have costs of 5, because the message content has to be translated to a
different format. Rule E5 has a penalty of 30, to symbolize that we do not prefer
to send a C to N1. Rule E6 has a lower penalty, because it may only be applied
after at least one request has been answered.
The idea of this cost model is to compute the total costs of each run, and select
the supremum to compare two adapters. Total costs are determined by addition.
We prefer an adapter A1 over an adapter A2 if the worst-case total costs of A1
are lower than the worst case total costs of A2. In order to enable analysis, we
choose the natural numbers as domain. The advantage is an inherent monotony.
We define the cost model T as the cost model with domain DT := N0, the SAF
ST (a1 . . . an) := a1 + . . . + an, and SOR X ≤T Y if and only if sup(X) ≤ sup(Y ).
Thereby, N0 denotes the set of natural numbers, + denotes integer addition,
sup(X) ∈ N0 ∪ {∞} denotes the supremum (least upper bound) of X, and ≤
denotes the natural order on N0 ∪ {∞}.</p>
      <p>Comparing the adapters of our running example, we find: A1 7→ {10, 20, 30, . . .},
A2 7→ {30}, Amin 7→ {10, 20}. We prefer Amin, because 20 ≤ 30 ≤ ∞. We believe
that it is obvious that Amin is the cost-minimal adapter w.r.t. F, T , N1 and N2.
It is impossible to adapt N1 and N2 with less costs, because N1 decides whether
it sends another request, or whether it is done.
4.2</p>
      <p>A cost model for worst case average costs
The disadvantage of cost model T is that all adapers with unbounded worst
case total costs are equivalent. That is, we may not distinguish between them.
However, there might be services N1 and N2 which are not adaptable by a service
with bounded worst case costs. In this case, we would like to be able to distinguish
two adapters A1, A2 with unbounded costs. Intuitively, we compare the costs for
executing an additional rule in each adapter. We evaluate the average costs of
each run (instead of the total costs), and use again the supremum to compare.
We prefer an adapter A1 over an adapter A2 if the worst-case average costs of
A1 are lower than the worst case average costs of A2. Obviously, this cannot be
done in the natural numbers anymore. Hence, we select the non-negative rational
numbers as domain. We define the cost model A as the cost model with domain
DA := Q0+, the SAF SA(a1 . . . an) := a1+...+an , and SOR X ≤A Y if and only if
n
sup(X) ≤ sup(Y ). Thereby, Q0+ denotes the set of non-negative rational numbers,
+
+ denotes rational number addition, sup(X) ∈ Q0 ∪ {∞} denotes the supremum
+
(least upper bound) of X, and ≤ denotes the natural order on Q0 1∪0,{27∞0,}13.00 , . . .},</p>
      <p>Comparing the adapters of our running example, we find: A1 7→ { 4
A2 7→ { 340 }, Amin 7→ { 140 , 250 }. We prefer A1, because 3 ≤ 4 ≤ 7.5.
5</p>
    </sec>
    <sec id="sec-4">
      <title>Synthesis of cost-minimal adapters</title>
      <p>
        For the cost model T , we solved the problem to synthesize a cost-minimal partner
in [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. We use the same mechanism to synthesize a cost-minimal adapter: Two
services N1, N2, an engine E, and a cost fumction F serve as input. The engine
E may be computed from an SEA by the tool Marlene1. We first compose N1,
N2, and E to the service N = N1 ⊕ E ⊕ N2. Then, we synthesize a cost-minimal
partner for N w.r.t. F .
      </p>
      <p>We sketch the synthesis approach. A central concept of the synthesis is the
minimal budget of a service N w.r.t. a cost function F . That is, the unique
costs of the cost-minimal partner. For T , the minimal budget is either a natural
number, or infinite.</p>
      <p>
        In a first step, we find an upper bound b for the minimal budget with the
following property: b is infinite iff the minimal budget is infinite. The upper
1 Marlene is available at http://service-technology.org/marlene [Last accessed on
201214-02]
bound b is found by examining N together with its most-permissive partner.
Intuitively, the most-permissive partner simulates each other partner of N . The
most-permissive partner is computed with the tool Wendy [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. If b is infinite,
every partner of N is cost-minimal.
      </p>
      <p>If b is finite, we find the cost-minimal partner by iteration: For a given budget
k, it is possible to check whether there exists a partner with costs k. If such a
partner exists, it can be synthesized. This is realized by first transforming N to
a service N k , and then synthesizing a partner for N k . We find the lowest k ≤ b,</p>
      <p>F F
such that there exists a partner with costs k. This is implemented as a binary
search. The resulting partner is by construction cost-minimal.</p>
      <p>We implemented this procedure prototypically in Tara2. For other cost models,
we do not have a solution yet.
6</p>
    </sec>
    <sec id="sec-5">
      <title>Related work</title>
      <p>
        Seguel et al. [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] study the problem to create minimal adapters to resolve deadlock
between services. Thereby, minimality is defined w.r.t. to the number of messages
considered. The resulting adapter resolves deadlocks and is minimal w.r.t.
messages. We study the more general criterion of weak termination. We showed that
the minimal adapter is not necessarily cost-minimal. We reduced the synthesis
of a cost-minimal adapter to the synthesis of a cost-minimal partner. Zeng et
al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] use integer programming to find an optimal composite service. That is,
an optimal composition of atomic tasks each implemented by a web service. The
services do not communicate based on its state, whereas we consider stateful
services. De Paoli et al. [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] propose a similar approach for WS-BPEL [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] processes.
Both approaches work on well-structured services, whereas we support arbitrary
services. The CLAM framework, introduced by Zengin et al. [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], combines
several adaptation approaches of different layers in one tool to cope with different
concerns. It remains open how our approach fits into such a framework. In [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ],
we presented our results utilizing the partner synthesis by Wolf [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] as a basis.
Instead, one could build our approach on top on other synthesis approaches, for
instance [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
7
      </p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>In this paper, we described the problem of cost-minimal adaptation. We suggested
a framework to express preference between different adapters based on cost models
and cost functions. We discussed two cost models: Worst-case total costs, and
worst-case average costs. We sketched the synthesis procedure for worst-case
total costs.</p>
      <p>We stucture our intended future work as follows: (1) Identification and
classification of further cost models, (2) solving partner and thus adapter synthesis
for other cost models than T , (3) evaluating the complete approach. For (1) we
2 Tara is available at http://service-technology.org/tara [Last accessed on 2012-14-02]
plan to further investigate the literature on formalisms which cope with costs
in general, for instance, weighted automata. Additionally, we plan to consider
results from decision theory. To tackle (2), we will start to develop an algorithm
which decides whether one adapter is to be prefered over an other. Then, we
extend this result to synthesis of a partner. Part (3) could be realized by a case
study with our prototype on real world services.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Alves</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , et al.:
          <source>Web Services Business Process Execution Language Version 2.0. OASIS Standard, 11 April</source>
          <year>2007</year>
          , OASIS (Apr
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Gierds</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mooij</surname>
            ,
            <given-names>A.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wolf</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Reducing adapter synthesis to controller synthesis</article-title>
          .
          <source>IEEE Transactions on Services Computing</source>
          <volume>99</volume>
          (
          <issue>PrePrints</issue>
          ) (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Lohmann</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Weinberg</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Wendy: A tool to synthesize partners for services</article-title>
          .
          <source>In: PETRI NETS</source>
          <year>2010</year>
          . pp.
          <fpage>297</fpage>
          -
          <lpage>307</lpage>
          . LNCS 6128, Springer (
          <year>2010</year>
          ), tool available at http://service-technology.
          <source>org/wendy [Last accessed on 2012-14-02].</source>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Paoli</surname>
            ,
            <given-names>F.D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lulli</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Maurino</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Design of quality-based composite web services</article-title>
          .
          <source>In: ICSOC</source>
          . pp.
          <fpage>153</fpage>
          -
          <lpage>164</lpage>
          (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Papazoglou</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>What's in a service</article-title>
          ? In: Oquendo,
          <string-name>
            <surname>F</surname>
          </string-name>
          . (ed.)
          <source>Software Architecture, Lecture Notes in Computer Science</source>
          , vol.
          <volume>4758</volume>
          , pp.
          <fpage>11</fpage>
          -
          <lpage>28</lpage>
          . Springer Berlin / Heidelberg (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Papazoglou</surname>
            ,
            <given-names>M.P.</given-names>
          </string-name>
          : Web Services:
          <article-title>Principles and Technology</article-title>
          . Pearson - Prentice
          <string-name>
            <surname>Hall</surname>
          </string-name>
          ,
          <source>Essex (Jul</source>
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Pistore</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Traverso</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bertoli</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Marconi</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Automated synthesis of composite bpel4ws web services</article-title>
          .
          <source>In: Proceedings of the IEEE International Conference on Web Services</source>
          . pp.
          <fpage>293</fpage>
          -
          <lpage>301</lpage>
          . ICWS '05, IEEE Computer Society, Washington, DC, USA (
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Seguel</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Eshuis</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grefen</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Constructing minimal protocol adaptors for service composition</article-title>
          .
          <source>In: Proceedings of the 4th Workshop on Emerging Web Services Technology</source>
          . pp.
          <fpage>29</fpage>
          -
          <lpage>38</lpage>
          . WEWST '09,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          , New York, NY, USA (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Sürmeli</surname>
          </string-name>
          , J.:
          <article-title>Synthesizing cost-minimal partners for services</article-title>
          .
          <source>Informatik-Berichte</source>
          <volume>239</volume>
          ,
          <string-name>
            <surname>Humboldt-Universität</surname>
          </string-name>
          zu Berlin (
          <year>2012</year>
          ), http://u.hu-berlin.de/suermeli-techreport,
          <source>[Last accessed on</source>
          <year>2012</year>
          -
          <volume>14</volume>
          -02], in publication queue
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Van Der Aalst</surname>
            ,
            <given-names>W.M.P.:</given-names>
          </string-name>
          <article-title>The application of petri nets to workflow management</article-title>
          .
          <source>The Journal of Circuits Systems and Computers</source>
          <volume>8</volume>
          (
          <issue>1</issue>
          ),
          <fpage>21</fpage>
          -
          <lpage>66</lpage>
          (
          <year>1998</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Wolf</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Does my service have partners? LNCS ToPNoC 5460(II</article-title>
          ),
          <fpage>152</fpage>
          -
          <lpage>171</lpage>
          (
          <year>Mar 2009</year>
          ), special Issue on Concurrency in Process-Aware Information Systems
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Yellin</surname>
            ,
            <given-names>D.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Strom</surname>
            ,
            <given-names>R.E.</given-names>
          </string-name>
          :
          <article-title>Protocol specifications and component adaptors</article-title>
          .
          <source>ACM Trans. Program. Lang. Syst</source>
          .
          <volume>19</volume>
          ,
          <fpage>292</fpage>
          -
          <lpage>333</lpage>
          (
          <year>March 1997</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Zeng</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Benatallah</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ngu</surname>
            ,
            <given-names>A.H.H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dumas</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kalagnanam</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chang</surname>
          </string-name>
          , H.:
          <article-title>QoS-aware middleware for web services composition</article-title>
          .
          <source>IEEE Trans. Software Eng</source>
          .
          <volume>30</volume>
          (
          <issue>5</issue>
          ),
          <fpage>311</fpage>
          -
          <lpage>327</lpage>
          (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Zengin</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Marconi</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pistore</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Clam: cross-layer adaptation manager for service-based applications</article-title>
          .
          <source>In: Proceedings of the International Workshop on Quality Assurance for Service-Based Applications</source>
          . pp.
          <fpage>21</fpage>
          -
          <lpage>27</lpage>
          . QASBA '11,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          , New York, NY, USA (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>