Enabling Flexible and Continuous Capability Invocation in Mobile Prosumer Environments
Identifieur interne : 000563 ( Pmc/Corpus ); précédent : 000562; suivant : 000564Enabling Flexible and Continuous Capability Invocation in Mobile Prosumer Environments
Auteurs : Ramon Alcarria ; Tomas Robles ; Augusto Morales ; Diego L Pez-De-Ipi A ; Unai AguileraSource :
- Sensors (Basel, Switzerland) [ 1424-8220 ] ; 2012.
Abstract
Mobile prosumer environments require the communication with heterogeneous devices during the execution of mobile services. These environments integrate sensors, actuators and smart devices, whose availability continuously changes. The aim of this paper is to design a reference architecture for implementing a model for continuous service execution and access to capabilities,
Url:
DOI: 10.3390/s120708930
PubMed: 23012526
PubMed Central: 3444084
Links to Exploration step
PMC:3444084Le document en format XML
<record><TEI><teiHeader><fileDesc><titleStmt><title xml:lang="en">Enabling Flexible and Continuous Capability Invocation in Mobile Prosumer Environments</title>
<author><name sortKey="Alcarria, Ramon" sort="Alcarria, Ramon" uniqKey="Alcarria R" first="Ramon" last="Alcarria">Ramon Alcarria</name>
<affiliation><nlm:aff id="af1-sensors-12-08930"> Department of Telematics Engineering, Technical University of Madrid, Avenida Complutense n. 30, Ciudad Universitaria, 28040 Madrid, Spain; E-Mails:<email>trobles@dit.upm.es</email>
(T.R.);<email>amorales@dit.upm.es</email>
(A.M.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="Robles, Tomas" sort="Robles, Tomas" uniqKey="Robles T" first="Tomas" last="Robles">Tomas Robles</name>
<affiliation><nlm:aff id="af1-sensors-12-08930"> Department of Telematics Engineering, Technical University of Madrid, Avenida Complutense n. 30, Ciudad Universitaria, 28040 Madrid, Spain; E-Mails:<email>trobles@dit.upm.es</email>
(T.R.);<email>amorales@dit.upm.es</email>
(A.M.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="Morales, Augusto" sort="Morales, Augusto" uniqKey="Morales A" first="Augusto" last="Morales">Augusto Morales</name>
<affiliation><nlm:aff id="af1-sensors-12-08930"> Department of Telematics Engineering, Technical University of Madrid, Avenida Complutense n. 30, Ciudad Universitaria, 28040 Madrid, Spain; E-Mails:<email>trobles@dit.upm.es</email>
(T.R.);<email>amorales@dit.upm.es</email>
(A.M.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="L Pez De Ipi A, Diego" sort="L Pez De Ipi A, Diego" uniqKey="L Pez De Ipi A D" first="Diego" last="L Pez-De-Ipi A">Diego L Pez-De-Ipi A</name>
<affiliation><nlm:aff id="af2-sensors-12-08930"> Deusto Institute of Technology, University of Deusto, Avda. Universidades 24, 48007 Bilbao, Spain; E-Mails:<email>dipina@deusto.es</email>
(D.L.-I.);<email>unai.aguilera@deusto.es</email>
(U.A.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="Aguilera, Unai" sort="Aguilera, Unai" uniqKey="Aguilera U" first="Unai" last="Aguilera">Unai Aguilera</name>
<affiliation><nlm:aff id="af2-sensors-12-08930"> Deusto Institute of Technology, University of Deusto, Avda. Universidades 24, 48007 Bilbao, Spain; E-Mails:<email>dipina@deusto.es</email>
(D.L.-I.);<email>unai.aguilera@deusto.es</email>
(U.A.)</nlm:aff>
</affiliation>
</author>
</titleStmt>
<publicationStmt><idno type="wicri:source">PMC</idno>
<idno type="pmid">23012526</idno>
<idno type="pmc">3444084</idno>
<idno type="url">http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3444084</idno>
<idno type="RBID">PMC:3444084</idno>
<idno type="doi">10.3390/s120708930</idno>
<date when="2012">2012</date>
<idno type="wicri:Area/Pmc/Corpus">000563</idno>
<idno type="wicri:explorRef" wicri:stream="Pmc" wicri:step="Corpus" wicri:corpus="PMC">000563</idno>
</publicationStmt>
<sourceDesc><biblStruct><analytic><title xml:lang="en" level="a" type="main">Enabling Flexible and Continuous Capability Invocation in Mobile Prosumer Environments</title>
<author><name sortKey="Alcarria, Ramon" sort="Alcarria, Ramon" uniqKey="Alcarria R" first="Ramon" last="Alcarria">Ramon Alcarria</name>
<affiliation><nlm:aff id="af1-sensors-12-08930"> Department of Telematics Engineering, Technical University of Madrid, Avenida Complutense n. 30, Ciudad Universitaria, 28040 Madrid, Spain; E-Mails:<email>trobles@dit.upm.es</email>
(T.R.);<email>amorales@dit.upm.es</email>
(A.M.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="Robles, Tomas" sort="Robles, Tomas" uniqKey="Robles T" first="Tomas" last="Robles">Tomas Robles</name>
<affiliation><nlm:aff id="af1-sensors-12-08930"> Department of Telematics Engineering, Technical University of Madrid, Avenida Complutense n. 30, Ciudad Universitaria, 28040 Madrid, Spain; E-Mails:<email>trobles@dit.upm.es</email>
(T.R.);<email>amorales@dit.upm.es</email>
(A.M.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="Morales, Augusto" sort="Morales, Augusto" uniqKey="Morales A" first="Augusto" last="Morales">Augusto Morales</name>
<affiliation><nlm:aff id="af1-sensors-12-08930"> Department of Telematics Engineering, Technical University of Madrid, Avenida Complutense n. 30, Ciudad Universitaria, 28040 Madrid, Spain; E-Mails:<email>trobles@dit.upm.es</email>
(T.R.);<email>amorales@dit.upm.es</email>
(A.M.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="L Pez De Ipi A, Diego" sort="L Pez De Ipi A, Diego" uniqKey="L Pez De Ipi A D" first="Diego" last="L Pez-De-Ipi A">Diego L Pez-De-Ipi A</name>
<affiliation><nlm:aff id="af2-sensors-12-08930"> Deusto Institute of Technology, University of Deusto, Avda. Universidades 24, 48007 Bilbao, Spain; E-Mails:<email>dipina@deusto.es</email>
(D.L.-I.);<email>unai.aguilera@deusto.es</email>
(U.A.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="Aguilera, Unai" sort="Aguilera, Unai" uniqKey="Aguilera U" first="Unai" last="Aguilera">Unai Aguilera</name>
<affiliation><nlm:aff id="af2-sensors-12-08930"> Deusto Institute of Technology, University of Deusto, Avda. Universidades 24, 48007 Bilbao, Spain; E-Mails:<email>dipina@deusto.es</email>
(D.L.-I.);<email>unai.aguilera@deusto.es</email>
(U.A.)</nlm:aff>
</affiliation>
</author>
</analytic>
<series><title level="j">Sensors (Basel, Switzerland)</title>
<idno type="eISSN">1424-8220</idno>
<imprint><date when="2012">2012</date>
</imprint>
</series>
</biblStruct>
</sourceDesc>
</fileDesc>
<profileDesc><textClass></textClass>
</profileDesc>
</teiHeader>
<front><div type="abstract" xml:lang="en"><p>Mobile prosumer environments require the communication with heterogeneous devices during the execution of mobile services. These environments integrate sensors, actuators and smart devices, whose availability continuously changes. The aim of this paper is to design a reference architecture for implementing a model for continuous service execution and access to capabilities, <italic>i.e.</italic>
, the functionalities provided by these devices. The defined architecture follows a set of software engineering patterns and includes some communication paradigms to cope with the heterogeneity of sensors, actuators, controllers and other devices in the environment. In addition, we stress the importance of the flexibility in capability invocation by allowing the communication middleware to select the access technology and change the communication paradigm when dealing with smart devices, and by describing and evaluating two algorithms for resource access management.</p>
</div>
</front>
<back><div1 type="bibliography"><listBibl><biblStruct><analytic><author><name sortKey="Hadim, S" uniqKey="Hadim S">S. Hadim</name>
</author>
<author><name sortKey="Mohamed, N" uniqKey="Mohamed N">N. Mohamed</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Molla, M M" uniqKey="Molla M">M.M. Molla</name>
</author>
<author><name sortKey="Ahamed, S I" uniqKey="Ahamed S">S.I. Ahamed</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Alcarria, R" uniqKey="Alcarria R">R. Alcarria</name>
</author>
<author><name sortKey="Robles, T" uniqKey="Robles T">T. Robles</name>
</author>
<author><name sortKey="Morales, A" uniqKey="Morales A">A. Morales</name>
</author>
<author><name sortKey="Gonzalez Miranda, S" uniqKey="Gonzalez Miranda S">S. González-Miranda</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Aguilera, U" uniqKey="Aguilera U">U. Aguilera</name>
</author>
<author><name sortKey="Almeida, A" uniqKey="Almeida A">A. Almeida</name>
</author>
<author><name sortKey="Orduna, P" uniqKey="Orduna P">P. Orduna</name>
</author>
<author><name sortKey="L Pez De Ipina, D" uniqKey="L Pez De Ipina D">D. López-de-Ipina</name>
</author>
<author><name sortKey="De Las Heras, R" uniqKey="De Las Heras R">R. de las Heras</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="F Hndrich, M" uniqKey="F Hndrich M">M. Fähndrich</name>
</author>
<author><name sortKey="Aiken, M" uniqKey="Aiken M">M. Aiken</name>
</author>
<author><name sortKey="Hawblitzel, C" uniqKey="Hawblitzel C">C. Hawblitzel</name>
</author>
<author><name sortKey="Hodson, O" uniqKey="Hodson O">O. Hodson</name>
</author>
<author><name sortKey="Hunt, G" uniqKey="Hunt G">G. Hunt</name>
</author>
<author><name sortKey="Larus, J R" uniqKey="Larus J">J.R. Larus</name>
</author>
<author><name sortKey="Levi, S" uniqKey="Levi S">S. Levi</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Guenkova Luy, T" uniqKey="Guenkova Luy T">T. Guenkova-Luy</name>
</author>
<author><name sortKey="Schmidt, H" uniqKey="Schmidt H">H. Schmidt</name>
</author>
<author><name sortKey="Schorr, A" uniqKey="Schorr A">A. Schorr</name>
</author>
<author><name sortKey="Hauck, F J" uniqKey="Hauck F">F.J. Hauck</name>
</author>
<author><name sortKey="Kassler, A" uniqKey="Kassler A">A. Kassler</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Gelernter, D" uniqKey="Gelernter D">D. Gelernter</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Eugster, P T" uniqKey="Eugster P">P.T. Eugster</name>
</author>
<author><name sortKey="Felber, P A" uniqKey="Felber P">P.A. Felber</name>
</author>
<author><name sortKey="Guerraoui, R" uniqKey="Guerraoui R">R. Guerraoui</name>
</author>
<author><name sortKey="Kermarrec, A M" uniqKey="Kermarrec A">A.M. Kermarrec</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Gamma, E" uniqKey="Gamma E">E. Gamma</name>
</author>
<author><name sortKey="Helm, R" uniqKey="Helm R">R. Helm</name>
</author>
<author><name sortKey="Johnson, R" uniqKey="Johnson R">R. Johnson</name>
</author>
<author><name sortKey="Vlissides, J" uniqKey="Vlissides J">J. Vlissides</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Buschmann, F" uniqKey="Buschmann F">F. Buschmann</name>
</author>
<author><name sortKey="Henney, K" uniqKey="Henney K">K. Henney</name>
</author>
<author><name sortKey="Schmidt, D D" uniqKey="Schmidt D">D.D. Schmidt</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Nguyen, D Z" uniqKey="Nguyen D">D.Z. Nguyen</name>
</author>
<author><name sortKey="Wong, S B" uniqKey="Wong S">S.B. Wong</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Cheng, L" uniqKey="Cheng L">L. Cheng</name>
</author>
<author><name sortKey="Wang, Z" uniqKey="Wang Z">Z. Wang</name>
</author>
<author><name sortKey="Huang, X" uniqKey="Huang X">X. Huang</name>
</author>
</analytic>
</biblStruct>
<biblStruct></biblStruct>
<biblStruct><analytic><author><name sortKey="Bose, R" uniqKey="Bose R">R. Bose</name>
</author>
<author><name sortKey="Helal, A" uniqKey="Helal A">A. Helal</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Liu, X" uniqKey="Liu X">X. Liu</name>
</author>
<author><name sortKey="Huang, Q" uniqKey="Huang Q">Q. Huang</name>
</author>
<author><name sortKey="Zhang, Y" uniqKey="Zhang Y">Y. Zhang</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Cano, J C" uniqKey="Cano J">J.C. Cano</name>
</author>
<author><name sortKey="Cano, J M" uniqKey="Cano J">J.M. Cano</name>
</author>
<author><name sortKey="Gonzalez, E" uniqKey="Gonzalez E">E. González</name>
</author>
<author><name sortKey="Calafate, C" uniqKey="Calafate C">C. Calafate</name>
</author>
<author><name sortKey="Manzoni, P" uniqKey="Manzoni P">P. Manzoni</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Gartmann, R" uniqKey="Gartmann R">R. Gartmann</name>
</author>
<author><name sortKey="Holtkamp, B" uniqKey="Holtkamp B">B. Holtkamp</name>
</author>
<author><name sortKey="Weissenberg, N" uniqKey="Weissenberg N">N. Weissenberg</name>
</author>
<author><name sortKey="Li, G" uniqKey="Li G">G. Li</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Chin, A" uniqKey="Chin A">A. Chin</name>
</author>
<author><name sortKey="Kontogiannis, K" uniqKey="Kontogiannis K">K. Kontogiannis</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Wei Enberg, N" uniqKey="Wei Enberg N">N. Weißenberg</name>
</author>
<author><name sortKey="Gartmann, R" uniqKey="Gartmann R">R. Gartmann</name>
</author>
<author><name sortKey="Voisard, A" uniqKey="Voisard A">A. Voisard</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Ibrahim, N" uniqKey="Ibrahim N">N. Ibrahim</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Morais, Y" uniqKey="Morais Y">Y. Morais</name>
</author>
<author><name sortKey="Elias, G" uniqKey="Elias G">G. Elias</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Roman, M" uniqKey="Roman M">M. Roman</name>
</author>
<author><name sortKey="Kon, F" uniqKey="Kon F">F. Kon</name>
</author>
<author><name sortKey="Campbell, R H" uniqKey="Campbell R">R.H. Campbell</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Kon, F" uniqKey="Kon F">F. Kon</name>
</author>
<author><name sortKey="Roman, M" uniqKey="Roman M">M. Román</name>
</author>
<author><name sortKey="Liu, P" uniqKey="Liu P">P. Liu</name>
</author>
<author><name sortKey="Mao, J" uniqKey="Mao J">J. Mao</name>
</author>
<author><name sortKey="Yamane, T" uniqKey="Yamane T">T. Yamane</name>
</author>
<author><name sortKey="Magalha, C" uniqKey="Magalha C">C. Magalha</name>
</author>
<author><name sortKey="Campbell, R H" uniqKey="Campbell R">R.H. Campbell</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Lan, L" uniqKey="Lan L">L. Lan</name>
</author>
<author><name sortKey="Huang, G" uniqKey="Huang G">G. Huang</name>
</author>
<author><name sortKey="Wang, W" uniqKey="Wang W">W. Wang</name>
</author>
<author><name sortKey="Mei, H" uniqKey="Mei H">H. Mei</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Binkley, D" uniqKey="Binkley D">D. Binkley</name>
</author>
<author><name sortKey="Ceccato, M" uniqKey="Ceccato M">M. Ceccato</name>
</author>
<author><name sortKey="Harman, M" uniqKey="Harman M">M. Harman</name>
</author>
<author><name sortKey="Ricca, F" uniqKey="Ricca F">F. Ricca</name>
</author>
<author><name sortKey="Tonella, T" uniqKey="Tonella T">T. Tonella</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Lung, C" uniqKey="Lung C">C. Lung</name>
</author>
<author><name sortKey="Rajeswaran, P" uniqKey="Rajeswaran P">P. Rajeswaran</name>
</author>
<author><name sortKey="Sivadas, S" uniqKey="Sivadas S">S. Sivadas</name>
</author>
<author><name sortKey="Sivabalasingam, T" uniqKey="Sivabalasingam T">T. Sivabalasingam</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Ali, N" uniqKey="Ali N">N. Ali</name>
</author>
<author><name sortKey="Babar, M A" uniqKey="Babar M">M.A. Babar</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Ali, N" uniqKey="Ali N">N. Ali</name>
</author>
<author><name sortKey="Ramos, I" uniqKey="Ramos I">I. Ramos</name>
</author>
<author><name sortKey="Solis, C" uniqKey="Solis C">C. Solís</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Apel, S" uniqKey="Apel S">S. Apel</name>
</author>
<author><name sortKey="Bohm, K" uniqKey="Bohm K">K. Böhm</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Smaragdakis, Y" uniqKey="Smaragdakis Y">Y. Smaragdakis</name>
</author>
<author><name sortKey="Batory, D" uniqKey="Batory D">D. Batory</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Rouvoy, R" uniqKey="Rouvoy R">R. Rouvoy</name>
</author>
<author><name sortKey="Barone, P" uniqKey="Barone P">P. Barone</name>
</author>
<author><name sortKey="Ding, Y" uniqKey="Ding Y">Y. Ding</name>
</author>
<author><name sortKey="Eliassen, F" uniqKey="Eliassen F">F. Eliassen</name>
</author>
<author><name sortKey="Hallsteinsen, S" uniqKey="Hallsteinsen S">S. Hallsteinsen</name>
</author>
<author><name sortKey="Lorenzo, J" uniqKey="Lorenzo J">J. Lorenzo</name>
</author>
<author><name sortKey="Mamelli, A" uniqKey="Mamelli A">A. Mamelli</name>
</author>
<author><name sortKey="Scholz, U" uniqKey="Scholz U">U. Scholz</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Sivaharan, T" uniqKey="Sivaharan T">T. Sivaharan</name>
</author>
<author><name sortKey="Blair, G" uniqKey="Blair G">G. Blair</name>
</author>
<author><name sortKey="Coulson, G" uniqKey="Coulson G">G. Coulson</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Chakraborty, D" uniqKey="Chakraborty D">D. Chakraborty</name>
</author>
<author><name sortKey="Joshi, A" uniqKey="Joshi A">A. Joshi</name>
</author>
<author><name sortKey="Finin, T" uniqKey="Finin T">T. Finin</name>
</author>
<author><name sortKey="Yesha, Y" uniqKey="Yesha Y">Y. Yesha</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Ji, Z" uniqKey="Ji Z">Z. Ji</name>
</author>
<author><name sortKey="Ganchev, I" uniqKey="Ganchev I">I. Ganchev</name>
</author>
<author><name sortKey="O Droma, M" uniqKey="O Droma M">M. O'Droma</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Erradi, A" uniqKey="Erradi A">A. Erradi</name>
</author>
<author><name sortKey="Maheshwari, P" uniqKey="Maheshwari P">P. Maheshwari</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Bellavista, P" uniqKey="Bellavista P">P. Bellavista</name>
</author>
<author><name sortKey="Corradi, A" uniqKey="Corradi A">A. Corradi</name>
</author>
<author><name sortKey="Foschini, L" uniqKey="Foschini L">L. Foschini</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Alcarria, R" uniqKey="Alcarria R">R. Alcarria</name>
</author>
<author><name sortKey="Robles, T" uniqKey="Robles T">T. Robles</name>
</author>
<author><name sortKey="Morales, A" uniqKey="Morales A">A. Morales</name>
</author>
<author><name sortKey="Gonzalez Miranda, S" uniqKey="Gonzalez Miranda S">S. Gonzalez-Miranda</name>
</author>
</analytic>
</biblStruct>
</listBibl>
</div1>
</back>
</TEI>
<pmc article-type="research-article"><pmc-dir>properties open_access</pmc-dir>
<front><journal-meta><journal-id journal-id-type="nlm-ta">Sensors (Basel)</journal-id>
<journal-id journal-id-type="iso-abbrev">Sensors (Basel)</journal-id>
<journal-title-group><journal-title>Sensors (Basel, Switzerland)</journal-title>
</journal-title-group>
<issn pub-type="epub">1424-8220</issn>
<publisher><publisher-name>Molecular Diversity Preservation International (MDPI)</publisher-name>
</publisher>
</journal-meta>
<article-meta><article-id pub-id-type="pmid">23012526</article-id>
<article-id pub-id-type="pmc">3444084</article-id>
<article-id pub-id-type="doi">10.3390/s120708930</article-id>
<article-id pub-id-type="publisher-id">sensors-12-08930</article-id>
<article-categories><subj-group subj-group-type="heading"><subject>Article</subject>
</subj-group>
</article-categories>
<title-group><article-title>Enabling Flexible and Continuous Capability Invocation in Mobile Prosumer Environments</article-title>
</title-group>
<contrib-group><contrib contrib-type="author"><name><surname>Alcarria</surname>
<given-names>Ramon</given-names>
</name>
<xref ref-type="aff" rid="af1-sensors-12-08930"><sup>1</sup>
</xref>
<xref ref-type="corresp" rid="c1-sensors-12-08930"><sup>*</sup>
</xref>
</contrib>
<contrib contrib-type="author"><name><surname>Robles</surname>
<given-names>Tomas</given-names>
</name>
<xref ref-type="aff" rid="af1-sensors-12-08930"><sup>1</sup>
</xref>
</contrib>
<contrib contrib-type="author"><name><surname>Morales</surname>
<given-names>Augusto</given-names>
</name>
<xref ref-type="aff" rid="af1-sensors-12-08930"><sup>1</sup>
</xref>
</contrib>
<contrib contrib-type="author"><name><surname>López-de-Ipiña</surname>
<given-names>Diego</given-names>
</name>
<xref ref-type="aff" rid="af2-sensors-12-08930"><sup>2</sup>
</xref>
</contrib>
<contrib contrib-type="author"><name><surname>Aguilera</surname>
<given-names>Unai</given-names>
</name>
<xref ref-type="aff" rid="af2-sensors-12-08930"><sup>2</sup>
</xref>
</contrib>
</contrib-group>
<aff id="af1-sensors-12-08930"><label>1</label>
Department of Telematics Engineering, Technical University of Madrid, Avenida Complutense n. 30, Ciudad Universitaria, 28040 Madrid, Spain; E-Mails:<email>trobles@dit.upm.es</email>
(T.R.);<email>amorales@dit.upm.es</email>
(A.M.)</aff>
<aff id="af2-sensors-12-08930"><label>2</label>
Deusto Institute of Technology, University of Deusto, Avda. Universidades 24, 48007 Bilbao, Spain; E-Mails:<email>dipina@deusto.es</email>
(D.L.-I.);<email>unai.aguilera@deusto.es</email>
(U.A.)</aff>
<author-notes><corresp id="c1-sensors-12-08930"><label>*</label>
Author to whom correspondence should be addressed; E-Mail: <email>ralcarria@dit.upm.es</email>
; Tel.: +34-915-495-700 (ext. 3035); Fax: +34-915-439-652.</corresp>
</author-notes>
<pub-date pub-type="collection"><year>2012</year>
</pub-date>
<pub-date pub-type="epub"><day>28</day>
<month>6</month>
<year>2012</year>
</pub-date>
<volume>12</volume>
<issue>7</issue>
<fpage>8930</fpage>
<lpage>8954</lpage>
<history><date date-type="received"><day>22</day>
<month>3</month>
<year>2012</year>
</date>
<date date-type="rev-recd"><day>17</day>
<month>6</month>
<year>2012</year>
</date>
<date date-type="accepted"><day>19</day>
<month>6</month>
<year>2012</year>
</date>
</history>
<permissions><copyright-statement>© 2012 by the authors; licensee MDPI, Basel, Switzerland.</copyright-statement>
<copyright-year>2012</copyright-year>
<license><license-p><pmc-comment>CREATIVE COMMONS</pmc-comment>
This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution license (<ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/3.0/">http://creativecommons.org/licenses/by/3.0/</ext-link>
).</license-p>
</license>
</permissions>
<abstract><p>Mobile prosumer environments require the communication with heterogeneous devices during the execution of mobile services. These environments integrate sensors, actuators and smart devices, whose availability continuously changes. The aim of this paper is to design a reference architecture for implementing a model for continuous service execution and access to capabilities, <italic>i.e.</italic>
, the functionalities provided by these devices. The defined architecture follows a set of software engineering patterns and includes some communication paradigms to cope with the heterogeneity of sensors, actuators, controllers and other devices in the environment. In addition, we stress the importance of the flexibility in capability invocation by allowing the communication middleware to select the access technology and change the communication paradigm when dealing with smart devices, and by describing and evaluating two algorithms for resource access management.</p>
</abstract>
<kwd-group><kwd>prosumer</kwd>
<kwd>software engineering</kwd>
<kwd>ubiquitous computing</kwd>
<kwd>communication paradigms</kwd>
<kwd>resource management</kwd>
</kwd-group>
</article-meta>
</front>
<body><sec><label>1.</label>
<title>Introduction</title>
<p>Uniform access to resources and devices is one of the most discussed topics in ubiquitous computing related work. This is demonstrated by the large amount of work on communication middleware available today [<xref ref-type="bibr" rid="b1-sensors-12-08930">1</xref>
,<xref ref-type="bibr" rid="b2-sensors-12-08930">2</xref>
]. Continuous service execution requires addressing device interoperability problems, due to the wide heterogeneous nature of existing devices. The most common interoperability issues are related either to technology and access protocols or the format of the exchanged data, that is, the set of rules that must be taken into account to interpret the data once obtained. This work deals with the first category, which includes interoperability issues related to communication paradigms. Communication paradigms are often bounded to the employed protocol but sometimes they are decoupled. Connection-oriented, synchronous or asynchronous, message-based or service-based communications are considered in this category. This paper contributes to solve some of the issues related to communication middleware, regarding flexible and continuous service executions. For this, we describe the design and validation of a middleware solution for continuous capability access whilst service execution is taking place in ubiquitous environments. The main contribution of the paper is the definition of the communication middleware's architecture and its integration with other interdependent subsystems. Also, an implementation of this resource access middleware is proposed that integrates a set of access technologies and communication paradigms, which are commonly used and requested by available capabilities.</p>
<p>The presented middleware contributions are based on the work done in the mIO! project, which aims at the provision and consumption of prosumer services in a mobile environment. The term prosumer [<xref ref-type="bibr" rid="b3-sensors-12-08930">3</xref>
] (as an acronym formed by the fusion of the words producer and consumer) is applied to those users that are at the same time consumers and producers of services or contents. In our view, these users, placed in the center of device-rich environments, uses their smartphone to design, compose and configure new services with the help of creation tools. In mobile prosumer environments, the generated services use the available functionalities offered by surrounding devices and nearby elements. The middleware will try to guarantee that the service execution is maintained even though the used elements may change or disappear.</p>
<p>Mobile prosumer environments establish some requirements that determine the design of the proposed architecture. Focusing on non-expert users, a high level of abstraction is required in order to enable users to create their own services in an easy way. Besides, the architecture needs to adapt to changes in the availability of resources and services, as well as to provide a communication infrastructure for uniform resource access. For further information about the prosumer concept and the mIO! architecture the reader is referred to our previous work [<xref ref-type="bibr" rid="b4-sensors-12-08930">4</xref>
]. Based on the requirements of the mobile prosumer environment, the service must present a logical structure defined by different layers, described in the next Section. Section 3 analyses the communication paradigms currently used in communication middleware. Section 4 describes the overall architecture, which has been designed using various design patterns in order to meet the requirements imposed by the ubiquitous environment and the studied communication paradigms. Sections 5 and 6 describe the integration between the resolution and capability invocation processes while Sections 7 and 8 make a contribution to the communication with smart devices and the problem of resource and connection management respectively. Finally, the paper concludes with a validation of the designed system, related work and some conclusions of the proposed solution.</p>
</sec>
<sec><label>2.</label>
<title>Service Logical Model</title>
<p>The provision of a higher level of abstraction for prosumer users leads to the following concepts: <italic>Service</italic>
, as a unit supplied and consumed by the prosumer, <italic>Component</italic>
, which represents a basic and functional unit used by a service, and <italic>Capability</italic>
, which is the implementation of the functionality defined by a component and provided by some element (hardware or software). It is also necessary to introduce the concept of <italic>Orchestration</italic>
, which manages the interaction between the different components of a service, <italic>Resolution</italic>
, which manages the association of capabilities to components and, finally, <italic>Invocation</italic>
, which provides a uniform access to the infrastructure capabilities.</p>
<p>A service can be defined in many ways, depending on the state of the life cycle in which the service is. We define the logical structure of a service by different levels: the <bold>service level</bold>
, the <bold>component level</bold>
and the <bold>capability level</bold>
. To illustrate these concepts we present the example of a simple prosumer service, called <italic>Sport Tracker</italic>
, which aims to access the location information of a user and to represent it on a map along with information about his heartbeat. This service consists of three components: a <italic>Map</italic>
provider, a <italic>Location</italic>
provider and a <italic>Pulse</italic>
provider. These abstract services provide an interface that must be implemented so that the composed service can be executed. For example, the <italic>Location</italic>
component needs to be resolved into a GPS device or a GPS capability (e.g., offered by a mobile phone) in order to obtain the information about the user's location. <xref ref-type="fig" rid="f1-sensors-12-08930">Figure 1</xref>
shows the proposed service logical model, adapted to this simple example service.</p>
<p>The three-level model is explained below:</p>
<p>The first level is the <bold>service level</bold>
, where services are seen as a software structure that can be provided and consumed in a mobile device, with the capability of performing tasks where the different components used internally remain hidden. Service behavior and orchestration logic are specified through a Service Description Language (SDL) document.</p>
<p>Continuing with the <bold>component level</bold>
, the service is split into different logical units called components, which interact according to the logic defined by the service. A component is a basic and functional unit of a service. It is a high level functional abstraction that is implemented by a given capability depending on the service execution conditions. Components are used by the system to make the creation process easier and provide the adequate abstraction level so that a user can understand their functionality whereas the implementation details remain hidden. In order to make a step towards the new mobile prosumer environment, developers must implement and publish a big number of different components, which cover all the creation possibilities that a user could wish.</p>
<p>The <bold>orchestration process</bold>
manages the interaction among components, <italic>i.e.</italic>
, how the components are interconnected to compose services, how are the components managed and the data exchanged inside the architecture and how the components obtain the appropriate capability to implement their functionality. This process takes place during creation time and is performed by the creation subsystem.</p>
<p>Finally, in the <bold>capability level</bold>
a service is seen as a set of capabilities which offer the functionalities that are demanded by the service. Capabilities generally access to local (in-device), nearby or remote resources and are designed to achieve the components' objectives. The division between the component and the capability models is made for two reasons. First, the orchestration logic is decoupled from the implementation. This way, a component can be resolved into different capabilities depending on the service execution conditions and the preferences given by users in the creation process. Second, components are defined as functionalities that are easy to understand for non-expert users in order to help them to create simple services.</p>
<p>The <bold>resolution process</bold>
assigns, during execution time, each component to the best available capability that can implement it. This process takes place in the <italic>harmonization subsystem</italic>
. Finding the optimal capability depends on multiple factors, for example, the configuration options established by the user during creation time or component requirements.</p>
<p>In the <italic>Sport Tracker</italic>
's example scenario, since there is only one compatible capability for the <italic>Pulse</italic>
component, it can only be mapped to the Bluetooth sensor capability whereas the <italic>Map</italic>
component can choose a map provider based on user preferences or service restrictions. A component, by this way, defines some requirements so that the election of the capability is the optimal one.</p>
<p>The <bold>capability invocation process</bold>
, which is the main topic of this paper, is the one responsible for requesting and obtaining all the required resources. An effective coordination between the resolution and the invocation processes will enable continuous mobile service execution in dynamic environments. In these environments, the capabilities can appear and disappear at any time and the wide variety of sensors, actuators and other devices makes necessary to design different mechanisms for the access and invocation of heterogeneous capabilities. This process takes place in the Capability Middleware and is explained in section 4, along with the Creation, Execution and Harmonization subsystems.</p>
</sec>
<sec><label>3.</label>
<title>Communication Paradigms in Capability Access</title>
<p>Most mobile middleware solutions for resource access include only one communication paradigm, ignoring the fact that device configurations and conditions in such environments are extremely varied. Therefore, we have designed a capability access middleware that includes several communication paradigms, classified under three criteria:
<list list-type="simple"><list-item><label>-</label>
<p><italic>Coordination Mechanism</italic>
: Differentiates between synchronous or asynchronous communication models.</p>
</list-item>
<list-item><label>-</label>
<p><italic>Notification Model</italic>
: determines if consumers explicitly retrieve new messages or are notified when new messages are produced (synchronous or asynchronous notification).</p>
</list-item>
<list-item><label>-</label>
<p><italic>Connection Orientation</italic>
: many middleware platforms employ the notion of message as a fundamental building block (Message-oriented Middleware). Other middlewares use the concept of session to communicate with resources [<xref ref-type="bibr" rid="b5-sensors-12-08930">5</xref>
], providing channel and transaction management [<xref ref-type="bibr" rid="b6-sensors-12-08930">6</xref>
]. A connection oriented middleware uses sessions instead of single message interchange as the most natural method of communication.</p>
</list-item>
</list>
</p>
<p>The studied paradigms are described below. <xref ref-type="table" rid="t1-sensors-12-08930">Table 1</xref>
shows the features of these paradigms according to defined criteria and the requirements that they impose on the design of system's architecture, presented in the next section.</p>
<sec><title></title>
<sec><title>Request-Reply model</title>
<p>a synchronous model is adopted in situations that require the communicating entities to be connected simultaneously. The sending entity delegates the control to the receiving entity, which performs some processing and responds, allowing the first to continue its execution.</p>
</sec>
<sec><title>QP2P (Queue-based Point-to-point Paradigm)</title>
<p>distributed queues are used for sending and receiving messages. Using this model, messages are obtained in a predefined order based on queue type (FIFO, LIFO and so on). Producers and consumers are fully decoupled.</p>
</sec>
<sec><title>Tuple Spaces</title>
<p>this paradigm provides a distributed shared memory for the exchange of tuples between various entities, based on the Linda's model of communication [<xref ref-type="bibr" rid="b7-sensors-12-08930">7</xref>
]. Tuples are data structures that can be inserted, modified and removed from the shared space. Like QP2P, the Tuple Spaces paradigm uses an indirect model, mediated by a <italic>Tuple Space Service</italic>
, but in this case the consumer gets messages (tuples) by requesting them directly to this service.</p>
</sec>
<sec><title>Publish-Subscribe</title>
<p>communicating entities exchange messages by publishing events and subscribing to them. Generally, an intermediate service called Event Channel [<xref ref-type="bibr" rid="b8-sensors-12-08930">8</xref>
] is introduced, which registers the subscriptions and forwards the events published. In pub-sub systems, message delivery depends fully on the actions of the receivers, which frequently are unknown to the senders.</p>
</sec>
</sec>
</sec>
<sec><label>4.</label>
<title>Overall Architecture for Service Orchestration, Resolution and Invocation</title>
<p>The service provision and consumption platform described in this paper is designed for the mobile device of the prosumer user, and consists of a set of subsystems (see <xref ref-type="fig" rid="f2-sensors-12-08930">Figure 2</xref>
) which perform the functions of orchestration, resolution and capability invocation. The design of these subsystems is affected by the communication paradigms that address the capability access, which relate to the need for external services (services not included in the mobile phone) to manage deployed tuples and publication/subscription records (4a) and the environmental requirements for mobile prosumer users, stated in the introduction section.</p>
<p>Design patterns are used to address the requirements of the prosumer environment in an elegant and effective way [<xref ref-type="bibr" rid="b9-sensors-12-08930">9</xref>
]. The application of these patterns can impact the ability of systems to achieve their quality attribute goals, and, therefore, they affect the system architecture and help to address key issues that are resolved in the following sections. <xref ref-type="table" rid="t2-sensors-12-08930">Table 2</xref>
shows some requirements from the prosumer environment, the associated pattern that has been chosen to deal with each requirement and the implications in the overall architecture. The proposed subsystems are:</p>
<sec><title></title>
<sec><title>Creation Environment (1)</title>
<p>It provides mechanisms for service creation and composition by non-expert users through component interconnection and customization. Specifically, the user drags and drops some components into the creation environment and establishes some connections between them. This is possible because the platform provides a component repository in which components are published by external developers so that the creator can use them. The creator configures the components in order to set restrictions that will be analyzed at component resolution time. This environment performs the service orchestration process, resulting in the generation of the SDL document (1a), which describes the set of components required for the service to run properly, in addition to a number of restrictions that will be used by the harmonizer for optimal component resolution into capabilities.</p>
</sec>
<sec><title>Execution Environment (2)</title>
<p>It is responsible for processing the SDL document and generating the graphical visualization of the service. This environment starts the process of component resolution, which is carried out by the Harmonizer.</p>
</sec>
<sec><title>Harmonizer (3)</title>
<p>Its main function is to make the matchmaking between the component to execute and a compatible capability (3a) from those available at the capability repository (3b). The aim of the Harmonizer is to select the best capability for each component grounded on different sources of information (user profile, customization options in components, context information, capability definition and so on). We use the Strategy pattern [<xref ref-type="bibr" rid="b10-sensors-12-08930">10</xref>
] to manage and apply different algorithm families to capability selection strategies.</p>
</sec>
<sec><title>Capability Access Middleware (4)</title>
<p>It performs capability discovery and invocation tasks and manages the events received, providing a uniform interface to the Harmonizer for data access (4b). Invocations are processed by some synchronous and asynchronous communication processors, which depend on the communication paradigm. We use the Command pattern [<xref ref-type="bibr" rid="b10-sensors-12-08930">10</xref>
] to encapsulate all the necessary information to process a sync/async invocation. To deal with asynchronous communication we have chosen to use the Proactor pattern [<xref ref-type="bibr" rid="b10-sensors-12-08930">10</xref>
], that uses the inversion control mechanism (in callback methods, 3c) to decouple application-independent asynchrony mechanisms from application-specific functionality. Callback methods are invoked when an event appears, such as a message arrival to the Access Middleware through a connection to a capability and perform application-specific processing. The component resolution process as well as the synchronous and asynchronous invocation management is further explained in Section 4.</p>
<p>An important requirement to be considered in environments with a large amount of heterogeneous capabilities is how to provide mechanisms for effective reuse of communication technologies during resource accessing. The Capability Access Middleware represents the fundamental level of reusability and follows the Acceptor/Connector pattern [<xref ref-type="bibr" rid="b10-sensors-12-08930">10</xref>
], which decouples the connection among tasks from the processing performed once the connection was carried out. This is achieved using various connection drivers (4c). In Section 5 we develop the key aspects of event and connection management.</p>
<p>In order to achieve flexible communication with smart devices the access middleware is able to change the communication paradigm in real time. The Communication Manager module (4d) receives information from the Invocation Manager and decides whether the paradigm change is appropriated, regarding the invocation frequency, the number of running services and the nature of the smart device. Section 7 describes the Communication Manager in detail.</p>
<p>An access middleware for mobile environments is characterized, from the ubiquitous computing point of view, by the large number of connections and disconnections that occur in a continuously changing environment and the appearance and disappearance of new capabilities. Proper management of resources is needed for efficient capability access. This management is facilitated by the use of the Monitor Object pattern [<xref ref-type="bibr" rid="b10-sensors-12-08930">10</xref>
] (4e) which synchronizes method execution to ensure that only one method runs within an object at a time. It also allows an object's methods to cooperatively schedule their execution sequences. Section 8 describes resource management in detail and the optimization algorithms we have defined for the Middleware.</p>
</sec>
</sec>
</sec>
<sec><label>5.</label>
<title>Continuous Component Resolution in Mobile Environments</title>
<p>The harmonization subsystem provides a continuous component resolution process. The resolution is carried out using capabilities that are available in the user's current context. These capabilities are accessible in the own mobile device (e.g., GPS device), by proximity (e.g., printers, screens, <italic>etc.</italic>
) or they are globally accessible, using telecommunication networks (e.g., 3G, GSM, <italic>etc.</italic>
). Since these capabilities may disappear, the resolution process does not only take place at the beginning of each capability usage but also occurs when the Harmonizer determines that a change of capability is appropriate or necessary (e.g., a user with a GPS device enters an indoor environment). This subsystem also incorporates other advanced features, such as the suspension of running services and the detection of those new available capabilities that impeded a service execution.</p>
<p>The selection of the optimal capability for each component is done taking into account the user's preferences (e.g., higher priority for cheapest or closest devices) and component and capability descriptions, expressed using a XML language (see [<xref ref-type="bibr" rid="b4-sensors-12-08930">4</xref>
] for more details). A set of conditions can be defined to act as restrictions over a property, using comparison operators (<italic>i.e.</italic>
, ==, >=, <=, =, !=). These conditions are converted to other query languages like SPARQL or SQL to perform the matching process. The usage of an XML language decouples the restriction representation from a specific storage and matching technology and enables to perform capability selection in devices with more limited computational resources.</p>
<p>The selection of the optimal capability for a specific component is a problem which depends on the current user's context, his preferences and the available capabilities. For example, price, proximity or the capability's underlying communication protocol are possible aspects which could be applied and combined in different forms for selection. Due to the existence of multiple applicable possibilities and combinations, a single selection algorithm could not be always applied and, if possible, it would be too difficult to extend by including new functionalities.</p>
<p>To avoid the previous problems, the Harmonizer applies the Strategy pattern, which is a design pattern that defines a common interface for a family of algorithms, allowing the applied algorithm to be interchangeable, independently of the element using it. Each capability selection strategy can be managed individually and, furthermore, applied by the Harmonizer depending on the current user's needs. In addition, the usage of this pattern allows for the inclusion of new selection strategies dynamically, in the form of plugins, without the need of redeploying the whole application in the mobile device. An application of the Strategy pattern to the domain of data sorting, which is closely related to the selection of the best available capability, is explained in [<xref ref-type="bibr" rid="b11-sensors-12-08930">11</xref>
].</p>
<p>Once the resolution process has finished, the Harmonizer is responsible for transmitting any component invocation performed by the Execution Subsystem to the Capability Middleware and returning the execution results to the Result Rendering module (see <xref ref-type="fig" rid="f2-sensors-12-08930">Figure 2</xref>
). The messages exchanged among the Execution, Harmonization and Capability Middleware subsystems are Java Objects, which encapsulate the transmitted parameters. The Invocation API (see <xref ref-type="fig" rid="f3-sensors-12-08930">Figure 3</xref>
) contains generic methods for capability invocation, distinguishing between synchronous and asynchronous invocations.</p>
<p>The <italic>invokeSync</italic>
method returns the result of the synchronous invocation through the Invocation Manager (see <xref ref-type="fig" rid="f4-sensors-12-08930">Figure 4</xref>
). The <italic>capabilityId</italic>
parameter indicates the selected capability and the <italic>invocationArgs</italic>
parameter is a String array that contains the name of the method to be invoked and the parameters required for the method to run properly. This method returns a Java Object as a result, which is transmitted to the execution environment. After the Invocation Manager receives the synchronous access request, it creates a Synchronous Operation, designed by following the Command design pattern, which encapsulates all the necessary information to process the request (capability identification, <italic>capabilityId</italic>
; arguments needed to perform the invocation, <italic>invocationArgs</italic>
; driver identification, <italic>driverId</italic>
) and defines an <italic>execute()</italic>
method. This method performs the invocation request through a Driver, which controls the access technology, using <italic>capabilityId</italic>
and <italic>invocationArgs</italic>
. After that, the Invocation Manager selects a Synchronous Operation Processor to perform the Synchronous Operation in a new thread. There exist a limited number of Operation Processors, according to the number of Communication Paradigms that this middleware supports.</p>
<p>In the case of the asynchronous call (<italic>invokeAsync</italic>
method), the common solution is to use a multi-threaded technique to perform operations in parallel (synchronous multi-threading). Every requested operation is executed in a thread that is scheduled by a manager. It is easy to write code for one thread, but the synchronization among many threads is a challenging task [<xref ref-type="bibr" rid="b12-sensors-12-08930">12</xref>
]. Nevertheless, in our work, the inversion mechanism provided by the Proactor pattern is used. The Proactor architecture pattern demultiplexes and dispatches completion events that are triggered by the completion of asynchronous operations. These completion events are dispatched to concrete service handlers that process them. <xref ref-type="fig" rid="f5-sensors-12-08930">Figure 5</xref>
shows the developed implementation of the Proactor pattern for asynchronous communication between the Harmonizer and the Capability Middleware subsystems.</p>
<p>The Harmonizer consumes the API provided by the Middleware and invokes the <italic>invokeAsync (capabilityId, invocationArgs, capabilityHandler)</italic>
method, where <italic>capablityHandler</italic>
is the reference to an object that can process the asynchronous result once it is received. The <italic>invokeAsync</italic>
method is implemented by the Invocation Manager, which has two different roles: on one hand it defines the Asynchronous Operation as in the synchronous case and on the other hand registers the Asynchronous Operation with the <italic>capabilityHandler</italic>
provided by the Harmonizer. Thus, once the asynchronous invocation is completed and the result is returned, the Invocation Manager can retrieve the Capability Handler from the registry and send it the result.</p>
<p>Once the registration is performed, the Invocation Manager selects an Asynchronous Operation Processor to perform the Asynchronous Operation in a new thread. When the operation finishes executing, a completion event is generated by the Asynchronous Operation Processor, which notifies the Invocation Manager. Then, the Invocation Manager dispatches to the associated capability handler, which processes the results of the asynchronous operation.</p>
<p>When the execution environment does not wish to receive asynchronous invocation results from capabilities, either because the service is over or the service execution logic no longer requires asynchronous access to data, the Harmonizer uses the <italic>cancelAsync</italic>
API method, to cancel the event subscription. This invocation requests the Asynchronous Processor that is processing the Asynchronous Operation to terminate the connection to the capability. Once the connection has been completed, the Invocation Manager unregisters the Asynchronous Operation and returns a message indicating whether everything went well or not.</p>
</sec>
<sec><label>6.</label>
<title>Communication Architecture</title>
<p>A middleware that provides a single communication paradigm could not cope with the variety of sensors, actuators, controllers and other devices that act as capabilities in our environment, making their use very limited. This middleware solution offers a set of communication paradigms ranging from the traditional synchronous model to different variations of the asynchronous model.</p>
<p>We define a <italic>Synchronous/Asynchronous Operation Processor</italic>
as an entity chosen by the Invocation Manager to perform a sync/async operation. This operation may return an immediate result, as in the case of synchronous invocation or it may generate a series of events routed toward a Capability Handler, which is responsible for their processing. The way events containing invocation results are handled depends on the type of communication paradigm applied; therefore, there must be as many Operation Processors as Communication Paradigms are supported by the Middleware.</p>
<p>In the Capability Access Middleware we have implemented support for Request-Reply, QP2P and Publish-Subscribe communication models. The implications on the proposed architecture are described below:
<list list-type="simple"><list-item><label>-</label>
<p><italic>Request-Reply</italic>
: the Operation Processor defined for this synchronous model runs directly the invocation operation, blocking the execution and awaiting the outcome, which is returned as a synchronous result. In order to avoid blocking problems on long-lasting requests, the Harmonizer controls the invocation requests using threads.</p>
</list-item>
<list-item><label>-</label>
<p><italic>QP2P</italic>
: the Operation Processor, through a queue used for sending messages, has the possibility to handle asynchronous capability invocation in an independent way. In addition, it can also wait to receive some execution orders in order to make complex capability invocations. By having a queue for the receiving messages, the Operation Processor can return Completion Events composed of several responses. This is useful to send several responses received from the capability in a single message to the upper layers. For example, this paradigm is useful when accessing the Bluetooth pulse oximeter microX Medical RGB model [<xref ref-type="bibr" rid="b13-sensors-12-08930">13</xref>
], since the information it provides is composed of two messages containing the values of pulse and oxygen saturation. Instead, the capability handler for this device needs access to the two values at once. We consider the most correct way of dealing with this device is to wait to have the two values to produce a composite completion event.</p>
</list-item>
<list-item><label>-</label>
<p><italic>Publish-Subscribe</italic>
: this paradigm provides Subscribers with the ability to express their interest in a topic or set of topics in order to be notified subsequently of any incoming events generated by a Publisher, which match the registered interest. This middleware integrates a topic-based publish-subscribe mechanism with the addition of an external service called Event Channel, which provides storage and management for subscriptions and efficient delivery of events. When the Operation Processor needs to subscribe to any capability, it creates an object of the class Topic with the information of the capability and an object of type Subscriber, which subscribes to the topic. The Subscriber object implements the method notify (Message m), which will receive messages published by the capability.</p>
</list-item>
</list>
</p>
<p>Because of the need to establish and maintain connections that use scarce resources in the mobile terminal (Bluetooth stack and ports), a Resource Controller Module has been incorporated to the proposed middleware for connection management, which optimizes connection duration and reduces data access delay. In the previous section, we described the usefulness of the connection drivers to decouple the invocation processing from the technology used for capability access. In order to implement this decoupling, we have used the Acceptor/Connector pattern, which defines two entities called Acceptor and Connector. The Acceptor is responsible for creating an endpoint that passively listens to connection requests in a particular address. The Connector connects to a remote Acceptor. In this pattern, there is an element called <italic>ServiceHandler</italic>
, which provides a hook method that is called by an Acceptor or Connector to activate the application service when the connection is established. Once a Service Handler is completely initialized by an Acceptor or Connector factory it typically does not interact with these components any further.</p>
<p>Invocation drivers contain an Acceptor and Connector entities. The former listens to capability connection requests while the latter (that is the one used most often) makes requests over external capabilities. ServiceHandlers adapt and uniform the invocation result and deliver it to the Sync/Async Operation Processor for further processing.</p>
<p><xref ref-type="fig" rid="f6-sensors-12-08930">Figure 6</xref>
shows an implementation of the communication between the Access Driver, the Operation Processor that executes it and the Resource Controller. In each driver there is a pool of ServiceHandlers, managing information from different types of capabilities. This design seeks to standardize data from heterogeneous devices so that can be recognized by Middleware's upper layers (Harmonizer and Execution subsystem). Between the drivers and the Resource Controller, two interfaces are defined, Resource API and Connection API, which exchange messages for controlling resources, an issue that we describe in the next section.</p>
</sec>
<sec><label>7.</label>
<title>Communication with Smart Devices</title>
<p>The capabilities that are commonly accessed by the described middleware often restrict the communication paradigm used. For example, the Request-Reply paradigm determines the behavior of many devices and sensors that transmit the contained information when receiving a request message. Other devices also support asynchronous transmission, allowing them to send data sequentially, without needing to continuously receive request messages from consumer services [<xref ref-type="bibr" rid="b14-sensors-12-08930">14</xref>
]. This allows them to save resources, as they don't process request messages for each data to be transmitted. However, sending data without knowing their demand may not have an acceptable performance, since the device does not know a priori if there are other entities willing to consume the information it provides.</p>
<p>We call smart devices to those devices that support various communication paradigms, responding to synchronous and asynchronous information requests. In this section we describe how the push/pull model, deeply studied in the literature of wireless sensor networks [<xref ref-type="bibr" rid="b14-sensors-12-08930">14</xref>
,<xref ref-type="bibr" rid="b15-sensors-12-08930">15</xref>
], is integrated in our model with the support of the Request-Reply and the Publish-Subscribe communication paradigms.</p>
<p>Interoperability problems in communication (in terms of technologies, protocols and format of exchanged data) between the smart device and the middleware are outside the scope of the paper. Thus, we say that the use of a specific communication model is automatically performed by the smart device when it receives a data request in the language or protocol supported by the paradigm. The proposed middleware allows changes in the selected communication paradigm at two levels. At the service level, the change is produced by the alternated use of the <italic>invokeSync</italic>
and the <italic>invokeAsync</italic>
methods when calling the capability access middleware. At the communication level, it is produced by the choice of the correct service handler inside a communication driver. In this section we focus on the paradigm change at the communication level.</p>
<p>The middleware defined in this paper detects if the capability corresponds to a smart device through the discovery module, which accesses the capability description document and identifies all the needed parameters to invoke it. Flexible communication with smart devices (being able to change the communication paradigm on demand) reduces the number of transmissions between the communication middleware and the smart device.</p>
<sec><label>7.1.</label>
<title>Communication Paradigm Change</title>
<p>In this section we study under what conditions the paradigm change process is activated and how the capability access middleware supports the change in the communication model without affecting the upper level (communication with the harmonizer) and the communication quality with the device.</p>
<p>The use of a Publish-Subscribe communication model instead of the Request-reply model eliminates the request messages generated by the middleware. In contrast, the frequency of publication messages must be synchronized with the frequency of information request from the execution environments to avoid sending publications of data that will not be used or having delay or synchronization problems. Thus, the middleware request a subscription to the content generated by a smart device with a given publication rate. This rate will be accepted by the smart device if it has the necessary resources (the requested publication rate is lesser that the maximum sampling rate). To resolve synchronization problems between the middleware and the intelligent devices, the middleware is able to send back a subscription message with a new requested publication rate.</p>
<p>The proposed service model considers that the execution environment may be running different services that access the same intelligent device with different invocation rates or single invocations (e.g., the invocations produced by user interaction with interface elements such as buttons). The invocation manager maintains a table with the identifier of the smart capabilities and its request frequency (<italic>f</italic>
). At the beginning of service execution, <italic>f</italic>
is unknown, but it is learned after receiving a number (<italic>n</italic>
) of invocation requests separated by an interval <italic>T</italic>
= <italic>1/f</italic>
. Due to the difficulty to deal with periodic invocations with different periods on the same capability, we have decided to give priority to the periodic invocation with higher frequency and use the Publish-Subscribe paradigm, whereas other periodic and single invocations will be performed by using Request-Reply. For each received invocation request, the invocation manager applies the process described in <xref ref-type="fig" rid="f7-sensors-12-08930">Figure 7</xref>
.</p>
<p>If the received invocation is part of a sequence of invocations the process checks whether the sequence frequency is higher than the current frequency <italic>f<sub>c</sub>
</italic>
, which is currently used in Pub-Sub invocations. If the new frequency is higher the process assigns this frequency to the Pub-Sub invocations, replacing <italic>f<sub>c</sub>
</italic>
and sending a new Subscribe message with the new requested publication rate. Otherwise the invocation is done using Request-Reply.</p>
<p>Being I:= {<italic>i<sub>1</sub>
, i<sub>2</sub>
</italic>
, …, <italic>i<sub>c</sub>
</italic>
} the set of invocations received by the middleware at the times <italic>t<sub>1</sub>
</italic>
to <italic>t<sub>c</sub>
</italic>
, and <italic>T<sub>12</sub>
</italic>
= <italic>t<sub>2</sub>
</italic>
− <italic>t<sub>1</sub>
</italic>
, in order to check if the invocation <italic>i<sub>c</sub>
∈</italic>
I, received in <italic>t<sub>c</sub>
</italic>
, corresponds to a sequence, the algorithm described in pseudocode in Algorithm 1 is applied. This algorithm checks if a received invocation corresponds to a sequence. To do that, it calculates the time differences between all the stored invocations and checks for periods between invocations that match <italic>n</italic>
times.</p>
<array><tbody><tr><td align="left" valign="top" colspan="2" rowspan="1"><bold>Algorithm 1.</bold>
Sequence check algorithm.</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">1:</td>
<td align="left" valign="top" rowspan="1" colspan="1">i:= c − 1;</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">2:</td>
<td align="left" valign="top" rowspan="1" colspan="1">calculate T<sub>ic</sub>
;</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">3:</td>
<td align="left" valign="top" rowspan="1" colspan="1">for 1 to n:</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">4:</td>
<td align="left" valign="top" rowspan="1" colspan="1"> if ∄ j ∈ {1,…, i−1} / T<sub>ic</sub>
= T<sub>ji</sub>
;</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">5:</td>
<td align="left" valign="top" rowspan="1" colspan="1"> then i:= i − 1; goto 2;</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">6:</td>
<td align="left" valign="top" rowspan="1" colspan="1"> else save (j) in results; c:= i; i:= j;</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">7:</td>
<td align="left" valign="top" rowspan="1" colspan="1">if results.length < n return false;</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">8:</td>
<td align="left" valign="top" rowspan="1" colspan="1">else return true;</td>
</tr>
</tbody>
</array>
</sec>
<sec sec-type="discussion"><label>7.2.</label>
<title>Architecture Implications</title>
<p>As indicated in Section 5, there exist a limited number of Operation Processors, according to the number of Communication Paradigms that this middleware supports. Therefore, in the Communication Paradigm change process, the original Sync/Async Operation Processor will be maintained, depending on the method invoked by the Harmonizer, invokeSync or invokeAsync.</p>
<p>Regarding the system architecture, the change of the communication paradigm in periodic invocation to smart capabilities can only be performed when the <italic>invocationArgs</italic>
of the periodic invocations are the same. If not, these invocations cannot be considered as periodic and they are treated individually, as single invocations. Therefore, the considered periodic invocations generate the same Synchronous or Asynchronous Operation object, which contains the capability identifier <italic>capabilityId</italic>
, the invocation arguments <italic>invocationArgs</italic>
, and the <italic>Driver</italic>
that will perform the invocation. This driver, specifically designed to access the smart capability, manages the paradigm change through the service handlers that it contains. These service handlers are adapted to the communication paradigms supported by the smart device.</p>
<p>The paradigm is chosen by the Communication Manager module, which consumes information from the Invocation Manager, regarding the number of invocations and the time in which they occur. The Communication Manager communicates with connection drivers via the Connection API, indicating which service handler should handle the invocation and the parameters to use (invocation period, subscription and unsubscription information).</p>
<p><xref ref-type="fig" rid="f8-sensors-12-08930">Figure 8</xref>
shows an interaction diagram of a Request-Reply to Publish-Subscribe paradigm change. The communication module, in the first invocation, selects the Service Handler that uses the Request-Reply paradigm. In the second invocation the Communication Module decides to change the paradigm to Publish-Subscribe. Therefore the communication module selects the P-S service handler and sends it some parameters such as requested publication frequency or whether a subscription or unsubscription is required.</p>
<p>After the last interaction described in the interaction diagram the Service Handler (P-S) will receive publications form the smart device without having to send the <italic>subscribe</italic>
message again. Section 9 shows a validation of the paradigm change in a typical service execution scenario from Mobile Prosumer Environments.</p>
</sec>
</sec>
<sec><label>8.</label>
<title>Resource Management for Capability Discovery and Invocation</title>
<p>The environment described in our work defines capability access as a fundamental mechanism for a prosumer service since it enables to obtain the needed functionality at execution time. In the previous section we considered that these services request access to capabilities for repetitive invocations with a constant frequency. These invocations concurrently use resources of the mobile terminal that can be considered as limited (communication ports and Bluetooth stack). Therefore, we have defined mechanisms for resource management by using the Monitor Object concurrency pattern. This pattern synchronizes method execution to make sure that only one method is executed at a time. Thus, different drivers can concurrently attempt to access a common resource, but an internal mechanism will synchronize access to it, allowing access to one driver at a time. In Java, <italic>synchronized</italic>
methods are used for this task. <xref ref-type="fig" rid="f9-sensors-12-08930">Figure 9</xref>
shows how a driver obtains a resource and uses it: first the driver should contact the Resource API for a Resource Object, then it establishes the priority to acquire the resource and, after using the resource, the driver releases it.</p>
<p>The Decissor module, in the Resource Controller, selects which invocation acquires the resource based on profiles. If the selected profile (by user preferences or depending on the capability type) seeks to reduce energy consumption in the Access Middleware, it will minimize the parameter
<inline-formula><mml:math id="mm1"><mml:mrow><mml:mover><mml:msub><mml:mi>U</mml:mi>
<mml:mrow><mml:msub><mml:mi>C</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>¯</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>
. This parameter defines the average utilization rate of a resource for connections with an X capability, given that maintaining an open connection without being used increases battery consumption (from 6.6 mW in stand-by state to 69 mW in connected state for Bluetooth in the work of Cano <italic>et al.</italic>
[<xref ref-type="bibr" rid="b16-sensors-12-08930">16</xref>
]). But if the objective is to minimize the invocation delay, the middleware adopts a profile that attempts to increase
<inline-formula><mml:math id="mm2"><mml:mrow><mml:mover><mml:msub><mml:mi>U</mml:mi>
<mml:mrow><mml:msub><mml:mi>C</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>¯</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>
, so that connections are always active (see delay analysis in the validation section). We have implemented these two profiles with two algorithms called ESA (Energy Saving Algorithm) and SOA (Session Optimization Algorithm).</p>
<p>The ESA algorithm is simple: When the driver requests a resource to perform a capability connection, the Resource Controller blocks the request until the resource has become free. When the driver stops using the resource, it can invoke <italic>setPriority(Priority.LOW)</italic>
or <italic>releaseResource()</italic>
to indicate that it does not need this resource for a while.</p>
<p>The SOA algorithm is described in Algorithm 2. Be R<sub>x</sub>
a resource X, Q<sub>Hx</sub>
and Q<sub>Lx</sub>
priority and non-priority invocation queues that use R<sub>x</sub>
, and I<sub>Cy</sub>
an invocation to Y capability, the Decissor applies the algorithm when it receives a resource request.</p>
<array><tbody><tr><td colspan="2" align="left" valign="top" rowspan="1"><bold>Algorithm 2.</bold>
Pseudocode of Session Optimization Algorithm.</td>
</tr>
<tr><td colspan="2" align="left" valign="top" rowspan="1">(<italic>I<sub>C<sub>y</sub>
</sub>
, R<sub>x</sub>
</italic>
) setPriority (Priority.HIGH)</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">1:</td>
<td align="left" valign="top" rowspan="1" colspan="1">add to <italic>Q<sub>Hx</sub>
</italic>
</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">2:</td>
<td align="left" valign="top" rowspan="1" colspan="1">if <italic>R<sub>x</sub>
</italic>
is used by <italic>I<sub>C<sub>z</sub>
</sub>
</italic>
with Priority.LOW then</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">3:</td>
<td align="left" valign="top" rowspan="1" colspan="1"> release(<italic>R<sub>x</sub>
</italic>
) from <italic>I<sub>C<sub>z</sub>
</sub>
</italic>
</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">4:</td>
<td align="left" valign="top" rowspan="1" colspan="1"> assign(<italic>R<sub>x</sub>
</italic>
) to first element of <italic>Q<sub>Hx</sub>
</italic>
</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">5:</td>
<td align="left" valign="top" rowspan="1" colspan="1"> wait() until <italic>R<sub>x</sub>
</italic>
is assigned to <italic>I<sub>C<sub>y</sub>
</sub>
</italic>
</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">6:</td>
<td align="left" valign="top" rowspan="1" colspan="1"> return</td>
</tr>
<tr><td colspan="2" align="left" valign="top" rowspan="1">(<italic>I<sub>C<sub>y</sub>
</sub>
, R<sub>x</sub>
</italic>
) setPriority (Priority.LOW)</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">1:</td>
<td align="left" valign="top" rowspan="1" colspan="1">add to <italic>Q<sub>Lx</sub>
</italic>
</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">2:</td>
<td align="left" valign="top" rowspan="1" colspan="1">if <italic>R<sub>x</sub>
</italic>
is not used then</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">3:</td>
<td align="left" valign="top" rowspan="1" colspan="1"> assign(<italic>R<sub>x</sub>
</italic>
) to first element of <italic>Q<sub>Lx</sub>
</italic>
</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">4:</td>
<td align="left" valign="top" rowspan="1" colspan="1"> wait() until <italic>R<sub>x</sub>
</italic>
is assigned to <italic>I<sub>C<sub>y</sub>
</sub>
</italic>
</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">5:</td>
<td align="left" valign="top" rowspan="1" colspan="1"> return</td>
</tr>
<tr><td colspan="2" align="left" valign="top" rowspan="1">(<italic>I<sub>C<sub>y</sub>
</sub>
, R<sub>x</sub>
</italic>
) releaseResource ()</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">1:</td>
<td align="left" valign="top" rowspan="1" colspan="1"> release(<italic>R<sub>x</sub>
</italic>
) from <italic>I<sub>C<sub>y</sub>
</sub>
</italic>
</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">2:</td>
<td align="left" valign="top" rowspan="1" colspan="1"> assign(<italic>R<sub>x</sub>
</italic>
) to first element of <italic>Q<sub>Hx</sub>
</italic>
</td>
</tr>
</tbody>
</array>
<p>In order to release and assign resources, the Decissor interacts with the Connection API for communicating to drivers. Finally, there is also a thread that assigns R<sub>x</sub>
to the first element of Q<sub>Hx</sub>
and, if Q<sub>Hx</sub>
is empty, to the first element of Q<sub>Lx</sub>
.</p>
</sec>
<sec><label>9.</label>
<title>Validation</title>
<p>This work has been validated as part of a prototype implementation that consists of a Creation Environment, Execution Environment, Harmonizer [<xref ref-type="bibr" rid="b4-sensors-12-08930">4</xref>
] and Access Middleware, according to the mIO! project's architecture devised for mobile service provision. Section 9.1 describes the implementation of the Capability Access Middleware and the communication with smart devices whereas Section 9.2 presents a performance evaluation of the two algorithms for resource management.</p>
<sec><label>9.1.</label>
<title>Prototype Evaluation</title>
<p>The developed middleware follows the architecture described in <xref ref-type="fig" rid="f2-sensors-12-08930">Figure 2</xref>
, integrating the Request-Reply, QP2P and Publish-Subscribe communication paradigms and the explained design patterns. The discovery module and some drivers that control capability access have also been developed, using REST, Bluetooth (RFCOMM and OBEX), SOAP and Java local access. For this proof of concept, we have tested access to Google Maps and Ovi Maps using REST, control of an UPnP / DLNA network hard drive (Model Media Iomega Home Network Drive) through SOAP and connection to a B600 FRWD heart rate monitor and a BT microX Medical RGB [<xref ref-type="bibr" rid="b13-sensors-12-08930">13</xref>
] pulse oximeter.</p>
<p>The capability access middleware has been implemented in Java ME, integrated with the Harmonization Subsystem and tested in a Nokia N97 and Nokia 5800 XpressMusic (O.S. Symbian S60 5° Ed) devices.</p>
<p>To evaluate the communication with smart devices the mobile terminal has been used to simulate a set of smart sensors that support the Request-Reply and Publish-Subscribe paradigms. We define a realistic service execution scenario in which there are three services running simultaneously and accessing the capability offered by a smart device as described in <xref ref-type="table" rid="t3-sensors-12-08930">Table 3</xref>
. The <italic>n</italic>
parameter, used by the communication manager, indicates the amount of invocations with the same frequency that are needed to consider those invocations within the same sequence. The <italic>δ</italic>
parameter enables to establish a margin of variation to recognize invocations within the same sequence. With the values of <italic>δ</italic>
and <italic>n</italic>
shown in this table no error was found in recognizing the invocation frequencies of Services 1, 2 and 3, although their invocation frequency is very close.</p>
<p><xref ref-type="fig" rid="f10-sensors-12-08930">Figure 10</xref>
represents the behavior of the communication middleware when receiving the invocations described in <xref ref-type="table" rid="t3-sensors-12-08930">Table 3</xref>
. Γ<sub>x</sub>
is the average number of transmissions performed by the communication middleware with the device that simulates the behavior of the smart services. The difference becomes noticeable once Service #2 starts, in the second 3.29, from which the application of the paradigm change model saves up to 25% of the transmissions. From 160 total invocations to the intelligent device, that is, 320 Request-Reply transmissions, the use of the paradigm change model reduces this number to 224, that is, a 70%.</p>
</sec>
<sec><label>9.2.</label>
<title>Performance Comparison</title>
<p>As a proof of concept for resource management we present a performance evaluation of capability access using the internal Bluetooth capability (through JSR 82) of the mobile terminal that is executing the Capability Access Middleware. The aim of this study is to compare the behavior of the Resource Controller for each of the defined algorithms (ESA and SOA) in these two use cases:
<list list-type="simple"><list-item><p>Case #1: The system runs a service that accesses the Bluetooth resource every 6 seconds.</p>
</list-item>
<list-item><p>Case #2: The system runs two services accessing via Bluetooth to different capabilities periodically, with a frequency of 5 and 12 seconds.</p>
</list-item>
</list>
</p>
<p>In these cases we are not taking into account the discovery time and we assume that the Bluetooth service accessed is known. If Bluetooth capabilities were unknown, the Discovery module (which also uses the Bluetooth resource) would be needed. Thus, discovery is modeled as another capability that accesses resources for the Resource Controller's point of view.</p>
<p>As mentioned in Section 8 and for the Bluetooth case, the ESA algorithm purpose is to optimize power consumption by minimizing the utilization of the Bluetooth resource. On the other hand, the SOA algorithm purpose is to minimize the Bluetooth capability access whilst maintaining the connection with the Bluetooth resource as long as possible. We found that the average delay for data access using the studied Bluetooth capability (BT microX Medical RGB pulse oximeter) corresponds to 3,953 ms (0.2 standard deviation) and 1,988 ms (0.3 standard deviation) if the connection was already established before. <xref ref-type="fig" rid="f11-sensors-12-08930">Figure 11</xref>
analyzes the value of
<inline-formula><mml:math id="mm3"><mml:mrow><mml:mover><mml:msub><mml:mi>U</mml:mi>
<mml:mi>C</mml:mi>
</mml:msub>
<mml:mo>¯</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>
(Average resource usage rate for connections with studied capabilities) for both use cases and ESA and SOA algorithms, knowing that a low value of
<inline-formula><mml:math id="mm4"><mml:mrow><mml:mover><mml:msub><mml:mi>U</mml:mi>
<mml:mi>C</mml:mi>
</mml:msub>
<mml:mo>¯</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>
optimizes power consumption, while a value of
<inline-formula><mml:math id="mm5"><mml:mrow><mml:mover><mml:msub><mml:mi>U</mml:mi>
<mml:mi>C</mml:mi>
</mml:msub>
<mml:mo>¯</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>
close to 100% determine a lower access delay.</p>
<p>These figures show that the difference between the two algorithms in terms of channel usage for connections is clear. In Case #1 with ESA algorithm the average resource usage for connections tends to 100% as time passes, due to the fact that the Middleware creates a single connection, which holds every invocation (20 invocations in 1 connection for 120 seconds). In the case of SOA, the resource is used just to receive the capability data, which corresponds to about 50% utilization. In Case #2 (which is a more realistic behavior for a multi-execution environment), the difference in values, although significant, is not as extreme; since in both cases it is necessary to make disconnections (22 <italic>versus</italic>
15) to release the resource in order to be used by other capabilities.</p>
</sec>
</sec>
<sec><label>10.</label>
<title>Related Work</title>
<p>This section concentrates on reviewing previous work on communication middleware in continuous service execution environments. Continuous service execution, studied as service roaming in related work [<xref ref-type="bibr" rid="b17-sensors-12-08930">17</xref>
,<xref ref-type="bibr" rid="b18-sensors-12-08930">18</xref>
], enables the consumption of services in a mobile environment. Services are only valid in a specific scope, becoming useless where the user moves outside it. Context changes are monitored to check for valid scopes during the execution, triggering the search for other compatible services when current scope changes. Ontologies and service roaming are used in conjunction in [<xref ref-type="bibr" rid="b19-sensors-12-08930">19</xref>
]. However, none of these approaches takes into account the particular characteristics of micro-services in prosumer environments, where users create their own services, which are provided to others. For detailed study of service provision in mobile prosumer environments the authors refer to their previous work [<xref ref-type="bibr" rid="b4-sensors-12-08930">4</xref>
].</p>
<p>There are many types of communication middlewares, Message Oriented (MoM), Remote Procedure Call (RPC), Object Request Broker (ORB) and even Service-oriented Architecture Middlewares [<xref ref-type="bibr" rid="b20-sensors-12-08930">20</xref>
]. While traditional middleware platforms typically employ synchronous, RPC-style client/server interactions, MoMs provide asynchronous, peer-to-peer style interactions, leading to a more loosely coupled architecture which is more adequate for dynamic mobile environments [<xref ref-type="bibr" rid="b21-sensors-12-08930">21</xref>
]. Related work in communication middleware for dynamic environments (such as the mobile prosumer environment) provide flexibility and reconfiguration to their systems in two levels, in the architectural and development model level and in the communication support level.</p>
<p>In the architecture level, some research has enhanced CORBA-based middleware to become flexible, customizable and lightweight. For example, UIC [<xref ref-type="bibr" rid="b22-sensors-12-08930">22</xref>
], based on dynamicTAO [<xref ref-type="bibr" rid="b23-sensors-12-08930">23</xref>
], an extension of CORBA, provides a reflective architecture that detects the presence of a remote device and loads at runtime the adequate communication driver to manage the connection. To achieve adaptability and flexibility, in addition to use reflective techniques, they are also employed some real time refactoring techniques for models [<xref ref-type="bibr" rid="b24-sensors-12-08930">24</xref>
], detecting antipatterns and ill-structures, and also for the programming level, as in the work of Binley <italic>et al.</italic>
[<xref ref-type="bibr" rid="b25-sensors-12-08930">25</xref>
], who use AspectJ to refactor OOP (Object Oriented Programming) programs into equivalent AOP (Aspect Oriented Programming) programs. Other works [<xref ref-type="bibr" rid="b26-sensors-12-08930">26</xref>
] opt to generate architecture-level programs, providing flexibility by modeling of variation points and design patterns at various architecture levels. The adaptability to requirements of new environments or locations is also tacked in the literature. AmbientSoaML [<xref ref-type="bibr" rid="b27-sensors-12-08930">27</xref>
] introduces ambients (bounded places where computation occurs) in Service oriented architecture Modeling Language (SoaML) to extend this metamodel with mobility concerns and decoupling them from the business logic. The concept of ambient is also introduced in the work of Ali <italic>et al.</italic>
[<xref ref-type="bibr" rid="b28-sensors-12-08930">28</xref>
] in the form of connectors that offer mobility services to architectural elements and coordinate element boundaries. The notions of adaptability and separation of concerns of these two approaches are also addressed in our work by using communication paradigms and design patterns respectively. However, the scope of our work is different, as we focus on a programming perspective and the works of Ali <italic>et al.</italic>
in the metamodel design.</p>
<p>With regard to the communication support level we highlight the works in reconfigurable communication middleware. The PLA middleware [<xref ref-type="bibr" rid="b29-sensors-12-08930">29</xref>
] has been designed as a flexible and lightweight middleware for ubiquitous computing, aimed for mobile terminals. The main difference with our proposal, from the point of view of software engineering, is that they combine minimal fine-grained components and use a mixin layer approach [<xref ref-type="bibr" rid="b30-sensors-12-08930">30</xref>
] to tailor the architecture to fit in a specific scenario. MUSIC [<xref ref-type="bibr" rid="b31-sensors-12-08930">31</xref>
] also extends a generic middleware, which seamlessly supports component-based and service-based configurations. The functionality provided by a component can be dynamically configured to adapt the framework to different environments. In our work does not extend or particularize a basic middleware core but it develops a complete solution which focuses in mobile prosumer environments and is designed specifically for it.</p>
<p>Integrating communication paradigms in Access Middleware has been tackled in [<xref ref-type="bibr" rid="b21-sensors-12-08930">21</xref>
], proposing an architecture which supports the traditional synchronous model and different variations of the so-called asynchronous models. Other works, as GREEN [<xref ref-type="bibr" rid="b32-sensors-12-08930">32</xref>
], focus in the concept of reconfiguration in continuous execution environments, and provide a reconfigurable middleware (according to application requirements and context information) that supports publish-subscribe interaction types (topic-based, content-based and location-based) but only for one communication paradigm.</p>
<p>In ubiquitous computing environments, devices might not be connected at all times. Several proposals take this into account and support that devices enter and leave networks on an <italic>ad hoc</italic>
basis. This behavior can be modeled by using P2P networks [<xref ref-type="bibr" rid="b33-sensors-12-08930">33</xref>
], in which devices are peers and communicate via <italic>ad hoc</italic>
protocols. To locate these devices, some content-based techniques are used, such as Distributed Hash Tables (DHT). Other works [<xref ref-type="bibr" rid="b34-sensors-12-08930">34</xref>
] introduce the concept of Ubiquitous Consumer Wireless World (UCWW), where the consumer changes its access network provider to use available and suitable services in a continuous way, following the “always best connected and best served” paradigm.</p>
<p>Related works in resource management are divided between those that provide mechanisms for overload prevention, that is, provide message prioritization and load balancing [<xref ref-type="bibr" rid="b35-sensors-12-08930">35</xref>
], and those which rely on adaptation mechanisms that change the access protocol or session QoS parameters. Regarding the latter, MUM [<xref ref-type="bibr" rid="b36-sensors-12-08930">36</xref>
] proposes a dynamic and flexible middleware to support continuous services to mobile users by migrating the session state in response to user movements during service provisioning. It also integrates some sync/async client/server paradigms but it focuses in session management and preservation rather than device access or architectural issues. In [<xref ref-type="bibr" rid="b6-sensors-12-08930">6</xref>
], a Session Initiation Protocol middleware is provided for session management, which also provides resource reservation and QoS management for user services. However, resource reservation is done at the session level, through SDP (Session Description Protocol). Our work supports session management by the Harmonizer and the connection-oriented communication paradigms (request-reply and publish-subscribe), and also enables physical resource reservation, as in the Bluetooth case, analyzed in detail in Section 8.</p>
</sec>
<sec><label>11.</label>
<title>Conclusions and Future Work</title>
<p>This paper proposes a solution for enabling flexible and continuous capability invocation in ubiquitous environments. This solution is focused in mobile prosumer environments, in which the user is the center of the environment and his mobile phone is the gateway for interacting with the surrounding capabilities. The requirements imposed by this environment determine the existence of three processes: Orchestration, Resolution and Capability Invocation. Focusing on the latter, our main contribution in this work is specified by the definition and implementation of an architecture for a communication middleware and its integration with other dependent subsystems, such the Harmonizer, as part of an overall architecture for the mIO! project. This architecture has been developed following the design patterns Strategy, Command, Proactor, Acceptor/Connector and Monitor Object [<xref ref-type="bibr" rid="b10-sensors-12-08930">10</xref>
], in order to meet the requirements of strategy-based resolution, low coupling, asynchronism, reusability and efficient resource management respectively.</p>
<p>The communication paradigms that are present in the Access Middleware (Request-Reply, QP2P and Publish-Subscribe) allow it to cope with the heterogeneity of sensors, actuators, controllers and other devices in the environment. The middleware implementation fulfills the task of decoupling capability access from the selection of the optimal capability and from the processing of the generated information. In order to deal with the so called smart devices, the developed middleware supports the automatic communication paradigm change. We focus in the push/pull model, describing the change from the Request-reply to the Publish-Subscribe paradigm and <italic>vice versa</italic>
. In the evaluation section we determine that using the described paradigm change model and algorithm we can save up to 25% of the transmissions between the communication middleware and the smart devices.</p>
<p>Finally, we have made a contribution related to the management of limited resources in the mobile terminal that performs capability access by comparing the performance of two algorithms for Bluetooth access in terms of energy consumption and data access delay. This leads to the conclusion that the Access Middleware must be able to decide which algorithm to use depending on the parameter to optimize (delay or consumption), which will be given by user preferences or provided by contextual information.</p>
<p>In the same way that the Harmonizer incorporates different decision strategies for component resolution, as future work we plan to extend the communications middleware architecture to improve the intelligent selection of the optimal communication paradigm. Also, we consider the concept of dynamic service deployment [<xref ref-type="bibr" rid="b37-sensors-12-08930">37</xref>
] in the form of OSGi bundles, applied to automatic driver deployment in the communication middleware so that we can extend our current work to new and heterogeneous capabilities.</p>
</sec>
</body>
<back><ack><p>The authors would like to thank to the anonymous referees for comments and recommendations for the paper improvement.</p>
</ack>
<ref-list><title>References</title>
<ref id="b1-sensors-12-08930"><label>1.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Hadim</surname>
<given-names>S.</given-names>
</name>
<name><surname>Mohamed</surname>
<given-names>N.</given-names>
</name>
</person-group>
<article-title>Middleware for Wireless Sensor Networks: A Survey</article-title>
<conf-name>Proceedings of the 1st International Conference on Communication System Software and Middleware</conf-name>
<conf-loc>Verona, Italy</conf-loc>
<conf-date>1–3 July 2006</conf-date>
<fpage>1</fpage>
<lpage>7</lpage>
</element-citation>
</ref>
<ref id="b2-sensors-12-08930"><label>2.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Molla</surname>
<given-names>M.M.</given-names>
</name>
<name><surname>Ahamed</surname>
<given-names>S.I.</given-names>
</name>
</person-group>
<article-title>A Survey of Middleware for Sensor Network and Challenges</article-title>
<conf-name>Proceedings of the International Conference on Parallel Processing Workshops</conf-name>
<conf-loc>Columbus, OH, USA</conf-loc>
<conf-date>14–18 August 2006</conf-date>
<fpage>223</fpage>
<lpage>228</lpage>
</element-citation>
</ref>
<ref id="b3-sensors-12-08930"><label>3.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Alcarria</surname>
<given-names>R.</given-names>
</name>
<name><surname>Robles</surname>
<given-names>T.</given-names>
</name>
<name><surname>Morales</surname>
<given-names>A.</given-names>
</name>
<name><surname>González-Miranda</surname>
<given-names>S.</given-names>
</name>
</person-group>
<article-title>New Service Development Method for Prosumer Environments</article-title>
<conf-name>Proceedings of the 6th International Conference on Digital Society</conf-name>
<conf-loc>Valencia, Spain</conf-loc>
<conf-date>30 January–4 February 2012</conf-date>
<fpage>86</fpage>
<lpage>91</lpage>
</element-citation>
</ref>
<ref id="b4-sensors-12-08930"><label>4.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Aguilera</surname>
<given-names>U.</given-names>
</name>
<name><surname>Almeida</surname>
<given-names>A.</given-names>
</name>
<name><surname>Orduna</surname>
<given-names>P.</given-names>
</name>
<name><surname>López-de-Ipina</surname>
<given-names>D.</given-names>
</name>
<name><surname>de las Heras</surname>
<given-names>R.</given-names>
</name>
</person-group>
<article-title>Continuous Service Execution in Mobile Prosumer Environments</article-title>
<conf-name>Proceedings of the 4th Symposium of Ubiquitous Computing and Ambient Intelligence</conf-name>
<conf-loc>Valencia, Spain</conf-loc>
<conf-date>7–10 September 2010</conf-date>
<fpage>229</fpage>
<lpage>238</lpage>
</element-citation>
</ref>
<ref id="b5-sensors-12-08930"><label>5.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Fähndrich</surname>
<given-names>M.</given-names>
</name>
<name><surname>Aiken</surname>
<given-names>M.</given-names>
</name>
<name><surname>Hawblitzel</surname>
<given-names>C.</given-names>
</name>
<name><surname>Hodson</surname>
<given-names>O.</given-names>
</name>
<name><surname>Hunt</surname>
<given-names>G.</given-names>
</name>
<name><surname>Larus</surname>
<given-names>J.R.</given-names>
</name>
<name><surname>Levi</surname>
<given-names>S.</given-names>
</name>
</person-group>
<article-title>Language Support for Fast and Reliable Message-Based Communication in Singularity OS</article-title>
<conf-name>Proceedings of the 1st ACM SIGOPS/EuroSys European Conference on Computer Systems</conf-name>
<conf-loc>Leuven, Belgium</conf-loc>
<conf-date>18–21 April 2006</conf-date>
<fpage>177</fpage>
<lpage>190</lpage>
</element-citation>
</ref>
<ref id="b6-sensors-12-08930"><label>6.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Guenkova-Luy</surname>
<given-names>T.</given-names>
</name>
<name><surname>Schmidt</surname>
<given-names>H.</given-names>
</name>
<name><surname>Schorr</surname>
<given-names>A.</given-names>
</name>
<name><surname>Hauck</surname>
<given-names>F.J.</given-names>
</name>
<name><surname>Kassler</surname>
<given-names>A.</given-names>
</name>
</person-group>
<article-title>A Session-Initiation-Protocol-Based Middleware for Multi-Application Management</article-title>
<conf-name>Proceedings of the IEEE International Conference on Communications</conf-name>
<conf-loc>Glasgow, Scotland</conf-loc>
<conf-date>24–28 June 2007</conf-date>
<fpage>1582</fpage>
<lpage>1587</lpage>
</element-citation>
</ref>
<ref id="b7-sensors-12-08930"><label>7.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Gelernter</surname>
<given-names>D.</given-names>
</name>
</person-group>
<article-title>Generative communication in Linda</article-title>
<source>ACM Trans. Program. Lang. Syst.</source>
<year>1985</year>
<volume>7</volume>
<fpage>80</fpage>
<lpage>112</lpage>
</element-citation>
</ref>
<ref id="b8-sensors-12-08930"><label>8.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Eugster</surname>
<given-names>P.T.</given-names>
</name>
<name><surname>Felber</surname>
<given-names>P.A.</given-names>
</name>
<name><surname>Guerraoui</surname>
<given-names>R.</given-names>
</name>
<name><surname>Kermarrec</surname>
<given-names>A.M.</given-names>
</name>
</person-group>
<article-title>The many faces of publish/subscribe</article-title>
<source>ACM Comput. Surv.</source>
<year>2003</year>
<volume>35</volume>
<fpage>114</fpage>
<lpage>131</lpage>
</element-citation>
</ref>
<ref id="b9-sensors-12-08930"><label>9.</label>
<element-citation publication-type="book"><person-group person-group-type="author"><name><surname>Gamma</surname>
<given-names>E.</given-names>
</name>
<name><surname>Helm</surname>
<given-names>R.</given-names>
</name>
<name><surname>Johnson</surname>
<given-names>R.</given-names>
</name>
<name><surname>Vlissides</surname>
<given-names>J.</given-names>
</name>
</person-group>
<source>Design Patterns: Elements of Reusable Object-Oriented Software</source>
<publisher-name>Addison-Wesley Professional</publisher-name>
<publisher-loc>Boston, MA, USA</publisher-loc>
<year>1994</year>
</element-citation>
</ref>
<ref id="b10-sensors-12-08930"><label>10.</label>
<element-citation publication-type="book"><person-group person-group-type="author"><name><surname>Buschmann</surname>
<given-names>F.</given-names>
</name>
<name><surname>Henney</surname>
<given-names>K.</given-names>
</name>
<name><surname>Schmidt</surname>
<given-names>D.D.</given-names>
</name>
</person-group>
<source>Pattern-Oriented Software Architecture: On Patterns and Pattern Languages</source>
<publisher-name>John Wiley & Sons</publisher-name>
<publisher-loc>Hoboken, NJ, USA</publisher-loc>
<year>2007</year>
</element-citation>
</ref>
<ref id="b11-sensors-12-08930"><label>11.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Nguyen</surname>
<given-names>D.Z.</given-names>
</name>
<name><surname>Wong</surname>
<given-names>S.B.</given-names>
</name>
</person-group>
<article-title>Design Patterns for Sorting</article-title>
<conf-name>Proceedings of the 32nd SIGCSE Technical Symposium on Computer Science Education</conf-name>
<conf-loc>Charlotte, NC, USA</conf-loc>
<year>2001</year>
<fpage>263</fpage>
<lpage>267</lpage>
</element-citation>
</ref>
<ref id="b12-sensors-12-08930"><label>12.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Cheng</surname>
<given-names>L.</given-names>
</name>
<name><surname>Wang</surname>
<given-names>Z.</given-names>
</name>
<name><surname>Huang</surname>
<given-names>X.</given-names>
</name>
</person-group>
<article-title>A Stream-Based Communication Framework for Network Control System</article-title>
<conf-name>Proceedings of the 3rd International Conference on Biomedical Engineering and Informatics</conf-name>
<conf-loc>Yantai, China</conf-loc>
<conf-date>16–18 October 2010</conf-date>
<comment>Volume 7</comment>
<fpage>2828</fpage>
<lpage>2833</lpage>
</element-citation>
</ref>
<ref id="b13-sensors-12-08930"><label>13.</label>
<element-citation publication-type="webpage"><article-title>RGB Medical Devices</article-title>
<comment>Available online: <ext-link ext-link-type="uri" xlink:href="http://www.rgb-medical.com/">http://www.rgb-medical.com/</ext-link>
(accessed on 16 June 2012)</comment>
</element-citation>
</ref>
<ref id="b14-sensors-12-08930"><label>14.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Bose</surname>
<given-names>R.</given-names>
</name>
<name><surname>Helal</surname>
<given-names>A.</given-names>
</name>
</person-group>
<article-title>Sensor-Aware Adaptive Push-Pull Query Processing in Wireless Sensor Networks</article-title>
<conf-name>Proceeding of the 6th International Conference on Intelligent Environments</conf-name>
<conf-loc>Kuala Lumpur, Malaysia</conf-loc>
<conf-date>20–21 July 2010</conf-date>
<fpage>243</fpage>
<lpage>248</lpage>
</element-citation>
</ref>
<ref id="b15-sensors-12-08930"><label>15.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Liu</surname>
<given-names>X.</given-names>
</name>
<name><surname>Huang</surname>
<given-names>Q.</given-names>
</name>
<name><surname>Zhang</surname>
<given-names>Y.</given-names>
</name>
</person-group>
<article-title>Balancing Push and Pull for Efficient Information Discovery in Large-Scale Sensor Networks</article-title>
<source>IEEE Trans. Mob. Comput.</source>
<year>2007</year>
<volume>6</volume>
<fpage>241</fpage>
<lpage>251</lpage>
</element-citation>
</ref>
<ref id="b16-sensors-12-08930"><label>16.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Cano</surname>
<given-names>J.C.</given-names>
</name>
<name><surname>Cano</surname>
<given-names>J.M.</given-names>
</name>
<name><surname>González</surname>
<given-names>E.</given-names>
</name>
<name><surname>Calafate</surname>
<given-names>C.</given-names>
</name>
<name><surname>Manzoni</surname>
<given-names>P.</given-names>
</name>
</person-group>
<article-title>Evaluation of the Energetic Impact of Bluetooth Low-Power Modes for Ubiquitous Computing Applications</article-title>
<conf-name>Proceedings of the 3rd ACM International Workshop on Performance Evaluation of Wireless Ad Hoc, Sensor and Ubiquitous Networks</conf-name>
<conf-loc>Torremolinos, Spain</conf-loc>
<conf-date>2–6 October 2006</conf-date>
<fpage>1</fpage>
<lpage>8</lpage>
</element-citation>
</ref>
<ref id="b17-sensors-12-08930"><label>17.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Gartmann</surname>
<given-names>R.</given-names>
</name>
<name><surname>Holtkamp</surname>
<given-names>B.</given-names>
</name>
<name><surname>Weissenberg</surname>
<given-names>N.</given-names>
</name>
<name><surname>Li</surname>
<given-names>G.</given-names>
</name>
</person-group>
<article-title>Service Roaming in Mobile Applications</article-title>
<conf-name>Proceedings of the IEEE International Conference on Services Computing</conf-name>
<conf-loc>Orlando, FL, USA</conf-loc>
<conf-date>11–15 July 2005</conf-date>
<comment>Volume 1</comment>
<fpage>121</fpage>
<lpage>128</lpage>
</element-citation>
</ref>
<ref id="b18-sensors-12-08930"><label>18.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Chin</surname>
<given-names>A.</given-names>
</name>
<name><surname>Kontogiannis</surname>
<given-names>K.</given-names>
</name>
</person-group>
<article-title>m-Roam: A Service Invocation and Roaming Framework for Pervasive Computing</article-title>
<conf-name>Proceedings of the 18th International Conference on Advanced Information Networking and Applications</conf-name>
<conf-loc>Fukuoka, Japan</conf-loc>
<conf-date>29–31 March 2004</conf-date>
<comment>Volume 2</comment>
<fpage>385</fpage>
</element-citation>
</ref>
<ref id="b19-sensors-12-08930"><label>19.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Weißenberg</surname>
<given-names>N.</given-names>
</name>
<name><surname>Gartmann</surname>
<given-names>R.</given-names>
</name>
<name><surname>Voisard</surname>
<given-names>A.</given-names>
</name>
</person-group>
<article-title>An ontology-based approach to personalized situation-aware mobile service supply</article-title>
<source>GeoInformatica</source>
<year>2006</year>
<volume>10</volume>
<fpage>55</fpage>
<lpage>90</lpage>
</element-citation>
</ref>
<ref id="b20-sensors-12-08930"><label>20.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Ibrahim</surname>
<given-names>N.</given-names>
</name>
</person-group>
<article-title>Orthogonal Classification of Middleware Technologies</article-title>
<conf-name>Proceedings of the 3rd International Conference on Mobile Ubiquitous Computing, Systems, Services and Technologies</conf-name>
<conf-loc>Sliema, Malta</conf-loc>
<conf-date>11–16 October 2009</conf-date>
<fpage>46</fpage>
<lpage>51</lpage>
</element-citation>
</ref>
<ref id="b21-sensors-12-08930"><label>21.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Morais</surname>
<given-names>Y.</given-names>
</name>
<name><surname>Elias</surname>
<given-names>G.</given-names>
</name>
</person-group>
<article-title>Integrating Communication Paradigms in a Mobile Middleware Product Line</article-title>
<conf-name>Proceedings of the 9th International Conference on Networks</conf-name>
<conf-loc>Menuires, France</conf-loc>
<conf-date>11–16 April 2010</conf-date>
<fpage>255</fpage>
<lpage>261</lpage>
</element-citation>
</ref>
<ref id="b22-sensors-12-08930"><label>22.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Roman</surname>
<given-names>M.</given-names>
</name>
<name><surname>Kon</surname>
<given-names>F.</given-names>
</name>
<name><surname>Campbell</surname>
<given-names>R.H.</given-names>
</name>
</person-group>
<article-title>Reflective middleware: From your desk to your hand</article-title>
<source>IEEE Distrib. Syst. Online</source>
<year>2001</year>
<volume>2</volume>
<pub-id pub-id-type="doi">10.1109/MDSO.2001.5</pub-id>
</element-citation>
</ref>
<ref id="b23-sensors-12-08930"><label>23.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Kon</surname>
<given-names>F.</given-names>
</name>
<name><surname>Román</surname>
<given-names>M.</given-names>
</name>
<name><surname>Liu</surname>
<given-names>P.</given-names>
</name>
<name><surname>Mao</surname>
<given-names>J.</given-names>
</name>
<name><surname>Yamane</surname>
<given-names>T.</given-names>
</name>
<name><surname>Magalha</surname>
<given-names>C.</given-names>
</name>
<name><surname>Campbell</surname>
<given-names>R.H.</given-names>
</name>
</person-group>
<article-title>Monitoring, Security, and Dynamic Configuration with the dynamicTAO Reflective ORB</article-title>
<conf-name>Proceedings of the IFIP/ACM International Conference on Distributed Systems Platforms</conf-name>
<conf-loc>New York, NY, USA</conf-loc>
<conf-date>3–7 April 2000</conf-date>
<fpage>121</fpage>
<lpage>143</lpage>
</element-citation>
</ref>
<ref id="b24-sensors-12-08930"><label>24.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Lan</surname>
<given-names>L.</given-names>
</name>
<name><surname>Huang</surname>
<given-names>G.</given-names>
</name>
<name><surname>Wang</surname>
<given-names>W.</given-names>
</name>
<name><surname>Mei</surname>
<given-names>H.</given-names>
</name>
</person-group>
<article-title>A Middleware-Based Approach to Model Refactoring at Runtime</article-title>
<conf-name>Proceedings of the 14th Asia-Pacific Conference on Software Engineering</conf-name>
<conf-loc>Nagoya, Japan</conf-loc>
<conf-date>5–7 December 2007</conf-date>
<fpage>246</fpage>
<lpage>253</lpage>
</element-citation>
</ref>
<ref id="b25-sensors-12-08930"><label>25.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Binkley</surname>
<given-names>D.</given-names>
</name>
<name><surname>Ceccato</surname>
<given-names>M.</given-names>
</name>
<name><surname>Harman</surname>
<given-names>M.</given-names>
</name>
<name><surname>Ricca</surname>
<given-names>F.</given-names>
</name>
<name><surname>Tonella</surname>
<given-names>T.</given-names>
</name>
</person-group>
<article-title>Tool-supported refactoring of existing object-oriented code into aspects</article-title>
<source>IEEE Trans. Softw. Eng.</source>
<year>2006</year>
<volume>32</volume>
<fpage>698</fpage>
<lpage>717</lpage>
</element-citation>
</ref>
<ref id="b26-sensors-12-08930"><label>26.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Lung</surname>
<given-names>C.</given-names>
</name>
<name><surname>Rajeswaran</surname>
<given-names>P.</given-names>
</name>
<name><surname>Sivadas</surname>
<given-names>S.</given-names>
</name>
<name><surname>Sivabalasingam</surname>
<given-names>T.</given-names>
</name>
</person-group>
<article-title>Experience of building an architecture-based generator using GenVoca for distributed systems</article-title>
<source>Sci. Comput. Program.</source>
<year>2010</year>
<volume>75</volume>
<fpage>672</fpage>
<lpage>688</lpage>
</element-citation>
</ref>
<ref id="b27-sensors-12-08930"><label>27.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Ali</surname>
<given-names>N.</given-names>
</name>
<name><surname>Babar</surname>
<given-names>M.A.</given-names>
</name>
</person-group>
<article-title>Modeling Service Oriented Architectures of Mobile Applications by Extending SoaML with Ambients</article-title>
<conf-name>Proceedings of the 35th Euromicro Conference on Software Engineering and Advanced Applications</conf-name>
<conf-loc>Patras, Greece</conf-loc>
<conf-date>27–29 August 2009</conf-date>
<fpage>442</fpage>
<lpage>449</lpage>
</element-citation>
</ref>
<ref id="b28-sensors-12-08930"><label>28.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Ali</surname>
<given-names>N.</given-names>
</name>
<name><surname>Ramos</surname>
<given-names>I.</given-names>
</name>
<name><surname>Solís</surname>
<given-names>C.</given-names>
</name>
</person-group>
<article-title>Ambient-PRISMA: Ambients in mobile aspect-oriented software architecture</article-title>
<source>J. Syst. Softw.</source>
<year>2010</year>
<volume>83</volume>
<fpage>937</fpage>
<lpage>958</lpage>
</element-citation>
</ref>
<ref id="b29-sensors-12-08930"><label>29.</label>
<element-citation publication-type="book"><person-group person-group-type="author"><name><surname>Apel</surname>
<given-names>S.</given-names>
</name>
<name><surname>Böhm</surname>
<given-names>K.</given-names>
</name>
</person-group>
<article-title>Towards the Development of Ubiquitous Middleware Product Lines</article-title>
<source>Lecture Notes in Computer Science 3437</source>
<publisher-name>Springer</publisher-name>
<publisher-loc>Berlin, Germany</publisher-loc>
<year>2005</year>
<fpage>137</fpage>
<lpage>153</lpage>
</element-citation>
</ref>
<ref id="b30-sensors-12-08930"><label>30.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Smaragdakis</surname>
<given-names>Y.</given-names>
</name>
<name><surname>Batory</surname>
<given-names>D.</given-names>
</name>
</person-group>
<article-title>Mixin layers: An object-oriented implementation technique for refinements and collabroation-based designs</article-title>
<source>ACM Trans. Softw. Eng. Methodol.</source>
<year>2002</year>
<volume>11</volume>
<pub-id pub-id-type="doi">10.1145/505145.505148</pub-id>
</element-citation>
</ref>
<ref id="b31-sensors-12-08930"><label>31.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Rouvoy</surname>
<given-names>R.</given-names>
</name>
<name><surname>Barone</surname>
<given-names>P.</given-names>
</name>
<name><surname>Ding</surname>
<given-names>Y.</given-names>
</name>
<name><surname>Eliassen</surname>
<given-names>F.</given-names>
</name>
<name><surname>Hallsteinsen</surname>
<given-names>S.</given-names>
</name>
<name><surname>Lorenzo</surname>
<given-names>J.</given-names>
</name>
<name><surname>Mamelli</surname>
<given-names>A.</given-names>
</name>
<name><surname>Scholz</surname>
<given-names>U.</given-names>
</name>
</person-group>
<article-title>MUSIC: Middleware support for self-adaptation in ubiquitous and service-oriented environments</article-title>
<source>Softw. Eng. Self Adapt. Syst.</source>
<year>2009</year>
<volume>5525</volume>
<fpage>164</fpage>
<lpage>182</lpage>
</element-citation>
</ref>
<ref id="b32-sensors-12-08930"><label>32.</label>
<element-citation publication-type="book"><person-group person-group-type="author"><name><surname>Sivaharan</surname>
<given-names>T.</given-names>
</name>
<name><surname>Blair</surname>
<given-names>G.</given-names>
</name>
<name><surname>Coulson</surname>
<given-names>G.</given-names>
</name>
</person-group>
<article-title>GREEN: A Configurable and Re-Configurable Publish-Subscribe Middleware for Pervasive Computing</article-title>
<source>Lecture Notes in Computer Science 3760</source>
<publisher-name>Springer</publisher-name>
<publisher-loc>Berlin, Germany</publisher-loc>
<year>2005</year>
<fpage>732</fpage>
<lpage>749</lpage>
</element-citation>
</ref>
<ref id="b33-sensors-12-08930"><label>33.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Chakraborty</surname>
<given-names>D.</given-names>
</name>
<name><surname>Joshi</surname>
<given-names>A.</given-names>
</name>
<name><surname>Finin</surname>
<given-names>T.</given-names>
</name>
<name><surname>Yesha</surname>
<given-names>Y.</given-names>
</name>
</person-group>
<article-title>Service composition for mobile environment</article-title>
<source>Mob. Netw. Appl.</source>
<year>2005</year>
<volume>4</volume>
<fpage>435</fpage>
<lpage>451</lpage>
</element-citation>
</ref>
<ref id="b34-sensors-12-08930"><label>34.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Ji</surname>
<given-names>Z.</given-names>
</name>
<name><surname>Ganchev</surname>
<given-names>I.</given-names>
</name>
<name><surname>O'Droma</surname>
<given-names>M.</given-names>
</name>
</person-group>
<article-title>An iWBC consumer application for “always best connected and best served”: Design and implementation</article-title>
<source>IEEE Trans. Consumer Electron.</source>
<year>2011</year>
<volume>57</volume>
<fpage>462</fpage>
<lpage>470</lpage>
</element-citation>
</ref>
<ref id="b35-sensors-12-08930"><label>35.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Erradi</surname>
<given-names>A.</given-names>
</name>
<name><surname>Maheshwari</surname>
<given-names>P.</given-names>
</name>
</person-group>
<article-title>wsBus: QoS-Aware Middleware for Reliable Web Services Interactions</article-title>
<conf-name>Proceedings of the IEEE International Conference on e-Technology, e-Commerce and e-Service</conf-name>
<conf-loc>Hong Kong, China</conf-loc>
<conf-date>29 March–1 April 2005</conf-date>
<fpage>634</fpage>
<lpage>639</lpage>
</element-citation>
</ref>
<ref id="b36-sensors-12-08930"><label>36.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Bellavista</surname>
<given-names>P.</given-names>
</name>
<name><surname>Corradi</surname>
<given-names>A.</given-names>
</name>
<name><surname>Foschini</surname>
<given-names>L.</given-names>
</name>
</person-group>
<article-title>MUM: A Middleware for the Provisioning of Continuous Services to Mobile Users</article-title>
<conf-name>Proceedings of the 9th International Symposium on Computers and Communications</conf-name>
<conf-loc>Alexandria, Egypt</conf-loc>
<conf-date>28 June–1 July 2004</conf-date>
<comment>Volume 1</comment>
<fpage>498</fpage>
<lpage>505</lpage>
</element-citation>
</ref>
<ref id="b37-sensors-12-08930"><label>37.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Alcarria</surname>
<given-names>R.</given-names>
</name>
<name><surname>Robles</surname>
<given-names>T.</given-names>
</name>
<name><surname>Morales</surname>
<given-names>A.</given-names>
</name>
<name><surname>Gonzalez-Miranda</surname>
<given-names>S.</given-names>
</name>
</person-group>
<article-title>Flexible service composition based on bundle communication in OSGi</article-title>
<source>KSII Trans. Internet Inf. Syst.</source>
<year>2012</year>
<volume>6</volume>
<fpage>116</fpage>
<lpage>130</lpage>
</element-citation>
</ref>
</ref-list>
</back>
<floats-group><fig id="f1-sensors-12-08930" position="float"><label>Figure 1.</label>
<caption><p>Service logical parts.</p>
</caption>
<graphic xlink:href="sensors-12-08930f1"></graphic>
</fig>
<fig id="f2-sensors-12-08930" position="float"><label>Figure 2.</label>
<caption><p>Overall architecture.</p>
</caption>
<graphic xlink:href="sensors-12-08930f2"></graphic>
</fig>
<fig id="f3-sensors-12-08930" position="float"><label>Figure 3.</label>
<caption><p>Capability Invocation API.</p>
</caption>
<graphic xlink:href="sensors-12-08930f3"></graphic>
</fig>
<fig id="f4-sensors-12-08930" position="float"><label>Figure 4.</label>
<caption><p>Interaction diagram of synchronous invocation.</p>
</caption>
<graphic xlink:href="sensors-12-08930f4"></graphic>
</fig>
<fig id="f5-sensors-12-08930" position="float"><label>Figure 5.</label>
<caption><p>Interaction diagram of asynchronous invocation.</p>
</caption>
<graphic xlink:href="sensors-12-08930f5"></graphic>
</fig>
<fig id="f6-sensors-12-08930" position="float"><label>Figure 6.</label>
<caption><p>Internal driver communication.</p>
</caption>
<graphic xlink:href="sensors-12-08930f6"></graphic>
</fig>
<fig id="f7-sensors-12-08930" position="float"><label>Figure 7.</label>
<caption><p>Communication paradigm selection process.</p>
</caption>
<graphic xlink:href="sensors-12-08930f7"></graphic>
</fig>
<fig id="f8-sensors-12-08930" position="float"><label>Figure 8.</label>
<caption><p>Interaction diagram of a Request-Reply to Publish-Subscribe paradigm change.</p>
</caption>
<graphic xlink:href="sensors-12-08930f8"></graphic>
</fig>
<fig id="f9-sensors-12-08930" position="float"><label>Figure 9.</label>
<caption><p>Resource request in drivers.</p>
</caption>
<graphic xlink:href="sensors-12-08930f9"></graphic>
</fig>
<fig id="f10-sensors-12-08930" position="float"><label>Figure 10.</label>
<caption><p>Transmission comparison in Service Execution Scenario.</p>
</caption>
<graphic xlink:href="sensors-12-08930f10"></graphic>
</fig>
<fig id="f11-sensors-12-08930" position="float"><label>Figure 11.</label>
<caption><p>Average resource utilization for Bluetooth in Case #1 (left) and Case #2 (right).</p>
</caption>
<graphic xlink:href="sensors-12-08930f11"></graphic>
</fig>
<table-wrap id="t1-sensors-12-08930" position="float"><label>Table 1.</label>
<caption><p>Communication paradigms and features.</p>
</caption>
<table frame="hsides" rules="groups"><thead><tr><th align="left" valign="middle" rowspan="1" colspan="1"><bold>Paradigm</bold>
</th>
<th align="left" valign="top" rowspan="1" colspan="1"><bold>Coordination mechanism</bold>
</th>
<th align="left" valign="top" rowspan="1" colspan="1"><bold>Notification model</bold>
</th>
<th align="center" valign="top" rowspan="1" colspan="1"><bold>Connection Orientation</bold>
</th>
<th align="left" valign="top" rowspan="1" colspan="1"><bold>Connection initiated by</bold>
</th>
<th align="left" valign="top" rowspan="1" colspan="1"><bold>Design requirements</bold>
</th>
</tr>
</thead>
<tbody><tr><td align="left" valign="top" rowspan="1" colspan="1">Request/Reply</td>
<td align="left" valign="top" rowspan="1" colspan="1">Synchronous</td>
<td align="left" valign="top" rowspan="1" colspan="1">Synchronous</td>
<td align="center" valign="top" rowspan="1" colspan="1">✓</td>
<td align="left" valign="top" rowspan="1" colspan="1">Consumer (Middleware)</td>
<td align="left" valign="top" rowspan="1" colspan="1">Client-server model</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">QP2P</td>
<td align="left" valign="top" rowspan="1" colspan="1">Asynchronous</td>
<td align="left" valign="top" rowspan="1" colspan="1">Synchronous</td>
<td align="center" valign="top" rowspan="1" colspan="1">✗</td>
<td align="left" valign="top" rowspan="1" colspan="1">Producer/Consumer</td>
<td align="left" valign="top" rowspan="1" colspan="1">Messages are retrieved in a predefined order</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">Tuple Spaces</td>
<td align="left" valign="top" rowspan="1" colspan="1">Asynchronous</td>
<td align="left" valign="top" rowspan="1" colspan="1">Synchronous</td>
<td align="center" valign="top" rowspan="1" colspan="1">✗</td>
<td align="center" valign="top" rowspan="1" colspan="1">✗</td>
<td align="left" valign="top" rowspan="1" colspan="1">Intermediated by a tuple space service</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">Publish-Subscribe</td>
<td align="left" valign="top" rowspan="1" colspan="1">Asynchronous</td>
<td align="left" valign="top" rowspan="1" colspan="1">Asynchronous</td>
<td align="center" valign="top" rowspan="1" colspan="1">✓</td>
<td align="left" valign="top" rowspan="1" colspan="1">Event Channel Service</td>
<td align="left" valign="top" rowspan="1" colspan="1">Event channel service must be external</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="t2-sensors-12-08930" position="float"><label>Table 2.</label>
<caption><p>Requirements, patterns and design implications.</p>
</caption>
<table frame="hsides" rules="groups"><thead><tr><th align="left" valign="top" rowspan="1" colspan="1"><bold>Requisite</bold>
</th>
<th align="left" valign="top" rowspan="1" colspan="1"><bold>Associated pattern</bold>
</th>
<th align="left" valign="top" rowspan="1" colspan="1"><bold>Application</bold>
</th>
<th align="left" valign="top" rowspan="1" colspan="1"><bold>Design implications</bold>
</th>
</tr>
</thead>
<tbody><tr><td align="left" valign="top" rowspan="1" colspan="1">Capability selection strategies</td>
<td align="left" valign="top" rowspan="1" colspan="1">Strategy</td>
<td align="left" valign="top" rowspan="1" colspan="1">Harmonizer</td>
<td align="left" valign="top" rowspan="1" colspan="1">Inclusion of selection strategies in the form of plugins. Plugin management.</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">Low coupling in arch. modules</td>
<td align="left" valign="top" rowspan="1" colspan="1">Command</td>
<td align="left" valign="top" rowspan="1" colspan="1">Sync/Async operations</td>
<td align="left" valign="top" rowspan="1" colspan="1">Definition of Async/Sync operation and processors.</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">Asynchronous communication</td>
<td align="left" valign="top" rowspan="1" colspan="1">Proactor</td>
<td align="left" valign="top" rowspan="1" colspan="1">Invocation and discovery API</td>
<td align="left" valign="top" rowspan="1" colspan="1">Inversion control mechanism: Callback and hook method definition in harmonizer.</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">Capability Access reusability</td>
<td align="left" valign="top" rowspan="1" colspan="1">Acceptor/Connector</td>
<td align="left" valign="top" rowspan="1" colspan="1">Communication paradigms</td>
<td align="left" valign="top" rowspan="1" colspan="1">Pool of service handlers for each connection driver. Bidirectional communication in drivers.</td>
</tr>
<tr><td align="left" valign="top" rowspan="1" colspan="1">Efficient resource management</td>
<td align="left" valign="top" rowspan="1" colspan="1">Monitor Object</td>
<td align="left" valign="top" rowspan="1" colspan="1">Shared resource controller</td>
<td align="left" valign="top" rowspan="1" colspan="1">Concurrency management in limited resources</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="t3-sensors-12-08930" position="float"><label>Table 3.</label>
<caption><p>Service Execution Scenario.</p>
</caption>
<table frame="hsides" rules="groups"><thead><tr><th align="center" valign="top" rowspan="1" colspan="1"><bold>Services</bold>
</th>
<th align="center" valign="top" rowspan="1" colspan="1"><bold>Start Time (s)</bold>
</th>
<th align="center" valign="top" rowspan="1" colspan="1"><bold>Duration (s)</bold>
</th>
<th align="center" valign="top" rowspan="1" colspan="1"><bold>Invocation Frequency (Inv/s)</bold>
</th>
</tr>
</thead>
<tbody><tr><td align="center" valign="top" rowspan="1" colspan="1">Serv. #1</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0</td>
<td align="center" valign="top" rowspan="1" colspan="1">100</td>
<td align="center" valign="top" rowspan="1" colspan="1">1</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">Serv. #2</td>
<td align="center" valign="top" rowspan="1" colspan="1">3.39</td>
<td align="center" valign="top" rowspan="1" colspan="1">27.6</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.087</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">Serv. #3</td>
<td align="center" valign="top" rowspan="1" colspan="1">50.32</td>
<td align="center" valign="top" rowspan="1" colspan="1">33</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.909</td>
</tr>
<tr><td colspan="2" align="center" valign="top" rowspan="1"><bold>Communication Manager parameters</bold>
</td>
<td align="center" valign="top" rowspan="1" colspan="1">δ = 10 ms</td>
<td align="center" valign="top" rowspan="1" colspan="1"><italic>n</italic>
= 3 invocations</td>
</tr>
</tbody>
</table>
</table-wrap>
</floats-group>
</pmc>
</record>
Pour manipuler ce document sous Unix (Dilib)
EXPLOR_STEP=$WICRI_ROOT/Ticri/CIDE/explor/TelematiV1/Data/Pmc/Corpus
HfdSelect -h $EXPLOR_STEP/biblio.hfd -nk 000563 | SxmlIndent | more
Ou
HfdSelect -h $EXPLOR_AREA/Data/Pmc/Corpus/biblio.hfd -nk 000563 | SxmlIndent | more
Pour mettre un lien sur cette page dans le réseau Wicri
{{Explor lien |wiki= Ticri/CIDE |area= TelematiV1 |flux= Pmc |étape= Corpus |type= RBID |clé= PMC:3444084 |texte= Enabling Flexible and Continuous Capability Invocation in Mobile Prosumer Environments }}
Pour générer des pages wiki
HfdIndexSelect -h $EXPLOR_AREA/Data/Pmc/Corpus/RBID.i -Sk "pubmed:23012526" \ | HfdSelect -Kh $EXPLOR_AREA/Data/Pmc/Corpus/biblio.hfd \ | NlmPubMed2Wicri -a TelematiV1
![]() | This area was generated with Dilib version V0.6.31. | ![]() |