<?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"> <title>Main</title> <link rel="self" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801" /> <subtitle /> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801</id> <updated>2026-04-05T11:20:36Z</updated> <dc:date>2026-04-05T11:20:36Z</dc:date> <entry> <title>SLA Engine Component 2.0 (minor-edit)</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/SLA+Engine+Component" /> <author> <name>Román Sosa González</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/SLA+Engine+Component</id> <updated>2017-09-06T15:51:34Z</updated> <published>2017-09-06T15:51:34Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Summary"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Summary&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Component_responsible"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Component responsible&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Architecture_design"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;Architecture design&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Installation_manual"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Installation manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#Development"&gt;&lt;span class="tocnumber"&gt;4.1&lt;/span&gt; &lt;span class="toctext"&gt;Development&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Production"&gt;&lt;span class="tocnumber"&gt;4.2&lt;/span&gt; &lt;span class="toctext"&gt;Production&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#User_manual"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;User manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#API_Specification"&gt;&lt;span class="tocnumber"&gt;5.1&lt;/span&gt; &lt;span class="toctext"&gt;API Specification&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#CloudSocket_extensions_to_WS-Agreement"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;CloudSocket extensions to WS-Agreement&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#Context"&gt;&lt;span class="tocnumber"&gt;6.1&lt;/span&gt; &lt;span class="toctext"&gt;Context&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#CustomServiceLevel"&gt;&lt;span class="tocnumber"&gt;6.2&lt;/span&gt; &lt;span class="toctext"&gt;CustomServiceLevel&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Business_values"&gt;&lt;span class="tocnumber"&gt;6.3&lt;/span&gt; &lt;span class="toctext"&gt;Business values&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Example"&gt;&lt;span class="tocnumber"&gt;6.4&lt;/span&gt; &lt;span class="toctext"&gt;Example&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Further_analysis"&gt;&lt;span class="tocnumber"&gt;6.5&lt;/span&gt; &lt;span class="toctext"&gt;Further analysis&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#Cost_model"&gt;&lt;span class="tocnumber"&gt;6.5.1&lt;/span&gt; &lt;span class="toctext"&gt;Cost model&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Summary"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Summary&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The SLA Engine represents the component responsible for generating, storing and observing the formal documents describing electronic agreements between the parties involved in CloudSocket: BPaaS bundle customers, brokers and cloud providers. The component follows the WS-Agreement specification. This means that the documents representing templates and agreements are valid according to the schema defined in the specification. The specification is extended where needed to cover some specific CloudSocket needs.&lt;/p&gt; &lt;p&gt;&lt;br /&gt; This component will expose:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;A graphical user interface for checking the status of agreements,&lt;/li&gt; &lt;li&gt;A REST API interface allowing programmatic access to the different types of functionalities offered.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The main functionalities are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Generation of WS-Agreement templates and agreements.&lt;/li&gt; &lt;li&gt;Management of SLA related entities: templates, agreements, providers, violations, penalties&lt;/li&gt; &lt;li&gt;Assessment of SLOs and corresponding penalties when an SLO is violated.&lt;/li&gt; &lt;li&gt;Notification of detected violations and incurred penalties to interested parties.&lt;/li&gt; &lt;li&gt;...&lt;/li&gt; &lt;/ul&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Type of ownership&lt;/b&gt;&lt;/td&gt; &lt;td&gt;Extension &amp;amp; Adaptation&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Original tool&lt;/b&gt;&lt;/td&gt; &lt;td&gt;SLA Framework asset&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Planned OS license&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="http://www.apache.org/licenses/LICENSE-2.0.html"&gt;Apache License Version 2.0&lt;/a&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Reference community&lt;/b&gt;&lt;/td&gt; &lt;td&gt;None&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;&lt;br /&gt; &lt;b&gt;Consist of&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;SLA Engine (core functionalities)&lt;/li&gt; &lt;li&gt;SLA Dashboard (Graphical User Interface)&lt;/li&gt; &lt;li&gt;SLA Generator (generates WS-Agreement compliant documents)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Depends on (uses or used-by dependencies)&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Monitoring Engine&lt;/li&gt; &lt;li&gt;Allocation Environment&lt;/li&gt; &lt;li&gt;Marketplace&lt;/li&gt; &lt;li&gt;Cloud Provider Engine&lt;/li&gt; &lt;/ul&gt; &lt;a name="Component_responsible"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Component responsible&lt;/span&gt;&lt;/h3&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;th&gt;Developer&lt;/th&gt; &lt;th&gt;Email&lt;/th&gt; &lt;th&gt;Company&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Roman Sosa Gonzalez&lt;/td&gt; &lt;td&gt;roman.sosa@atos.net&lt;/td&gt; &lt;td&gt;Atos&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Joaquin Iranzo&lt;/td&gt; &lt;td&gt;Joaquin.iranzo@atos.net&lt;/td&gt; &lt;td&gt;Atos&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;a name="Architecture_design"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Architecture design&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;&lt;img alt="CloudSocket-SLA-Architecture.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=CloudSocket-SLA-Architecture.png" /&gt;&lt;/p&gt; &lt;p&gt;Figure: General architecture for SLA Engine&lt;/p&gt; &lt;p&gt;The SLA Engine in CloudSocket is composed of three main components:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;SLA Core. It relies on the Atos SLA Framework asset, with some CloudSocket-related modules. It contains all the basic functionality. The main subcomponents are: &lt;ul&gt; &lt;li&gt;Repository. Database of WSAG related entities.&lt;/li&gt; &lt;li&gt;Assessment. It is in charge of the evaluation process of the SLA agreements. It notifies raised violations and penalties to interested observers (i.e., an Accounting component).&lt;/li&gt; &lt;li&gt;REST Service. It is the REST interface of the SLA Core to the world.&lt;/li&gt; &lt;li&gt;WSAG Generator. It generates WSAG-compliant templates and agreements according to the requirements of allocation and marketplace, respectively.&lt;/li&gt; &lt;li&gt;Colosseum Adapter. It is charge of: i) subscribing into Colosseum to the appropriate metric events, and ii) to receive events and translate them into the internal SLA representation.&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;SLA Dashboard. This component is a frontend application where the user/admin can check the status of agreements and the penalties that have been applied.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The related components with the SLA Engine in CloudSocket are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Monitoring. It reports the metric data to the SLA Core.&lt;/li&gt; &lt;li&gt;Allocation. The Allocation Environment contacts the SLA Generator to obtain a template that describes the service level of a BPaaS Bundle.&lt;/li&gt; &lt;li&gt;Marketplace. It shows a human-readable description of a BPaaS Bundle SLA to the customers.&lt;/li&gt; &lt;li&gt;Cloud Provider Engine. It pProvides the SLA to be stored and managed by the SLA Engine.&lt;/li&gt; &lt;/ul&gt; &lt;a name="Installation_manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Installation manual&lt;/span&gt;&lt;/h3&gt; &lt;a name="Development"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Development&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;&lt;b&gt;Requirements&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Oracle JDK &amp;gt;= 1.7&lt;/li&gt; &lt;li&gt;Database to install the database schema for the service: Mysql&amp;gt;=5.0&lt;/li&gt; &lt;li&gt;Maven &amp;gt;= 3.2&lt;/li&gt; &lt;li&gt;Python &amp;gt;=2.7&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Installation&lt;/b&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Download source code from gitlab &lt;pre&gt; git clone https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/sla-framework.git cd sla-framework &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Create database in mysql &lt;pre&gt; $ mysql -p -u root mysql&amp;gt; CREATE DATABASE atossla; mysql&amp;gt; CREATE USER atossla@localhost IDENTIFIED BY '_atossla_'; mysql&amp;gt; GRANT ALL PRIVILEGES ON atossla.* TO atossla@localhost; &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Compile SLA Engine &lt;pre&gt; ( cd sla-core &amp;amp;&amp;amp; mvn clean install ) &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Execute sla-core server. The following command will start an SLA Engine server in port 8080. &lt;pre&gt; sla-core/bin/runserver.sh [port] &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Execute sla-dashboard server. The following commando will start an SLA Dashboard server in port 8000 &lt;pre&gt; sla-dashboard/bin/runserver.sh &lt;/pre&gt;&lt;/li&gt; &lt;/ol&gt; &lt;a name="Production"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Production&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;&lt;b&gt;Requirements&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Oracle JRE &amp;gt;= 1.7&lt;/li&gt; &lt;li&gt;Database to install the database schema for the service: Mysql&amp;gt;=5.0&lt;/li&gt; &lt;li&gt;Python 2.7&lt;/li&gt; &lt;li&gt;Virtualenv&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Installation&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Create the database like done in &lt;i&gt;Development&lt;/i&gt; section.&lt;/p&gt; &lt;p&gt;The script `dist/bin/make-dist.sh` creates an archive file with the necessary scripts and artifacts to run the SLA Engine in a server.&lt;/p&gt; &lt;pre&gt; dist/bin/make-dist.sh scp dist/target/sla-framework.tar.gz server: # replace 'server' with the ip/name of server ssh server: tar xzf sla-framework.tar.gz cd sla-framework virtualenv ~/virtualenvs/sla-dashboard ( . ~/virtualenvs/sla-dashboard/bin/activate &amp;amp;&amp;amp; cd lib/sla-dashboard &amp;amp;&amp;amp; pip install -r requirements.txt &amp;amp;&amp;amp; ./manage.py migrate ) bin/start-sla-core-service.sh bin/start-sla-generator-service.sh bin/start-sla-dashboard-service.sh &lt;/pre&gt; &lt;p&gt;To stop the services:&lt;/p&gt; &lt;pre&gt; bin/stop-sla-core-service.sh bin/stop-sla-generator-service.sh bin/stop-sla-dashboard-service.sh &lt;/pre&gt; &lt;p&gt;&lt;b&gt;Environment variables&lt;/b&gt;&lt;/p&gt; &lt;p&gt;The SLA Engine execution can be configured with the use of environment variables. The list of recognized env vars and their default values is:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;code&gt;SLA_CORE_HOST (127.0.0.1), SLA_CORE_PORT (8080)&lt;/code&gt;: sla-core listening address; passed to sla-dasboard.&lt;/li&gt; &lt;li&gt;&lt;code&gt;SLA_DASHBOARD_HOST (127.0.0.1)&lt;/code&gt;. public hostname of SLA Dashboard; it must be reached by IDM component.&lt;/li&gt; &lt;li&gt;&lt;code&gt;SLA_DASHBOARD_PORT (8000)&lt;/code&gt;: sla-dashboard listening port.&lt;/li&gt; &lt;li&gt;&lt;code&gt;SLA_GENERATOR_HOST (127.0.0.1), SLA_GENERATOR_PORT&lt;/code&gt;: sla-generator listening address.&lt;/li&gt; &lt;li&gt;&lt;code&gt;DB_URL (jdbc:mysql://localhost:3306/atossla)&lt;/code&gt;: A jdbc connection string in the format &lt;code&gt;jdbc:mysql://${IP}:${PORT}/${DB}&lt;/code&gt;.&lt;/li&gt; &lt;li&gt;&lt;code&gt;CLOUDIATOR_URL (&lt;a class="externallink" rel="nofollow" href="http://127.0.0.1:9000/api"&gt;http://127.0.0.1:9000/api&lt;/a&gt;)&lt;/code&gt;: URL of Cloudiator REST API.&lt;/li&gt; &lt;li&gt;&lt;code&gt;SLA_URL (&lt;a class="externallink" rel="nofollow" href="http://127.0.0.1:8080/api"&gt;http://127.0.0.1:8080/api&lt;/a&gt;)&lt;/code&gt;: Public address of SLA Engine REST API; used in subscriptions to Monitoring Engine in order to receive metric notifications.&lt;/li&gt; &lt;li&gt;&lt;code&gt;IDM_CLIENT_ID (&amp;quot;&amp;quot;)&lt;/code&gt;: SLA Engine Client ID for OAuth2 authorization flow.&lt;/li&gt; &lt;li&gt;&lt;code&gt;IDM_CLIENT_SECRET (&amp;quot;&amp;quot;)&lt;/code&gt;: SLA Engine secret for OAuth2 authorization flow.&lt;/li&gt; &lt;li&gt;&lt;code&gt;IDM_AUTHORIZE_URL (&lt;a class="externallink" rel="nofollow" href="http://csmarket.ymens.com:9090/oauth/authorize"&gt;http://csmarket.ymens.com:9090/oauth/authorize&lt;/a&gt;)&lt;/code&gt;: Authorization URL in OAuth2 authorization flow.&lt;/li&gt; &lt;li&gt;&lt;code&gt;IDM_TOKEN_URL (&lt;a class="externallink" rel="nofollow" href="http://csmarket.ymens.com:9090/oauth/token"&gt;http://csmarket.ymens.com:9090/oauth/token&lt;/a&gt;)&lt;/code&gt;: Token URL in OAuth2 authorization flow.&lt;/li&gt; &lt;/ul&gt; &lt;a name="User_manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;User manual&lt;/span&gt;&lt;/h3&gt; &lt;a name="API_Specification"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;API Specification&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;The generic API is in &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/sla-framework/blob/master/sla-core/docs/user-guide.md"&gt;SLA Framework API&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;The lifecycle of the SLA in CloudSocket is shown in the diagram below. &lt;img alt="cs-sla-seq-diagram.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=cs-sla-seq-diagram.png" /&gt;&lt;/p&gt; &lt;p&gt;Figure: SLA Sequence Diagram&lt;/p&gt; &lt;p&gt;Specific CloudSocket API is explained below:&lt;/p&gt; &lt;p&gt;&lt;b&gt;Generate a template&lt;/b&gt;&lt;/p&gt; &lt;pre&gt; POST /api/templates &lt;/pre&gt; &lt;p&gt;This endpoint takes a simplified JSON definition of a WS-Agreement template and returns the WS-Agreement template, which can be fed into the SLA Core.&lt;/p&gt; &lt;p&gt;An input example: &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/sla-framework/blob/master/sla-core/cs-wsag-generator-service/src/test/resources/json_christmas.json"&gt;JSON Input for Christmas bundle&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The penalties element are described in the &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/sla-framework/blob/master/sla-core/docs/developer-guide.md"&gt;SLA Core developer guide&lt;/a&gt; (search for Business Rules).&lt;/p&gt; &lt;p&gt;Example:&lt;/p&gt; &lt;pre&gt; curl -X POST http://134.60.64.232:8001/api/templates -d@./cs-wsag-generator-service/src/test/resources/json_christmas.json -H&amp;quot;Content-type:application/json&amp;quot; &lt;/pre&gt; &lt;p&gt;The input file is:&lt;/p&gt; &lt;pre&gt; { &amp;quot;templateName&amp;quot; : &amp;quot;Sending Christmas Greetings (with SLA) SLA Template&amp;quot;, &amp;quot;bpaasBundle&amp;quot; : &amp;quot;Sending Christmas Greetings (with SLA)&amp;quot;, &amp;quot;broker&amp;quot; : &amp;quot;bwcon&amp;quot;, &amp;quot;assessment&amp;quot; : &amp;quot;bwcon&amp;quot;, &amp;quot;monitoring&amp;quot; : &amp;quot;bwcon&amp;quot;, &amp;quot;guaranteeTerms&amp;quot; : [ { &amp;quot;name&amp;quot; : &amp;quot;KPI Hourly CPU_GuaranteeTerm&amp;quot;, &amp;quot;sloDescription&amp;quot; : &amp;quot;Hourly Usage of CPU should be less than 80%&amp;quot;, &amp;quot;penaltiesDescription&amp;quot; : &amp;quot;3 penalties occurs in one day =&amp;gt; 1&amp;acirc;&amp;sbquo;&amp;not;&amp;Acirc;&amp;nbsp;discount on the current month&amp;quot;, &amp;quot;slo&amp;quot; : { &amp;quot;condition&amp;quot; : &amp;quot;KPIHourlyCPU&amp;quot;, &amp;quot;context&amp;quot; : &amp;quot;MeanCPU&amp;quot;, &amp;quot;comparison&amp;quot; : &amp;quot;LE&amp;quot;, &amp;quot;threshold&amp;quot; : 80.0 }, &amp;quot;penalties&amp;quot; : [ { &amp;quot;count&amp;quot; : 3, &amp;quot;interval&amp;quot; : &amp;quot;P1D&amp;quot;, &amp;quot;penalty&amp;quot; : { &amp;quot;type&amp;quot; : &amp;quot;discount&amp;quot;, &amp;quot;expression&amp;quot; : &amp;quot;1.00&amp;quot;, &amp;quot;unit&amp;quot; : &amp;quot;euros&amp;quot;, &amp;quot;validity&amp;quot; : &amp;quot;P1M&amp;quot; } } ] } ] } &lt;/pre&gt; &lt;p&gt;The output is:&lt;/p&gt; &lt;pre&gt; &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt; &amp;lt;wsag:Template xmlns:cs=&amp;quot;http://wsag.sla.cloudsocket.eu&amp;quot; xmlns:sla=&amp;quot;http://sla.atos.eu&amp;quot; xmlns:wsag=&amp;quot;http://www.ggf.org/namespaces/ws-agreement&amp;quot; wsag:TemplateId=&amp;quot;3b4d79ba-307f-40aa-a139-b925efe1149d&amp;quot;&amp;gt; &amp;lt;wsag:Name&amp;gt;Sending Christmas Greetings (with SLA) SLA Template&amp;lt;/wsag:Name&amp;gt; &amp;lt;wsag:Context&amp;gt; &amp;lt;wsag:AgreementResponder&amp;gt;bwcon&amp;lt;/wsag:AgreementResponder&amp;gt; &amp;lt;wsag:ServiceProvider&amp;gt;AgreementResponder&amp;lt;/wsag:ServiceProvider&amp;gt; &amp;lt;sla:Service&amp;gt;Sending Christmas Greetings (with SLA)&amp;lt;/sla:Service&amp;gt; &amp;lt;cs:context&amp;gt; &amp;lt;cs:assessment&amp;gt;bwcon&amp;lt;/cs:assessment&amp;gt; &amp;lt;cs:monitoring&amp;gt;bwcon&amp;lt;/cs:monitoring&amp;gt; &amp;lt;/cs:context&amp;gt; &amp;lt;/wsag:Context&amp;gt; &amp;lt;wsag:Terms&amp;gt; &amp;lt;wsag:All&amp;gt; &amp;lt;wsag:GuaranteeTerm wsag:Name=&amp;quot;KPI Hourly CPU_GuaranteeTerm&amp;quot;&amp;gt; &amp;lt;wsag:ServiceLevelObjective&amp;gt; &amp;lt;wsag:KPITarget&amp;gt; &amp;lt;wsag:KPIName&amp;gt;KPI Hourly CPU_GuaranteeTerm_kpi&amp;lt;/wsag:KPIName&amp;gt; &amp;lt;wsag:CustomServiceLevel&amp;gt; &amp;lt;cs:slo&amp;gt; &amp;lt;cs:constraint&amp;gt;MeanCPU LE 80.000000&amp;lt;/cs:constraint&amp;gt; &amp;lt;cs:conditionConstraint&amp;gt;KPIHourlyCPU NOT EXISTS&amp;lt;/cs:conditionConstraint&amp;gt; &amp;lt;cs:description&amp;gt;Hourly Usage of CPU should be less than 80%&amp;lt;/cs:description&amp;gt; &amp;lt;/cs:slo&amp;gt; &amp;lt;/wsag:CustomServiceLevel&amp;gt; &amp;lt;/wsag:KPITarget&amp;gt; &amp;lt;/wsag:ServiceLevelObjective&amp;gt; &amp;lt;wsag:BusinessValueList&amp;gt; &amp;lt;wsag:CustomBusinessValue count=&amp;quot;3&amp;quot; duration=&amp;quot;P1D&amp;quot;&amp;gt; &amp;lt;sla:Penalty type=&amp;quot;discount&amp;quot; expression=&amp;quot;1.00&amp;quot; unit=&amp;quot;euros&amp;quot; validity=&amp;quot;P1M&amp;quot;/&amp;gt; &amp;lt;sla:description&amp;gt;3 penalties occurs in one day =&amp;gt; 10&amp;euro;&amp;nbsp;discount on the current month&amp;lt;/sla:description&amp;gt; &amp;lt;/wsag:CustomBusinessValue&amp;gt; &amp;lt;/wsag:BusinessValueList&amp;gt; &amp;lt;/wsag:GuaranteeTerm&amp;gt; &amp;lt;/wsag:All&amp;gt; &amp;lt;/wsag:Terms&amp;gt; &amp;lt;/wsag:Template&amp;gt; &lt;/pre&gt; &lt;p&gt;The CloudSocket sequence diagram is depicted in figure.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Generate an agreement&lt;/b&gt;&lt;/p&gt; &lt;pre&gt; POST /cloudsocket/api/agreements &lt;/pre&gt; &lt;p&gt;This endpoint generates an agreement from a template and the needed information context. It is intended to be called when a bundle has been deployed. Both provider (if not yet), template (if not yet) and agreement are stored in SLA Core.&lt;/p&gt; &lt;p&gt;It receives the template in the body, and the context information (currently, only the customer ID) in headers.&lt;/p&gt; &lt;p&gt;Headers:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;customer ID: X-CloudSocket-Customer&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Example:&lt;/p&gt; &lt;pre&gt; curl -X POST -d@sla-service/src/test/resources/samples/template02.xml -H&amp;quot;X-CloudSocket-Customer: customer-a&amp;quot; http://134.60.64.232:8080/cloudsocket/api/agreements -H&amp;quot;Content-type:application/xml&amp;quot; &lt;/pre&gt; &lt;p&gt;Input body: &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/sla-framework/blob/master/sla-core/sla-service/src/test/resources/samples/template02.xml"&gt;Template&lt;/a&gt;&lt;/p&gt; &lt;p&gt;X-CloudSocket-Customer header: customer-a&lt;/p&gt; &lt;p&gt;The output is:&lt;/p&gt; &lt;pre&gt; 4679e474-2322-4da2-be75-a0004c7f8df8 &lt;/pre&gt; &lt;p&gt;&lt;b&gt;Start evaluation&lt;/b&gt;&lt;/p&gt; &lt;pre&gt; PUT /cloudsocket/api/enforcements/{agreementId} &lt;/pre&gt; &lt;p&gt;This endpoint makes the appropriate subscriptions to the Monitoring Engine and starts the evaluation of the agreement. It is intended to be called just after the CreateAgreement endpoint.&lt;/p&gt; &lt;p&gt;The body contains a CsEnforcementJob. A serialized example is found in &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/sla-framework/blob/master/sla-core/sla-service/src/test/resources/samples/cs-enforcementjob2.json"&gt;https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/sla-framework/blob/master/sla-core/sla-service/src/test/resources/samples/cs-enforcementjob2.json&lt;/a&gt;&lt;/p&gt; &lt;p&gt;It returns the enforcement entity in /api/enforcements/{agreementid} in the body.&lt;/p&gt; &lt;p&gt;Example:&lt;/p&gt; &lt;pre&gt; curl -X PUT -d@sla-service/src/test/resources/samples/cs-enforcementjob2.json http://localhost:8080/cloudsocket/api/enforcements/agreement-id -H&amp;quot;Content-type:application/json&amp;quot; -H&amp;quot;Accept:application/json&amp;quot; &lt;/pre&gt; &lt;p&gt;Input body:&lt;/p&gt; &lt;pre&gt; { &amp;quot;agreementId&amp;quot; : &amp;quot;agreement-id&amp;quot;, &amp;quot;enabled&amp;quot; : true, &amp;quot;composedMonitorIds&amp;quot; : [ 1, 2, 3 ] } &lt;/pre&gt; &lt;p&gt;Output:&lt;/p&gt; &lt;pre&gt; {&amp;quot;agreementId&amp;quot;:&amp;quot;agreement-id&amp;quot;,&amp;quot;enabled&amp;quot;:true} &lt;/pre&gt; &lt;a name="CloudSocket_extensions_to_WS-Agreement"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;CloudSocket extensions to WS-Agreement&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;There is a number of extensions that have been made to the WS-Agreement specification in order to obtain the CloudSocket objectives:&lt;/p&gt; &lt;a name="Context"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Context&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;It is desirable to explain in an SLA which are the entities that are to be involved under which context and role. In the case of the broker acting as a service provider, the broker may outsource some tasks to other entities (e.g., monitoring, execution, evaluation) so supporting parties can also be involved in the SLA.&lt;/p&gt; &lt;p&gt;Taking advantage of the xs:any child of wsag:Context element, a &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/sla-framework/blob/master/sla-core/cs-wsag-model/src/main/java/eu/cloudsocket/sla/wsag/CsContext.java"&gt;cs:context element&lt;/a&gt; has been defined to support the declaration of additional entities in the SLA: assessment and monitoring, at this moment.&lt;/p&gt; &lt;a name="CustomServiceLevel"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;CustomServiceLevel&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;An SLO should include all appropriate information that can assist in its proper monitoring, at least:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;definition of the metric&lt;/li&gt; &lt;li&gt;schedule&lt;/li&gt; &lt;li&gt;measurement window&lt;/li&gt; &lt;li&gt;object being monitored&lt;/li&gt; &lt;li&gt;evaluation frequency&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;In the case of CloudSocket, the metric and SLO are proper and completely defined in the CAMEL document. The SLOs in the SLA document reference the CAMEL entities.&lt;/p&gt; &lt;p&gt;The figure below is a simplified class diagram of the implied CAMEL entities in the description of SLO in the SLA document.&lt;/p&gt; &lt;p&gt;&lt;img alt="camel-class-diagram.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=camel-class-diagram.png" /&gt;&lt;/p&gt; &lt;p&gt;The Monitoring Engine allows the SLA Engine to subscribe to calculations of a MetricContext. Then, the constraint is:&lt;/p&gt; &lt;p&gt;constraint : metric_context operator threshold metric_context : &amp;lt;metric_context_id&amp;gt; operator : LT | LE | EQ | GE | GT threshold : &amp;lt;double&amp;gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt; A &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/sla-framework/blob/master/sla-core/cs-wsag-model/src/main/java/eu/cloudsocket/sla/wsag/CsServiceLevel.java"&gt;cs:slo&lt;/a&gt; element describe the CloudSocket SLOs.&lt;/p&gt; &lt;p&gt;Besides the constraint, a cs:slo may contain a human description (shown in marketplace) of the SLO and a &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/sla-framework/blob/master/sla-core/docs/developer-guide.md#windows"&gt;window description&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;This is an example of an SLO:&lt;/p&gt; &lt;pre&gt; &amp;lt;wsag:GuaranteeTerm wsag:Name=&amp;quot;HourlyResponseTimeLessEqual20msConditionGuaranteeTerm&amp;quot;&amp;gt; &amp;lt;wsag:ServiceLevelObjective&amp;gt; &amp;lt;wsag:KPITarget&amp;gt; &amp;lt;wsag:KPIName&amp;gt;ResponseTimeLessEqual20msConditionGuaranteeTerm_kpi&amp;lt;/wsag:KPIName&amp;gt; &amp;lt;wsag:CustomServiceLevel&amp;gt; &amp;lt;cs:slo&amp;gt; &amp;lt;cs:constraint&amp;gt;ResponseTimeCompositeMetricContext LE 20.000000&amp;lt;/cs:constraint&amp;gt; &amp;lt;cs:description&amp;gt;the mean of response time in 1 hours should be always less or equal than 20ms&amp;lt;/cs:description&amp;gt; &amp;lt;/cs:slo&amp;gt; &amp;lt;/wsag:CustomServiceLevel&amp;gt; &amp;lt;/wsag:KPITarget&amp;gt; &amp;lt;/wsag:ServiceLevelObjective&amp;gt; &amp;lt;wsag:BusinessValueList&amp;gt;...&amp;lt;/wsag:BusinessValueList&amp;gt; &amp;lt;/wsag:GuaranteeTerm&amp;gt; &lt;/pre&gt; &lt;a name="Business_values"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Business values&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;Penalties apply when an SLO is not fulfilled. SLA Service allows to define several penalties according to the number of occurrences of the violation in an interval of time, defined by the count and interval properties: if &amp;quot;count&amp;quot; violations occur in &amp;quot;interval&amp;quot; time, the penalty applies.&lt;/p&gt; &lt;p&gt;The SLA Engine defined a generic way to define a penalty. A penalty is composed of the following properties:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Type (string): it is the type of the penalty. For example: &amp;quot;discount&amp;quot;, &amp;quot;support&amp;quot;.&lt;/li&gt; &lt;li&gt;Expression(string)&lt;/li&gt; &lt;li&gt;Unit (string): together with 'expression' represent the value of the penalty. F.e. (100, &amp;euro;) or (&amp;quot;telephone&amp;quot;, null) if type=&amp;quot;support&amp;quot;.&lt;/li&gt; &lt;li&gt;Validity (xs:duration): the time the penalty applies. F.e., if there is a discount of (10, %) and validity is 1 month, the discount is applied over the monthly price. Assume we have a penalty &amp;quot;free_telephone_support&amp;quot;; the validity will be the time this free support will be available.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The penalties are described in the &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/sla-framework/blob/master/sla-core/sla-wsag-model/src/main/java/eu/atos/sla/parser/data/wsag/custom/Penalty.java"&gt;sla:penalty&lt;/a&gt; elements, which are inside a wsag:CustomBusinessValueElement.&lt;/p&gt; &lt;p&gt;An example is below:&lt;/p&gt; &lt;pre&gt; &amp;lt;wsag:GuaranteeTerm wsag:Name=&amp;quot;HourlyResponseTimeLessEqual20msConditionGuaranteeTerm&amp;quot;&amp;gt; &amp;lt;wsag:ServiceLevelObjective&amp;gt;...&amp;lt;/wsag:ServiceLevelObjective&amp;gt; &amp;lt;wsag:BusinessValueList&amp;gt; &amp;lt;wsag:CustomBusinessValue count=&amp;quot;1&amp;quot; duration=&amp;quot;P1D&amp;quot;&amp;gt; &amp;lt;sla:Penalty type=&amp;quot;discount&amp;quot; expression=&amp;quot;10.00&amp;quot; unit=&amp;quot;eur&amp;quot; validity=&amp;quot;P1M&amp;quot;/&amp;gt; &amp;lt;sla:description&amp;gt;if 1 violation occurs in 1 day =&amp;gt; apply a discount of 10euro for the current month&amp;lt;/sla:description&amp;gt; &amp;lt;/wsag:CustomBusinessValue&amp;gt; &amp;lt;/wsag:BusinessValueList&amp;gt; &amp;lt;/wsag:GuaranteeTerm&amp;gt; &lt;/pre&gt; &lt;p&gt;The definition of penalties is not responsibility of the SLA Engine.&lt;/p&gt; &lt;p&gt;The SLA Engine do not handle penalties internally. It detects when they should be raised and communicates them to observers.&lt;/p&gt; &lt;a name="Example"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Example&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;A full example of an SLA agreement with CloudSocket extensions follows:&lt;/p&gt; &lt;pre&gt; &amp;lt;wsag:Agreement wsag:AgreementId=&amp;quot;b705c5c9-bafa-4f8b-8079-09be96173995&amp;quot; xmlns:wsag=&amp;quot;http://www.ggf.org/namespaces/ws-agreement&amp;quot; xmlns:sla=&amp;quot;http://sla.atos.eu&amp;quot; xmlns:cs=&amp;quot;http://wsag.sla.cloudsocket.eu&amp;quot;&amp;gt; &amp;lt;wsag:Name&amp;gt;Send Invoice IaaS Europe SLA Template&amp;lt;/wsag:Name&amp;gt; &amp;lt;wsag:Context&amp;gt; &amp;lt;wsag:AgreementInitiator&amp;gt;84a5e594-f4ce-4daa-ac1e-3ebe032ca97c&amp;lt;/wsag:AgreementInitiator&amp;gt; &amp;lt;wsag:AgreementResponder&amp;gt;bwcon&amp;lt;/wsag:AgreementResponder&amp;gt; &amp;lt;wsag:ServiceProvider&amp;gt;AgreementResponder&amp;lt;/wsag:ServiceProvider&amp;gt; &amp;lt;wsag:TemplateId&amp;gt;94bafed5-335f-4ce3-98f5-e0c57b844997&amp;lt;/wsag:TemplateId&amp;gt; &amp;lt;sla:Service&amp;gt;Send Invoice IaaS Europe&amp;lt;/sla:Service&amp;gt; &amp;lt;cs:context&amp;gt; &amp;lt;cs:assessment&amp;gt;bwcon&amp;lt;/cs:assessment&amp;gt; &amp;lt;cs:monitoring&amp;gt;bwcon&amp;lt;/cs:monitoring&amp;gt; &amp;lt;/cs:context&amp;gt; &amp;lt;/wsag:Context&amp;gt; &amp;lt;wsag:Terms&amp;gt; &amp;lt;wsag:All&amp;gt; &amp;lt;wsag:GuaranteeTerm wsag:Name=&amp;quot;NinjaInvoiceHourlyRamLessEqual70PercentageConditionGuaranteeTerm&amp;quot;&amp;gt; &amp;lt;wsag:ServiceLevelObjective&amp;gt; &amp;lt;wsag:KPITarget&amp;gt; &amp;lt;wsag:KPIName&amp;gt;NinjaInvoiceHourlyRamLessEqual70PercentageConditionGuaranteeTerm_kpi&amp;lt;/wsag:KPIName&amp;gt; &amp;lt;wsag:CustomServiceLevel&amp;gt; &amp;lt;cs:slo&amp;gt; &amp;lt;cs:constraint&amp;gt;NinjaInvoiceHourlyRamCompositeMetricContext LE 70.000000&amp;lt;/cs:constraint&amp;gt; &amp;lt;cs:conditionConstraint&amp;gt;NinjaInvoiceHourlyRamLessEqual70PercentageCondition NOT_EXISTS&amp;lt;/cs:conditionConstraint&amp;gt; &amp;lt;cs:description&amp;gt;the mean of ram of ninja invoice in 1 hours should be always less or equal than 70%&amp;lt;/cs:description&amp;gt; &amp;lt;/cs:slo&amp;gt; &amp;lt;/wsag:CustomServiceLevel&amp;gt; &amp;lt;/wsag:KPITarget&amp;gt; &amp;lt;/wsag:ServiceLevelObjective&amp;gt; &amp;lt;wsag:BusinessValueList&amp;gt; &amp;lt;wsag:CustomBusinessValue count=&amp;quot;1&amp;quot; duration=&amp;quot;P1D&amp;quot;&amp;gt; &amp;lt;sla:Penalty type=&amp;quot;discount&amp;quot; expression=&amp;quot;10.00&amp;quot; unit=&amp;quot;eur&amp;quot; validity=&amp;quot;P1M&amp;quot;/&amp;gt; &amp;lt;sla:description&amp;gt;if 1 violation occurs in 1 day =&amp;gt; apply a discount of 10&amp;euro; for the current month&amp;lt;/sla:description&amp;gt; &amp;lt;/wsag:CustomBusinessValue&amp;gt; &amp;lt;/wsag:BusinessValueList&amp;gt; &amp;lt;/wsag:GuaranteeTerm&amp;gt; &amp;lt;wsag:GuaranteeTerm wsag:Name=&amp;quot;NinjaInvoiceHourlyResponseTimeLessEqual20msConditionGuaranteeTerm&amp;quot;&amp;gt; &amp;lt;wsag:ServiceLevelObjective&amp;gt; &amp;lt;wsag:KPITarget&amp;gt; &amp;lt;wsag:KPIName&amp;gt;NinjaInvoiceHourlyResponseTimeLessEqual20msConditionGuaranteeTerm_kpi&amp;lt;/wsag:KPIName&amp;gt; &amp;lt;wsag:CustomServiceLevel&amp;gt; &amp;lt;cs:slo&amp;gt; &amp;lt;cs:constraint&amp;gt;NinjaInvoiceResponseTimeCompositeMetricContext LE 20.000000&amp;lt;/cs:constraint&amp;gt; &amp;lt;cs:conditionConstraint&amp;gt;NinjaInvoiceHourlyResponseTimeLessEqual20msCondition NOT_EXISTS&amp;lt;/cs:conditionConstraint&amp;gt; &amp;lt;cs:description&amp;gt;the mean of response time in 1 hours should be always less or equal than 20ms&amp;lt;/cs:description&amp;gt; &amp;lt;/cs:slo&amp;gt; &amp;lt;/wsag:CustomServiceLevel&amp;gt; &amp;lt;/wsag:KPITarget&amp;gt; &amp;lt;/wsag:ServiceLevelObjective&amp;gt; &amp;lt;wsag:BusinessValueList&amp;gt; &amp;lt;wsag:CustomBusinessValue count=&amp;quot;1&amp;quot; duration=&amp;quot;P1D&amp;quot;&amp;gt; &amp;lt;sla:Penalty type=&amp;quot;discount&amp;quot; expression=&amp;quot;10.00&amp;quot; unit=&amp;quot;eur&amp;quot; validity=&amp;quot;P1M&amp;quot;/&amp;gt; &amp;lt;sla:description&amp;gt;if 1 violation occurs in 1 day =&amp;gt; apply a discount of 10&amp;euro; for the current month&amp;lt;/sla:description&amp;gt; &amp;lt;/wsag:CustomBusinessValue&amp;gt; &amp;lt;/wsag:BusinessValueList&amp;gt; &amp;lt;/wsag:GuaranteeTerm&amp;gt; &amp;lt;/wsag:All&amp;gt; &amp;lt;/wsag:Terms&amp;gt; &amp;lt;/wsag:Agreement&amp;gt; &lt;/pre&gt; &lt;a name="Further_analysis"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Further analysis&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;This section elaborates about our research on some additions to the specification that were not finally implemented on the prototype. Special thanks to Kyriakos Kritikos (FORTH).&lt;/p&gt; &lt;a name="Cost_model"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;Cost model&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;The following information can be expressed for a cost model. The proposed structure is:&lt;/p&gt; &lt;p&gt;&lt;i&gt;Pricing&lt;/i&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;minPrice: minimum price threshold. The price can never go below this threshold, irrespectively of the number of discounts that are legitimate to be claimed by the service customer.&lt;/li&gt; &lt;li&gt;maxPrice: maximum price threshold. Similarly, the service requester is guarded by this threshold in case of rewards such that he/she will never have to pay more than this threshold for a certain billing period.&lt;/li&gt; &lt;li&gt;basePrice: base price for the service. This is the normal price not affected by any discount or reward.&lt;/li&gt; &lt;li&gt;priceUnit: the currency for the service price (e.g., euros, dollars, etc.).&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;i&gt;Charging&lt;/i&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Charging frequency (duration - every 1 hour, 1 day, 1 month, etc)&lt;/li&gt; &lt;li&gt;Charging description (human-oriented description of what is charged - could be more elaborate on a technical level to explain how the price is calculated - could also provide links to web pages where this information is much detailed)&lt;/li&gt; &lt;li&gt;Reservation type: on-demand, advanced reservation, spot prices&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;i&gt;Billing&lt;/i&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Billing frequency (duration - every month, every 6 months, every year, etc.)&lt;/li&gt; &lt;li&gt;Billing means (credit card, bank transfer, paypal)&lt;/li&gt; &lt;li&gt;Billing process description (human-oriented description of how billing should be performed)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The excerpt below shows an example of a cost model expressed in WS-Agreement.&lt;/p&gt; &lt;pre&gt; &amp;lt;cs:priceModel name=&amp;quot;Service Price Model&amp;quot;&amp;gt; &amp;lt;cs:pricing maxPrice=&amp;quot;90&amp;quot; minPrice=&amp;quot;40&amp;quot; basePrice=&amp;quot;0.1&amp;quot; priceUnit=&amp;quot;euros&amp;quot;/&amp;gt; &amp;lt;cs:charging frequency=&amp;quot;1H&amp;quot; reservationType=&amp;quot;on-demand&amp;quot;&amp;gt; &amp;lt;cs:description&amp;gt;service is charged every 1 hour of use&amp;lt;/cs:description&amp;gt; &amp;lt;/cs:charging&amp;gt; &amp;lt;cs:billing frequency=&amp;quot;1M&amp;quot; means=&amp;quot;credit-card,paypal&amp;quot;&amp;gt; &amp;lt;cs:description&amp;gt;the customer has to first provide the credit card details which will then be charged based on the charging frequency according to the actual cost incurred in the billing period&amp;lt;/cs:description&amp;gt; &amp;lt;/cs:billing&amp;gt; &amp;lt;/cs:priceModel&amp;gt; &lt;/pre&gt;</summary> <dc:creator>Román Sosa González</dc:creator> <dc:date>2017-09-06T15:51:34Z</dc:date> </entry> <entry> <title>Smart Business-IT Alignment in the Cloud 1.2</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Smart+Business-IT+Alignment+in+the+Cloud" /> <author> <name>Prajakta Diwanji</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Smart+Business-IT+Alignment+in+the+Cloud</id> <updated>2017-07-24T15:19:54Z</updated> <published>2017-07-24T15:19:54Z</published> <summary type="html">&lt;p&gt;&lt;span style="font-size: 26px;"&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Business requirements&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;1.&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Smart and intuitive service discovery&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;2.&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Matching business process requirements with cloud service specifications &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;3.&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Ensuring consistency between human and machine interpretation of BPaaS models&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;4.&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Support business users to formulate decision logic for the Business-IT alignment&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&lt;img alt="" height="622" src="/documents/357593/0/image1.png/f2b1168e-0346-4448-b863-9e1dcd30328c?t=1500898893409" style="width: 555px;" width="655" /&gt;&lt;/div&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 24px;"&gt;&lt;u&gt;Solutions&lt;/u&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 24px;"&gt;&lt;u style="text-underline: single;"&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;1) BPaaS Design Environment Prototype&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&lt;strong&gt;&lt;span style="font-size: 18px;"&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;Extending BPMN 2.0x&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;-Business p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;rocess requirements&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;-Workflow/cloud service specifications&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p dir="ltr" style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;strong&gt;&lt;span style="font-size: 18px;"&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;Semantic Lifting&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&amp;nbsp;-&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Translating models into BPaaS Ontology&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&amp;nbsp;-&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Web service enabling semantic annotation&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &lt;strong&gt;Matching&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&amp;nbsp;-&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Mapping business language to technical language&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&amp;nbsp;-&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Comparing business process requirements with cloud service specifications&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;&lt;img alt="" height="318" src="/documents/357593/0/image2.png/5368b78d-87f8-4eab-8251-6eef52662abe?t=1500899673705" style="width: 639px;" width="718" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;u&gt;&lt;span style="font-size: 18px;"&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: 18px;"&gt;&lt;span style="font-size: 24px;"&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;2) Context-Adaptive Questionnaire Prototype&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&amp;nbsp;-&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Hierarchical service &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;discovery: process – &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;group &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;– &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;task&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&amp;nbsp;-&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Ask only relevant question about business process requirements&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&amp;nbsp;-&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Intelligent, dynamic prioritization of questions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;div style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&lt;img alt="" height="345" src="/documents/357593/0/image3.png/ccdbfff4-d5ee-4cc8-ba1c-f09b2308483a?t=1500899983127" style="width: 595px;" width="702" /&gt;&lt;/div&gt; &lt;div style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; direction: ltr; language: en-US; punctuation-wrap: simple;"&gt;&lt;u&gt;&lt;span style="font-size: 24px;"&gt;&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;3) DMN to SPARQL CONSTRUCT Prototype &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/div&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&amp;nbsp;-D&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;ecision tables for mapping of business process requirements to cloud service specifications&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&amp;nbsp;-M&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;odel decision rules with reference to BPaaS Ontology&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&amp;nbsp;-&lt;span style="language: en-GB;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="color: black;"&gt;Translation of decision table into executable SPARQL Constructs&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;u&gt;&lt;span style="font-size: 24px;"&gt;Materials for the solutions&lt;/span&gt;&lt;/u&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;Link to the video&amp;nbsp;for installation and running of above&amp;nbsp;prototypes&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&lt;span style="font-size: 18px;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;a href="https://www.youtube.com/watch?v=f_9i6fSlc_A&amp;amp;t=199s"&gt;&lt;u&gt;&lt;span style="font-family: calibri;"&gt;&lt;span style="color: rgb(5, 99, 193);"&gt;https://www.youtube.com/watch?v=f_9i6fSlc_A&amp;amp;t=199s&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="text-align: left; text-indent: -0.97in; margin-top: 9.6pt; margin-bottom: 0pt; margin-left: 1.47in; vertical-align: baseline; unicode-bidi: embed; language: en-US; punctuation-wrap: simple;"&gt;&amp;nbsp;&lt;/p&gt;</summary> <dc:creator>Prajakta Diwanji</dc:creator> <dc:date>2017-07-24T15:19:54Z</dc:date> </entry> <entry> <title>Design Environment Components 1.6</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Design+Environment+Components" /> <author> <name>Damiano Falcioni</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Design+Environment+Components</id> <updated>2017-07-17T10:08:59Z</updated> <published>2017-07-17T10:08:59Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Summary"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Summary&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Architecture_design"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Architecture design&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Installation_manual"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;Installation manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#Development"&gt;&lt;span class="tocnumber"&gt;3.1&lt;/span&gt; &lt;span class="toctext"&gt;Development&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Production"&gt;&lt;span class="tocnumber"&gt;3.2&lt;/span&gt; &lt;span class="toctext"&gt;Production&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Test_Cases"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Test Cases&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#User_Manual"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;User Manual&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#API_specification"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;API specification&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#HandBook"&gt;&lt;span class="tocnumber"&gt;7&lt;/span&gt; &lt;span class="toctext"&gt;HandBook&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Summary"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Summary&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The BPaaS Design Environment provides appropriate conceptual modelling tools for (a) designing domain specific business processes, (b) executable workflows, (c) additional description and rules for deployment as well as (d) Key Performance Indicators.&lt;/p&gt; &lt;p&gt;In order to provide those different modelling tools within one environment, a meta modelling platform is used that enables the plug-in of different modelling aspects. For BPaaS the aforementioned different modelling approaches correspond to the first two business process layers &amp;ndash; the (I) domain specific business process as well as the (II) executable workflows &amp;ndash; and the alignment from the business to the technical layer.&lt;/p&gt; &lt;p&gt;Hence the meta modelling platform enables to keep all models in one repository and the interaction between the different layers via so-called model weaving and semantic lifting.&lt;/p&gt; &lt;p&gt;The BPaaS Design Environment consists of:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;A meta modelling platform that provides a BPaaS model repository for all its models, the corresponding management and security infrastructure and a development environment that enables the implementation of modelling components.&lt;/li&gt; &lt;li&gt;BPaaS modelling components are distinguished by their modelling languages &amp;ndash; which are implementations of standards like BPMN, DMN, or RDF &amp;ndash; as well as modelling features such as user interaction and model processing. Hence the domain specific business process modeller and the executable workflow modeller are both such a meta modelling component.&lt;/li&gt; &lt;li&gt;The corresponding Web-GUI realizes the user interaction features, to manipulate a model.&lt;/li&gt; &lt;li&gt;Interfaces enable the access to the BPaaS Design Environment in particular to the BPaaS model repository, which consists of domain specific business process models, executable workflow models, additional business requirement models and KPI models. This interaction can rely on standard features such as BPMN export / import or on implemented proprietary exchange formats.&lt;/li&gt; &lt;/ul&gt; &lt;a name="Architecture_design"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Architecture design&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The architectural design is available in D4.1 (available &lt;a class="externallink" rel="nofollow" href="https://www.cloudsocket.eu/documents/251273/333738/CloudSocket-D4.1-First+CloudSocket+Architecture.pdf/dea55ea9-9285-4bd4-bff9-2edccd81839e"&gt;here&lt;/a&gt;). All UML diagrams and artifacts can be accessed online &lt;a class="externallink" rel="nofollow" href="https://www.cloudsocket.eu/uml/1-DesignEnvironment/remotedocu/modeldocu/27012016101131/modelContentHTML/index.html"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;img alt="342692.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=342692.png" /&gt;&lt;/p&gt; &lt;a name="Installation_manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Installation manual&lt;/span&gt;&lt;/h3&gt; &lt;a name="Development"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Development&lt;/span&gt;&lt;/h4&gt; &lt;a name="Production"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Production&lt;/span&gt;&lt;/h4&gt; &lt;a name="Test_Cases"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Test Cases&lt;/span&gt;&lt;/h3&gt; &lt;a name="User_Manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;User Manual&lt;/span&gt;&lt;/h3&gt; &lt;a name="API_specification"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;API specification&lt;/span&gt;&lt;/h3&gt; &lt;a name="HandBook"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;HandBook&lt;/span&gt;&lt;/h3&gt;</summary> <dc:creator>Damiano Falcioni</dc:creator> <dc:date>2017-07-17T10:08:59Z</dc:date> </entry> <entry> <title>Evaluation Environment Components 2.1</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Evaluation+Environment+Components" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Evaluation+Environment+Components</id> <updated>2017-05-25T13:52:08Z</updated> <published>2017-05-25T13:52:08Z</published> <summary type="html">&lt;a name="Overview"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Overview&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The BPaaS Evaluation Environment is a companion to the CloudSocket broker which assists him/her towards optimising the BPaaS services offered. This assistance comes in various forms that map to different types of analysis. These types include: (a) KPI evaluation for assessing the performance of the BPaaS; (b) KPI drill-down to find the root causes of a particular KPI violation; (c) best BPaaS deployment discovery to infer the best deployments for a certain BPaaS; (d) process model recreation via process mining. On top of this functionality there exists a Hybrid Business Dashboard which enables the broker to appropriately invoke the analysis functionality as well as to visualise the analysis results by employing the best possible visualisation metaphors. This dashboard is shared between the BPaaS Desing and Evaluation Environments highlighting the close relationship between these environments where the results of one environment (i.e., evaluation) can enable to optimise the main artefacts of the other (i.e., design). This also enables the fast switch from one to the other environment when the need for optimisation is spotted and has to be applied at once. However, we should also highlight that the results of one analysis kind, i.e., the best BPaaS deployment discovery, can be exploited also by the BPaaS Allocation Environment towards the quest to find the most optimal deployment for a certain BPaaS.&lt;/p&gt; &lt;p&gt;Each analysis functionality is offered by a composite component in the form of an engine. In this respect, KPI evaluation and drill-down are offered by the &lt;a href="/wiki/Special:Node:330801/Conceptual_Analytics_Engine" title="Conceptual Analytics Engine"&gt;Conceptual Analytics Engine&lt;/a&gt;, best BPaaS deployment discovery is offered by the &lt;a href="/wiki/Special:Node:330801/Deployment_Discovery_Engine" title="Deployment Discovery Engine"&gt;Deployment Discovery Engine&lt;/a&gt;, while the capability to execute process mining algorithms is offered by the &lt;a href="/wiki/Special:Node:330801/Process_Mining_Engine" title="Process Mining Engine"&gt;Process Mining Engine&lt;/a&gt;. To support the proper operation of all these engines with respect to the analysis tasks that have to be performed, another engine called &lt;a href="/wiki/Special:Node:330801/Harvesting_Engine" title="Harvesting Engine"&gt;Harvesting Engine&lt;/a&gt; was developed with the main goal to harvest information from different information sources (i.e., components) in the CloudSocket architecture, to semantically uplift it with the assistance of two ontology (Evaluation and KPI OWL-Q Extension) and to finally store it in the &lt;a href="/wiki/Special:Node:330801/Semantic_Knowledge_Base" title="Semantic Knowledge Base"&gt;Semantic Knowledge Base&lt;/a&gt;. The latter has been realised in the form of an API which has been built on top of an existing triple store.&lt;/p&gt; &lt;p&gt;The BPaaS Evaluation Environment, similarly to the BPaaS Design one, supports multi-tenancy out of the box. This has been mainly realised thanks to the &lt;a href="/wiki/Special:Node:330801/Harvesting_Engine" title="Harvesting Engine"&gt;Harvesting Engine&lt;/a&gt; which is able to store the information harvested and semantically uplifted in broker-specific fragments (i.e., RDF graphs) inside the &lt;a href="/wiki/Special:Node:330801/Semantic_Knowledge_Base" title="Semantic Knowledge Base"&gt;Semantic Knowledge Base&lt;/a&gt;. This enables the system to service a broker by considering only the fragment that belongs to him/her, thus also allowing all analysis functionalities to focus only on a specific portion of the whole &lt;a href="/wiki/Special:Node:330801/Semantic_Knowledge_Base" title="Semantic Knowledge Base"&gt;Semantic Knowledge Base&lt;/a&gt; content.&lt;/p&gt; &lt;p&gt;As indicated in the analysis of each individual main component of the BPaaS Evaluation Environment, in many cases most of the components can be interchanged with external ones developed by organisations out of the CloudSocket consortium. This is due to the loose coupling between the components, the development of an abstraction API as well as the interchange of standard, as much as possible, formats. Two main exceptions apply to this rule: (a) the Hybrid Business Dashboard component is shared between the two environments which means that if it has to be interchanged, this should also be allowed by the BPaaS Design Environment; (b) the &lt;a href="/wiki/Special:Node:330801/Harvesting_Engine" title="Harvesting Engine"&gt;Harvesting Engine&lt;/a&gt; does not offer a certain REST API but is executed periodically in the form of a thread. This engine requires high expertise and knowledge of semantic technologies in order to be reproduced as well as a good knowledge of many APIs that are offered by the CloudSocket platform. It also needs to know what is the information offered by such APIs and how it can be correlated in such a way that appropriate semantic relationships between the different resources created can be expressed by considering the current schema of the Evaluation and KPI (OWL-Q Extension) ontologies. In this respect, we consider the development of such a component a difficult but not impossible job to be performed.&lt;/p&gt; &lt;p&gt;An overview of the architecture of the BPaaS Evaluation Environment is depicted in the figure below. As it can be easily seen, this architecture comprises three main levels: (a) UI; (b) business logic; (c) data. At the UI level resides the Hybrid Business Dashboard responsible for invoking the different analysis components offered. The business logic level comprises all the analysis engines (&lt;a href="/wiki/Special:Node:330801/Special:Edit?topic=Conceptual_Analytics_Engine%5D%2C_%5B%5BDeployment_Discovery_Engine" class="edit" title="Conceptual Analytics Engine], [[Deployment Discovery Engine"&gt;Conceptual Analytics Engine], [[Deployment Discovery Engine&lt;/a&gt;, and &lt;a href="/wiki/Special:Node:330801/Process_Mining_Engine" title="Process Mining Engine"&gt;Process Mining Engine&lt;/a&gt;) as well as the &lt;a href="/wiki/Special:Node:330801/Harvesting_Engine" title="Harvesting Engine"&gt;Harvesting Engine&lt;/a&gt;. On top of the analysis engines resides the Hybrid Business Management Tool which takes care of the orchestration of the analysis functionality and is the bridge between the UI and the business logic level. Finally, at the data level, the &lt;a href="/wiki/Special:Node:330801/Semantic_Knowledge_Base" title="Semantic Knowledge Base"&gt;Semantic Knowledge Base&lt;/a&gt; exists which enables the querying and the management of the semantic information stored in it.&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:660px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="evaluation-arch.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=evaluation-arch.png" /&gt;&lt;br /&gt; &lt;b&gt;Architecture of the BPaaS Evaluation Environment&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;More information about this architecture, how the components interact with each other at the same or across different adjacent levels and what are the interactions scenarios covered can be found at the following URL: where corresponding UML diagrams can be viewed. This information was also covered in the D4.5 deliverable.&lt;/p&gt; &lt;p&gt;Below, we provide the links of all the components of the BPaaS Evaluation Environment which provide a more thorough analysis for them catering for different types of audience, including developers and operation managers. An overview of these components is also provided in the D4.6 deliverable.&lt;/p&gt; &lt;a name="Component_Documentations"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Component Documentations&lt;/span&gt;&lt;/h3&gt; &lt;a name="Semantic_Knowledge_Base"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:330801/Semantic_Knowledge_Base" title="Semantic Knowledge Base"&gt;Semantic Knowledge Base&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Harvesting_Engine"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:330801/Harvesting_Engine" title="Harvesting Engine"&gt;Harvesting Engine&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Conceptual_Analytics_Engine"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:330801/Conceptual_Analytics_Engine" title="Conceptual Analytics Engine"&gt;Conceptual Analytics Engine&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Process_Mining_Engine"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:330801/Process_Mining_Engine" title="Process Mining Engine"&gt;Process Mining Engine&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Deployment_Discovery_Engine"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:330801/Deployment_Discovery_Engine" title="Deployment Discovery Engine"&gt;Deployment Discovery Engine&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-05-25T13:52:08Z</dc:date> </entry> <entry> <title>Conceptual Analytics Engine 7.6</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Conceptual+Analytics+Engine" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Conceptual+Analytics+Engine</id> <updated>2017-05-25T13:13:59Z</updated> <published>2017-05-25T13:13:59Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Summary"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Summary&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Component_responsible"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Component responsible&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Architecture_Design"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;Architecture Design&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Installation_Manual"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Installation Manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#Development"&gt;&lt;span class="tocnumber"&gt;4.1&lt;/span&gt; &lt;span class="toctext"&gt;Development&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Production"&gt;&lt;span class="tocnumber"&gt;4.2&lt;/span&gt; &lt;span class="toctext"&gt;Production&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Test_Cases"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;Test Cases&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#User_Manual"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;User Manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#API_Specification"&gt;&lt;span class="tocnumber"&gt;6.1&lt;/span&gt; &lt;span class="toctext"&gt;API Specification&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#evaluateKPI"&gt;&lt;span class="tocnumber"&gt;6.1.1&lt;/span&gt; &lt;span class="toctext"&gt;evaluateKPI&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#evaluateMetric"&gt;&lt;span class="tocnumber"&gt;6.1.2&lt;/span&gt; &lt;span class="toctext"&gt;evaluateMetric&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#kpiDrillDown"&gt;&lt;span class="tocnumber"&gt;6.1.3&lt;/span&gt; &lt;span class="toctext"&gt;kpiDrillDown&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#kpiHistory"&gt;&lt;span class="tocnumber"&gt;6.1.4&lt;/span&gt; &lt;span class="toctext"&gt;kpiHistory&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#kpiQuery"&gt;&lt;span class="tocnumber"&gt;6.1.5&lt;/span&gt; &lt;span class="toctext"&gt;kpiQuery&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#kpiTenantQuery"&gt;&lt;span class="tocnumber"&gt;6.1.6&lt;/span&gt; &lt;span class="toctext"&gt;kpiTenantQuery&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#ldQuery"&gt;&lt;span class="tocnumber"&gt;6.1.7&lt;/span&gt; &lt;span class="toctext"&gt;ldQuery&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#rawMetricQuery"&gt;&lt;span class="tocnumber"&gt;6.1.8&lt;/span&gt; &lt;span class="toctext"&gt;rawMetricQuery&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Handbook"&gt;&lt;span class="tocnumber"&gt;6.2&lt;/span&gt; &lt;span class="toctext"&gt;Handbook&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Summary"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Summary&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The &lt;i&gt;Conceptual Analytics Engine&lt;/i&gt; is a composite component in the BPaaS Evaluation Environment which is responsible for performing two types of KPI analysis over the &lt;i&gt;Semantic Knowledge Base&lt;/i&gt; (&lt;i&gt;Semantic KB&lt;/i&gt;) at the Data Layer of this environment's architecture. This component is invoked by the &lt;i&gt;Hybrid Dashboard&lt;/i&gt; to execute the required type of analysis and visualise the respective analysis results according to the best possible visualisation metaphor. The two types of KPI analysis include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;KPI metric measurement: Derives the current and historical measurements for a KPI metric enabling their evaluation against the corresponding KPI threshold by the &lt;i&gt;Hybrid Business Dashboard&lt;/i&gt;. This type of analysis is offered in two forms: (a) on-the-fly derivation of the KPI measurements based on measurement information of raw metrics derived from the BPaaS Execution Environment; (b) querying over a historical fragment of the &lt;i&gt;Semantic KB&lt;/i&gt; to obtain the measurement history of the KPI. The first form is actually a facilitator of the second as it enables the broker to store the derived information in the historical fragment. The first form is also offered in terms of two variants: (a) KPI measurement: the measurement of the metric of an existing KPI is supported; (b) Metric measurement: measurement for metric specifications which do not necessarily map to KPIs. The second variant is ideal for exploring the possible metric space in order to enable the broker to come up with new KPIs for his/her BPaaSes. This has been deemed a necessity for KPI analysis environments as the determination of KPIs is not an easy task to perform which also requires some form of creativity that has to be supported by such an environment.&lt;/li&gt; &lt;li&gt;KPI drill-down: Drills-down the measurement of a metric of a KPI to the whole KPI hierarchy. Via the checking of the corresponding thresholds of the KPIs involved in the hierarchy, this enables to perform root-cause analysis (for the KPI violation that has occurred at the top-level of the hierarchy).&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The &lt;i&gt;Conceptual Analytics Engine&lt;/i&gt; does support multi-tenancy. This means that it can support multiple brokers instead of one in a concurrent manner. This feature is enabled via the &lt;i&gt;Harvester&lt;/i&gt; component which partitions accordingly the information space in the &lt;i&gt;Semantic KB&lt;/i&gt; in broker-specific fragments. Each broker-specific fragment is further separated into normal and historical sub-fragments. In this way, an analysis functionality for a certain broker can be operated over the suitable broker-specific fragment such that, in the end, multiple tenants/brokers can be supported.&lt;/p&gt; &lt;p&gt;Apart from API methods that directly map to the core KPI analysis functionality offered, also auxiliary/utility methods are also offered to better facilitate the analysis and visualisation tasks of the &lt;i&gt;Hybrid Business Dashboard&lt;/i&gt;. In overall, the following functionality is offered by the &lt;i&gt;Conceptual Analytics Engine&lt;/i&gt; component:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;KPI Measurement: the capability to measure the performance of a BPaaS is offered either for the current moment or across a certain time period. The measurement can be across all customers of the broker that have purchased the corresponding BPaaS or for a certain customer. The measurement can be performed either via the KPI name, for fixed KPIs originally defined for the BPaaS at hand, or via the specification of a KPI metric (for a more creative exploration of the possible metric space).&lt;/li&gt; &lt;li&gt;KPI Drill-Down: this offered capability enables to perform root-cause analysis for the violation of a top KPI. As soon as a top KPI is violated, the &lt;i&gt;Hybrid Business Dashboard&lt;/i&gt; can call this functionality in order to check the status of the KPIs within the hierarchy of the top-level KPI violated. What happens in the background is that both the top-level KPI and its descendants are evaluated via the first type of functionality analysed in the previous bullet. The measurement results are then compared with the KPI thresholds to derive the chain of KPI violations that led to the top-level KPI violation.&lt;/li&gt; &lt;li&gt;Retrieval of Raw Metric Information: this capability enables to obtain the information of which raw metrics can be exploited by the broker in its effort to produce a new KPI metric. Such raw metrics map to measurements that have been already collected from the BPaaS Execution Environment by the &lt;i&gt;Harvester&lt;/i&gt;. These metrics are actually exploited in the production of the KPI metric hierarchy mapping to a new KPI metric that has to be evaluated by the broker via the invocation of the functionality in the 1st bullet. Thus, they participate in the formulas of the metrics involved in this KPI metric hierarchy.&lt;/li&gt; &lt;li&gt;Tenant Information Retrieval: this capability enables the broker to obtain the list of tenants for which KPI measurements have been produced for a certain BPaaS. Such information can then be exploited, e.g., in order to perform KPI measurement and drill-down in a customer-specific manner.&lt;/li&gt; &lt;li&gt;KPI Retrieval: could be argued that this capability is not needed to be offered as the &lt;i&gt;Hybrid Business Dashboard&lt;/i&gt; already has the knowledge about which KPIs have been defined for a BPaaS inside the BPaaS Design Package. However, by considering the fact that some KPIs are defined later on by the BPaaS Evaluation Environment, this utility capability, in the end, enables to present to the broker all KPIs that have been defined for a BPaaS and have been incorporated in the corresponding BPaaS bundle definition.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Only the CloudSocket broker has been enabled to exploit such the &lt;i&gt;Conceptual Analytics Engine&lt;/i&gt; with the rationale that the BPaaS Evaluation Environment is a facility offered only for this entity that enables it to assist it in the proper management of its BPaaSes. Of course, any CloudSocket enhanced implementation might also take the view of providing an analysis functionality also for the customer. In any case, we consider that only one role from the CloudSocket broker can be involved in the exploitation of the BPaaS Evaluation Environment which is the evaluation expert. This is due to the fact that both the &lt;i&gt;Hybrid Business Dashboard&lt;/i&gt; as well as the requirements imposed by its underlying analysis functionality do not force the use of a more technical role. In the context of KPI analysis, this is in contrast to other frameworks which tightly couple the definition of KPIs with the underlying measurement/storage technology (e.g., database queries used for KPI evaluation). On the contrary, the &lt;i&gt;Conceptual Analytics Engine&lt;/i&gt; does not impose such a requirement as it demands the use of the OWL-Q language, which is a high-level, implementation-independent language for the definition of KPIs. In this way, the evaluation expert needs just to learn this language in order to define new KPIs which comprise metrics that are specified in a quite user-intuitive and familiar way for the expert. In case that new KPIs are not needed to be specified, then the evaluation expert does not need to possess any special knowledge in order to exploit the analysis functionality offered which greatly eases his/her job.&lt;/p&gt; &lt;p&gt;This component could be easily replaced by another component developed by an organisation outside the CloudSocket consortium. Its integration will be easy as it is loosely coupled with just one from the rest of the BPaaS Evaluation Environment components, the &lt;i&gt;Semantic KB&lt;/i&gt; and especially its &lt;i&gt;Semantic KB Service&lt;/i&gt; which hides and abstracts away from any implementation details involved in the &lt;i&gt;Semantic KB&lt;/i&gt;.&lt;/p&gt; &lt;p&gt;&lt;br /&gt; The following table indicates the details of the component.&lt;/p&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Type of ownership&lt;/b&gt;&lt;/td&gt; &lt;td&gt;Creation&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Original tool&lt;/b&gt;&lt;/td&gt; &lt;td&gt;New component developed in the context of this project&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Planned OS license&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="https://www.mozilla.org/en-US/MPL/2.0/"&gt;Mozilla Public Licence 2.0&lt;/a&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Reference community&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="https://www.adoxx.org/live/community"&gt;ADOxx Community&lt;/a&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;&lt;br /&gt; &lt;b&gt;Consist of&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Conceptual Analytics Service (REST API exposing all core functionalities)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Depends on&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Semantic KB&lt;/li&gt; &lt;/ul&gt; &lt;a name="Component_responsible"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Component responsible&lt;/span&gt;&lt;/h3&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;th&gt;Developer&lt;/th&gt; &lt;th&gt;Email&lt;/th&gt; &lt;th&gt;Company&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Kyriakos Kritikos&lt;/td&gt; &lt;td&gt;kritikos@ics.forth.gr&lt;/td&gt; &lt;td&gt;FORTH&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Architecture_Design"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Architecture Design&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The &lt;i&gt;Conceptual Analytics Engine&lt;/i&gt; is a composite component offering KPI analysis capabilities, which is coloured in red in the overall BPaaS Evaluation Environment architecture depicted in the figure below. As it can be seen, it is invoked by the &lt;i&gt;Business Management Tool&lt;/i&gt; in order to execute the respective BPaaS analysis functionality. This invocation, in turn, leads to exploiting the content of the &lt;i&gt;Semantic KB&lt;/i&gt; at the Data Layer in order to support the analysis functionality needed.&lt;/p&gt; &lt;p&gt;The final, internal architecture of the &lt;i&gt;Conceptual Analytics Engine&lt;/i&gt;, which is depicted below, comprises the following 6 main components:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;i&gt;Conceptual Analytics Service&lt;/i&gt;: A REST service which encapsulates the whole functionality of the &lt;i&gt;Conceptual Analytics Engine&lt;/i&gt; in the form of REST API methods. Depending on the respective API method invoked, different underlying components are executed by this service.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Query Creator&lt;/i&gt;: this component is responsible for creating SPARQL queries which are then evaluated by the &lt;i&gt;Conceptual Analytics Service&lt;/i&gt; over the &lt;i&gt;Semantic KB&lt;/i&gt;. Such queries map to the core functionality of the &lt;i&gt;Conceptual Analytics Engine&lt;/i&gt;, thus enabling to obtain measurements related to KPI assessment and drill-down. They also map to auxiliary/utility functionality which is also offered in the form of specific API methods of the &lt;i&gt;Conceptual Analytics Service&lt;/i&gt;.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Drill-Down Handler&lt;/i&gt;: this component is responsible for performing the drill-down of KPIs. As a KPI forms a hierarchy with its underlying KPI descendants, the facilities of the &lt;i&gt;Query Creator&lt;/i&gt; are exploited in order to construct the KPI measurement queries for all the KPIs involved in the KPI hierarchy.&lt;/li&gt; &lt;li&gt;&lt;i&gt;KPI Handler&lt;/i&gt;: this component is responsible for obtaining the definition of KPIs and their corresponding metrics from the &lt;i&gt;Semantic KB&lt;/i&gt; and offers the functionality of retrieving such information both to the &lt;i&gt;Conceptual Analytics Service&lt;/i&gt; and the two main components underlying it. This means that there exist API methods which can be exploited in order to obtain the KPI information involved in the definition of a certain BPaaS.&lt;/li&gt; &lt;li&gt;&lt;i&gt;SPARQL Transformer&lt;/i&gt;: it is responsible for transforming the definition of a KPI metric into an SPARQL query which can be exploited in order to derive the measurements of that metric in a certain time period. It is solely exploited by the &lt;i&gt;Query Creator&lt;/i&gt; component.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Resource Accessor&lt;/i&gt;: it has the duty to retrieve information from external information sources, i.e., REST APIs or databases. It is called by the &lt;i&gt;Query Creator&lt;/i&gt; in order to produce the appropriate input information (mapping to such external information source accessing) in metric formulas which is to be implanted in the query that has to be generated for a specific metric. This is due to the fact that metric formulas comprise input parameters, which can be metrics, constants or information generated from calling such external information sources. &amp;nbsp;&lt;/li&gt; &lt;/ul&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:460px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="ca.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=ca.png" /&gt;&lt;br /&gt; &lt;b&gt;Architecture of the Conceptual Analytics Engine&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Installation_Manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Installation Manual&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The component has been implemented purely in java. It depends on other external components / frameworks like Spring, swagger, jersey and sesame/rdf4j. It also depends on an internal component developed in the context of this project, the &lt;i&gt;owl-q&lt;/i&gt; one which enables the parsing of OWL-Q models into domain-specific objects as well as their writing. The following figure explicates the sole artefact generated mapping to this component as well as its dependencies on other artefacts (at a coarse-grained level to simplify the figure).&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:710px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;img alt="ca-artifacts.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=ca-artifacts.png" /&gt;&lt;br /&gt; &lt;br /&gt; &lt;b&gt;Artifact dependencies for the Conceptual Analytics Engine&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;Maven has been exploited as the main build automation tool, prescribing how the component/artefact can be built and its main dependencies. Such a tool facilitates the building and automatic generation of this artefact for the different CloudSocket environments (development and production) and their configuration. A complete description of how such artefact building and generation can be performed for the different environments is given in the installation manual below.&lt;/p&gt; &lt;a name="Development"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Development&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;Currently, the following requirements hold for this component:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Oracle's 1.7.x JDK or higher&lt;/li&gt; &lt;li&gt;Apache tomcat 1.7 or higher&lt;/li&gt; &lt;li&gt;Maven tool for code compilation and packaging&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The installation procedure to be followed is the one given below:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Download source code from &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/evaluation_skb/repository/archive.tar?ref=master"&gt;https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/evaluation_skb/repository/archive.tar?ref=master&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Unzip code with tar (or any other tool)&lt;/li&gt; &lt;li&gt;Go to the root directory of the installed code&lt;/li&gt; &lt;li&gt;Change the configuration file to provide the right access information for the Virtuoso Triple Store (&lt;a class="externallink" rel="nofollow" href="https://virtuoso.openlinksw.com/"&gt;https://virtuoso.openlinksw.com/&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Run: &lt;pre&gt; mvn clean install &lt;/pre&gt; and then: &lt;pre&gt; mvn war:war &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Move the war file to the webapps directory of tomcat and start tomcat, if not yet started&lt;/li&gt; &lt;li&gt;Test installation by entering in your browser the following URL: &lt;a class="externallink" rel="nofollow" href="http://localhost:8080/evaluation/"&gt;http://localhost:8080/evaluation/&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt; &lt;a name="Production"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Production&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;The same instructions as above hold for this component&lt;/p&gt; &lt;a name="Test_Cases"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Test Cases&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;You can run test cases directly from the URL (&lt;a class="externallink" rel="nofollow" href="http://localhost:8080/evaluation"&gt;http://localhost:8080/evaluation&lt;/a&gt; in your development environment) of the REST service due to the use of swagger (&lt;a class="externallink" rel="nofollow" href="http://swagger.io"&gt;http://swagger.io&lt;/a&gt;) which enables the execution of the API method exposed by exploiting user input provided in a form-based manner. The following test cases are envisioned:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Run a KPI evaluation query&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Suppose that the user desires to obtain the most recent value for a KPI named as &amp;quot;MeanAvailabilityKPI&amp;quot;. Then, he/she can browse the methods of the API and click on the one named as &amp;quot;evaluateKPI&amp;quot;. The following screenshot indicates the upper part of the description of the method when selected: &lt;img alt="kpiQuery1.PNG" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=kpiQuery1.PNG" /&gt; Next, he/she can fill in the kpiName field with the value of &amp;quot;MeanAvailabilityKPI&amp;quot;, the field of &amp;quot;brokerId&amp;quot; with the value of &amp;quot;bwcon&amp;quot; and the field of &amp;quot;bundleId&amp;quot; with the value of &amp;quot;SendInvoiceSaaSEurope&amp;quot;. Then he/she can press the &amp;quot;Try it out!&amp;quot; button.&lt;/p&gt; &lt;p&gt;Finally, he/she will be able to see the respective curl command issued, the request URL, the corresponding results, as well as the response status and headers as indicated in the following figure: &lt;img alt="kpiQuery3.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=kpiQuery3.png" /&gt;&lt;/p&gt; &lt;a name="User_Manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;User Manual&lt;/span&gt;&lt;/h3&gt; &lt;a name="API_Specification"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;API Specification&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;The reader should refer to the swagger-based API web page (&lt;a class="externallink" rel="nofollow" href="http://localhost:8080/evaluation"&gt;http://localhost:8080/evaluation&lt;/a&gt; for a local installation or &lt;a class="externallink" rel="nofollow" href="http://134.60.64.222:8080/evaluation"&gt;http://134.60.64.222:8080/evaluation&lt;/a&gt; for a remote existing installation) for browsing an on-line documentation with the capability to execute the API methods. In the following, the API methods of the &lt;i&gt;Conceptual Analytics Service&lt;/i&gt; are analysed below:&lt;/p&gt; &lt;a name="evaluateKPI"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;evaluateKPI&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to produce current and historical measurements for a certain KPI in the context of a specific BPaaS. As multi-tenancy is supported, the id of the broker needs to be specified in order to set the appropriate context for the method execution.&lt;/p&gt; &lt;pre&gt; POST ca/evaluateKPI/{brokerId} &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;brokerId&lt;/i&gt;&lt;/b&gt;: denotes the id of the broker for which the evaluation needs to be performed. It is a path parameter as it can be seen from the method relative URL (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;bundleId&lt;/i&gt;&lt;/b&gt;: denotes the id of the BPaaS bundle for which the evaluation needs to be performed (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;kpiName&lt;/i&gt;&lt;/b&gt;: denotes the name of the KPI to be evaluated (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;kpiPeriod&lt;/i&gt;&lt;/b&gt;: denotes the (history) period of the evaluation. If this parameter is specified, then a set of KPI evaluation values and not just one can be returned matching the respective period provided. The value should conform to String-based Java periods (e.g., &amp;quot;P1M&amp;quot; which declares a period of 1 month until now) (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;tenant&lt;/i&gt;&lt;/b&gt;: denotes the id of the tenant for which the KPI can be evaluated. In this way, the KPI is assessed only for this tenant and not across all tenants that have purchased the respective BPaaS (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;maxRows&lt;/i&gt;&lt;/b&gt;: denotes the maximum number of KPI values to return. Default value is 0 indicating that all possible values can be returned (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;404 -- The resource requested (i.e., the broker) was not found&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output can be in both json and xml formats. A sample for a json output is given below:&lt;/p&gt; &lt;pre&gt; { &amp;quot;results&amp;quot;: [ { &amp;quot;bundleId&amp;quot;: &amp;quot;SendInvoiceSaaSEurope&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;0.8010364041400798e0&amp;quot;, &amp;quot;instant&amp;quot;: &amp;quot;2016-01-27T11:43:38.588Z&amp;quot; } ] } &lt;/pre&gt; &lt;a name="evaluateMetric"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;evaluateMetric&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables the production of current and historic measurements for a KPI metric. It is similar to the &amp;quot;evaluateKPI&amp;quot; method but requires from the broker to appropriately specify the KPI metric in two different ways: (a) the metric and its context are passed as input parameters; (b) the name of an existing metric is provided:&lt;/p&gt; &lt;pre&gt; POST ca/evaluateMetric/{brokerId} &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;brokerId&lt;/i&gt;&lt;/b&gt;: denotes the id of the broker for which the evaluation needs to be performed. It is a path parameter as it can be seen from the method relative URL (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;metricName&lt;/i&gt;&lt;/b&gt;: denotes the name of the existing metric for which the evaluation needs to be performed. This parameter is optional as there is an alternative way of determining the KPI metric to be evaluated (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;metric&lt;/i&gt;&lt;/b&gt;: provides a CompositeMetric specification in OWL-Q for the metric to be evaluated. As a composite metric is associated to a specific metric context, the &amp;quot;metricContext&amp;quot; parameter does not need to be provided in this case (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;metricContext&lt;/i&gt;&lt;/b&gt;: provides the MetricContext specification in OWL-Q for the metric to be evaluated. This metric context includes scheduling and window information for the metric at hand. This parameter is optional and might be provided in case that we need to modify the context of an existing metric (whose name is specified in the &amp;quot;metricName&amp;quot; parameter) temporarily for the context of this evaluation (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;bundleId&lt;/i&gt;&lt;/b&gt;: denotes the id of the BPaaS bundle for which the evaluation needs to be performed (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;kpiPeriod&lt;/i&gt;&lt;/b&gt;: denotes the (history) period of the evaluation. If this parameter is specified, then a set of metric measurement values and not just one can be returned matching the respective period provided. The value should conform to String-based Java periods (e.g., &amp;quot;P1M&amp;quot; which declares a period of 1 month until now) (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;tenant&lt;/i&gt;&lt;/b&gt;: denotes the id of the tenant for which the identified metric can be evaluated. In this way, the metric measurements are only produced for this tenant and not across all tenants that have purchased the respective BPaaS (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;maxRows&lt;/i&gt;&lt;/b&gt;: denotes the maximum number of metric measurements values to return. Default value is 0 indicating that all possible values can be returned (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;404 -- The resource requested (i.e., the broker) was not found&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output can be in both json and xml formats. A sample for a json output is given below:&lt;/p&gt; &lt;pre&gt; { &amp;quot;results&amp;quot;: [ { &amp;quot;bundleId&amp;quot;: &amp;quot;SendInvoiceSaaSEurope&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;0.8010364041400798e0&amp;quot;, &amp;quot;instant&amp;quot;: &amp;quot;2016-01-27T11:43:38.588Z&amp;quot; } ] } &lt;/pre&gt; &lt;a name="kpiDrillDown"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;kpiDrillDown&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to perform a drill-down over a certain KPI for a specific BPaaS (again under the context of a specific broker). The drill-down results can be provided in a tree-based form in both JSON &amp;amp; XML formats, where each result contains information which is equivalent to that of the aforementioned methods:&lt;/p&gt; &lt;pre&gt; POST ca/kpiDrillDown/{brokerId} &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;brokerId&lt;/i&gt;&lt;/b&gt;: denotes the id of the broker for which the KPI drill-down needs to be performed. It is a path parameter as it can be seen from the method relative URL (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;bundleId&lt;/i&gt;&lt;/b&gt;: denotes the id of the BPaaS bundle for which the KPI drill-down needs to be performed (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;kpiName&lt;/i&gt;&lt;/b&gt;: denotes the name of the KPI for which the KPI drill-down needs to be performed (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;kpiPeriod&lt;/i&gt;&lt;/b&gt;: denotes the (history) period of the drill-down. If this parameter is specified, then a set of drill-down values and not just one can be returned matching the respective period provided. The value should conform to String-based Java periods (e.g., &amp;quot;P1M&amp;quot; which declares a period of 1 month until now) (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;tenant&lt;/i&gt;&lt;/b&gt;: denotes the id of the tenant for which the identified KPI needs to be drilled down. In this way, the respective KPI measurements and their drill-down are only produced for this tenant and not across all tenants that have purchased the respective BPaaS (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;maxRows&lt;/i&gt;&lt;/b&gt;: denotes the maximum number of drill-down values to return. Default value is 0 indicating that all possible values can be returned (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;404 -- The resource requested (i.e., the broker) was not found&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output can be in both json and xml formats. A sample for a json output is given below:&lt;/p&gt; &lt;pre&gt; { &amp;quot;results&amp;quot;: [ { &amp;quot;bundleId&amp;quot;: &amp;quot;SendInvoiceSaaSEurope&amp;quot;, &amp;quot;kpi&amp;quot;: &amp;quot;MeanKPIAvailability&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;0.8010364041400798e0&amp;quot;, &amp;quot;instant&amp;quot;: &amp;quot;2016-01-27T11:43:38.588Z&amp;quot;, &amp;quot;subRows&amp;quot;: [ { &amp;quot;bundleId&amp;quot;: &amp;quot;SendInvoiceSaaSEurope&amp;quot;, &amp;quot;kpi&amp;quot;: &amp;quot;MeanIaaSKPIAvailability&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;0.8526374638629035e0&amp;quot;, &amp;quot;instant&amp;quot;: &amp;quot;2016-01-27T11:43:37.466Z&amp;quot;, &amp;quot;subRows&amp;quot;: [] } ] } ] } &lt;/pre&gt; &lt;a name="kpiHistory"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;kpiHistory&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to query the historical measurements for a certain KPI in the context of a specific BPaaS. As multi-tenancy is supported, the id of the broker needs to be specified in order to set the appropriate context for the method execution. The results are equivalent to those returned by the &amp;quot;evaluateKPI&amp;quot; method. Please note that the content of the history fragment of the broker concerned needs to be populated via the &amp;quot;evaluateKPI&amp;quot; method in order to be able to obtain any result.&lt;/p&gt; &lt;pre&gt; POST ca/kpiHistory/{brokerId} &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;brokerId&lt;/i&gt;&lt;/b&gt;: denotes the id of the broker for which the historical query over the broker-specific historical fragment needs to be performed. It is a path parameter as it can be seen from the method relative URL (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;bundleId&lt;/i&gt;&lt;/b&gt;: denotes the id of the BPaaS bundle for which the historical query needs to be performed (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;kpiName&lt;/i&gt;&lt;/b&gt;: denotes the name of the KPI for which historical measurements need to be obtained (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;kpiPeriod&lt;/i&gt;&lt;/b&gt;: denotes the (history) period. If this parameter is specified, then a set of KPI historical measurement values and not just one can be returned matching the respective period provided. The value should conform to String-based Java periods (e.g., &amp;quot;P1M&amp;quot; which declares a period of 1 month until now) (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;tenant&lt;/i&gt;&lt;/b&gt;: denotes the id of the tenant for which the KPI history query can be evaluated. In this way, the required historical KPI values to be retrieved map only to this tenant and do not cross all tenants that have purchased the respective BPaaS (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;maxRows&lt;/i&gt;&lt;/b&gt;: denotes the maximum number of KPI historical measurement values to return. Default value is 0 indicating that all possible values can be returned (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;404 -- The resource requested (i.e., the broker) was not found&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output can be in both json and xml formats. A sample for a json output is given below:&lt;/p&gt; &lt;pre&gt; { &amp;quot;results&amp;quot;: [ { &amp;quot;bundleId&amp;quot;: &amp;quot;SendInvoiceSaaSEurope&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;0.8010364041400798e0&amp;quot;, &amp;quot;instant&amp;quot;: &amp;quot;2016-01-27T11:43:38.588Z&amp;quot; } ] } &lt;/pre&gt; &lt;a name="kpiQuery"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;kpiQuery&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to retrieve the list of KPIs that have been defined in the context of a specific broker. When the id of the BPaaS is also provided, then the KPI list is filtered to include only those KPIs that have been specified for the BPaaS.&lt;/p&gt; &lt;pre&gt; POST ca/kpiQuery/{brokerId} &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;brokerId&lt;/i&gt;&lt;/b&gt;: denotes the id of the broker for which the KPI query needs to be performed. It is a path parameter as it can be seen from the method relative URL (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;bundleId&lt;/i&gt;&lt;/b&gt;: denotes the id of the BPaaS bundle for which the defined KPIs need to be retrieved - as stated, if not given, then this maps to obtaining all the KPIs that have been defined for all BPaaSes of a certain broker (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;404 -- The resource requested (i.e., the broker) was not found&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output can be in both json and xml formats. A sample for a json output is given below:&lt;/p&gt; &lt;pre&gt; [ { &amp;quot;name&amp;quot;: &amp;quot;MeanIaaSAvailabilityKPI&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;constraintContext&amp;quot;: null, &amp;quot;obliged&amp;quot;: null, &amp;quot;firstArgument&amp;quot;: { &amp;quot;name&amp;quot;: &amp;quot;MeanIaaSAvailability&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;scale&amp;quot;: null, &amp;quot;monotonicity&amp;quot;: &amp;quot;POSITIVE&amp;quot;, &amp;quot;unit&amp;quot;: null, &amp;quot;valueType&amp;quot;: null, &amp;quot;aggregationType&amp;quot;: null, &amp;quot;measuredObject&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#IaaS1&amp;quot;, &amp;quot;attribute&amp;quot;: null, &amp;quot;level&amp;quot;: 2, &amp;quot;metricContext&amp;quot;: { &amp;quot;name&amp;quot;: &amp;quot;MC1&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;window&amp;quot;: null, &amp;quot;schedule&amp;quot;: { &amp;quot;name&amp;quot;: &amp;quot;OneDaySchedule&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;interval&amp;quot;: 1, &amp;quot;repetition&amp;quot;: 0, &amp;quot;scheduleType&amp;quot;: &amp;quot;FIXED_RATE&amp;quot;, &amp;quot;timeUnit&amp;quot;: { &amp;quot;name&amp;quot;: &amp;quot;Day&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;scale&amp;quot;: null, &amp;quot;monotonicity&amp;quot;: null, &amp;quot;quantity&amp;quot;: null, &amp;quot;quantityKind&amp;quot;: null, &amp;quot;unitType&amp;quot;: &amp;quot;SINGLE&amp;quot;, &amp;quot;unitMappings&amp;quot;: null, &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#Day&amp;quot; }, &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#OneDaySchedule&amp;quot; }, &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#MC1&amp;quot; }, &amp;quot;formula&amp;quot;: { &amp;quot;name&amp;quot;: &amp;quot;mean_iaas_availability&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;function&amp;quot;: &amp;quot;MEAN&amp;quot;, &amp;quot;functionURI&amp;quot;: null, &amp;quot;argumentList&amp;quot;: [ { &amp;quot;RawMetric&amp;quot;: { &amp;quot;name&amp;quot;: &amp;quot;IaaSAvailability&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;scale&amp;quot;: null, &amp;quot;monotonicity&amp;quot;: &amp;quot;POSITIVE&amp;quot;, &amp;quot;unit&amp;quot;: null, &amp;quot;valueType&amp;quot;: null, &amp;quot;aggregationType&amp;quot;: null, &amp;quot;measuredObject&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#IaaS1&amp;quot;, &amp;quot;attribute&amp;quot;: null, &amp;quot;level&amp;quot;: 1, &amp;quot;metricContext&amp;quot;: null, &amp;quot;sensor&amp;quot;: null, &amp;quot;measurementDirective&amp;quot;: null, &amp;quot;manual&amp;quot;: true, &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/metrics/IaaSAvailability&amp;quot; } } ], &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/formulas/mean_iaas_availability&amp;quot; }, &amp;quot;metricList&amp;quot;: [ { &amp;quot;RawMetric&amp;quot;: { &amp;quot;name&amp;quot;: &amp;quot;IaaSAvailability&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;scale&amp;quot;: null, &amp;quot;monotonicity&amp;quot;: &amp;quot;POSITIVE&amp;quot;, &amp;quot;unit&amp;quot;: null, &amp;quot;valueType&amp;quot;: null, &amp;quot;aggregationType&amp;quot;: null, &amp;quot;measuredObject&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#IaaS1&amp;quot;, &amp;quot;attribute&amp;quot;: null, &amp;quot;level&amp;quot;: 1, &amp;quot;metricContext&amp;quot;: null, &amp;quot;sensor&amp;quot;: null, &amp;quot;measurementDirective&amp;quot;: null, &amp;quot;manual&amp;quot;: true, &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/metrics/IaaSAvailability&amp;quot; } } ], &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/metrics/MeanIaaSAvailability&amp;quot; }, &amp;quot;comparisonOperator&amp;quot;: &amp;quot;GREATER_EQUAL_THAN&amp;quot;, &amp;quot;optimisationOperator&amp;quot;: null, &amp;quot;secondArgument&amp;quot;: 0.9, &amp;quot;warningThreshold&amp;quot;: 0.8, &amp;quot;validity&amp;quot;: null, &amp;quot;childKPIs&amp;quot;: null, &amp;quot;bundleURI&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation/bwcon#SendInvoice&amp;quot;, &amp;quot;qualifyingCondition&amp;quot;: false, &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/kpis/MeanIaaSAvailabilityKPI&amp;quot; } ] &lt;/pre&gt; &lt;a name="kpiTenantQuery"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;kpiTenantQuery&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to retrieve the list of tenants/customers for which there exist measurements for a certain KPI for the BPaaSes that they have purchased in the context of a specific broker. When the id of the BPaaS is also provided, then the tenant list is filtered to include only those tenants which have purchased the respective BPaaS.&lt;/p&gt; &lt;pre&gt; POST ca/kpiTenantQuery/{brokerId} &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;brokerId&lt;/i&gt;&lt;/b&gt;: denotes the id of the broker for which the KPI tenant query needs to be performed. It is a path parameter as it can be seen from the method relative URL (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;bundleId&lt;/i&gt;&lt;/b&gt;: denotes the id of the BPaaS bundle that must have been purchased by the tenants to be returned (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;kpiName&lt;/i&gt;&lt;/b&gt;: denotes the name of the KPI for which measurements should have been produced for the tenants to be returned (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;kpiPeriod&lt;/i&gt;&lt;/b&gt;: denotes the historical period for which KPI measurements should have been produced. The value should conform to String-based Java periods (e.g., &amp;quot;P1M&amp;quot; which declares a period of 1 month until now) (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;404 -- The resource requested (i.e., the broker) was not found&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;li&gt;500 -- Internal server error exception&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output can be in both json and xml formats. A sample for a json output is given below:&lt;/p&gt; &lt;pre&gt; [ { 3c1ab6ac-6a7e-4791-8c16-f8f6d400231c } ] &lt;/pre&gt; &lt;a name="ldQuery"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;ldQuery&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to pose an arbitrary query over the broker-specific fragment of the &lt;i&gt;Semantic KB&lt;/i&gt;. Such a query should only be posed by an expert on semantic technologies which should have an appropriate knowledge of SPARQL as well as of the Evaluation and OWL-Q (KPI Extension) ontologies that have been developed in the context of WP3 in CloudSocket.&lt;/p&gt; &lt;pre&gt; POST ca/ldQuery/{brokerId} &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;brokerId&lt;/i&gt;&lt;/b&gt;: denotes the id of the broker for which the KPI tenant query needs to be performed. It is a path parameter as it can be seen from the method relative URL (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;query&lt;/i&gt;&lt;/b&gt;: signifies the SPARQL query to be posed over the &lt;i&gt;Semantic KB&lt;/i&gt; (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;timeout&lt;/i&gt;&lt;/b&gt;: specifies the maximum amount time for waiting (in milliseconds) until a response can be obtained from the &lt;i&gt;Semantic KB&lt;/i&gt;. A value of 0, which is the default, denotes that the broker can wait indefinitely (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;maxRows&lt;/i&gt;&lt;/b&gt;: denotes the maximum number of rows to be produced by the query. A value of 0, which is the default, denotes that all rows should be returned. As SPARQL has the LIMIT construct, the broker should be careful of not specifying SPARQL queries including this construct that are evaluated via this method for which has a positive value for this parameter has been provided. In this latter case, the outcome would depend on the correlation between the values for the LIMIT construct and this parameter, i.e., if LIMIT is X and parameter value is Y, &amp;gt;= X, then X values will be returned. If Y &amp;lt; X, then Y values will be returned. In other words, the lowest from the values provided will prevail (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;404 -- The resource requested (i.e., the broker) was not found&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output can be in &amp;quot;application/sparql-results+xml&amp;quot;, &amp;quot;application/sparql-results+json&amp;quot;, &amp;quot;text/csv&amp;quot; and &amp;quot;text/tab-separated-values&amp;quot;. A sample for the &amp;quot;application/sparql-results+json&amp;quot; output is given below:&lt;/p&gt; &lt;pre&gt; { &amp;quot;head&amp;quot;: { &amp;quot;link&amp;quot;: [], &amp;quot;vars&amp;quot;: [&amp;quot;bpaas&amp;quot;, &amp;quot;id&amp;quot;] }, &amp;quot;results&amp;quot;: { &amp;quot;distinct&amp;quot;: false, &amp;quot;ordered&amp;quot;: true, &amp;quot;bindings&amp;quot;: [ { &amp;quot;bpaas&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;uri&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#BPaaS_bwcon_SendInvoiceSaaSEurope&amp;quot; } , &amp;quot;id&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;typed-literal&amp;quot;, &amp;quot;datatype&amp;quot;: &amp;quot;http://www.w3.org/2001/XMLSchema#string&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;SendInvoiceSaaSEurope&amp;quot; }}, { &amp;quot;bpaas&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;uri&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#BPaaS_bwcon_SendInvoiceSaaSWorldwide&amp;quot; } , &amp;quot;id&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;typed-literal&amp;quot;, &amp;quot;datatype&amp;quot;: &amp;quot;http://www.w3.org/2001/XMLSchema#string&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;SendInvoiceSaaSWorldwide&amp;quot; }}, { &amp;quot;bpaas&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;uri&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#BPaaS_bwcon_SendInvoiceIaaSEurope&amp;quot; } , &amp;quot;id&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;typed-literal&amp;quot;, &amp;quot;datatype&amp;quot;: &amp;quot;http://www.w3.org/2001/XMLSchema#string&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;SendInvoiceIaaSEurope&amp;quot; }} ] } } &lt;/pre&gt; &lt;a name="rawMetricQuery"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;rawMetricQuery&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to obtain all the raw metrics that have been defined in OWL-Q for a certain broker. In case that a respective BPaaS is also determined, then the raw metric list is filtered to contain only those raw metrics that have been defined for this BPaaS. As has been already stated, this method is a utility one which enables the broker to construct KPI metric specifications out of those returned by this method in order to subsequently make evaluation queries for those KPI metrics via the &amp;quot;evaluateMetric&amp;quot; method and thus better explore the possible KPI metric space.&lt;/p&gt; &lt;pre&gt; POST ca/rawMetricQuery/{brokerId} &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;brokerId&lt;/i&gt;&lt;/b&gt;: denotes the id of the broker for which the raw metric query needs to be performed. It is a path parameter as it can be seen from the method relative URL (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;bundleId&lt;/i&gt;&lt;/b&gt;: denotes the id of the BPaaS bundle in order to restrain the raw metric list to be obtained to contain only those metrics that have been defined for this bundle (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;404 -- The resource requested (i.e., the broker) was not found&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output can be in XML or JSON form. A sample of an output in JSON form is given below:&lt;/p&gt; &lt;pre&gt; [ { &amp;quot;name&amp;quot;: &amp;quot;CycleTime&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;scale&amp;quot;: null, &amp;quot;monotonicity&amp;quot;: &amp;quot;NEGATIVE&amp;quot;, &amp;quot;unit&amp;quot;: null, &amp;quot;valueType&amp;quot;: null, &amp;quot;aggregationType&amp;quot;: null, &amp;quot;measuredObject&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#Workflow_SendInvoice&amp;quot;, &amp;quot;attribute&amp;quot;: null, &amp;quot;level&amp;quot;: 1, &amp;quot;metricContext&amp;quot;: null, &amp;quot;sensor&amp;quot;: null, &amp;quot;measurementDirective&amp;quot;: null, &amp;quot;manual&amp;quot;: true, &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/metrics/CycleTime&amp;quot; }, { &amp;quot;name&amp;quot;: &amp;quot;EmailNotSent&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;scale&amp;quot;: null, &amp;quot;monotonicity&amp;quot;: &amp;quot;NEGATIVE&amp;quot;, &amp;quot;unit&amp;quot;: null, &amp;quot;valueType&amp;quot;: null, &amp;quot;aggregationType&amp;quot;: null, &amp;quot;measuredObject&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#Workflow_SendInvoice&amp;quot;, &amp;quot;attribute&amp;quot;: null, &amp;quot;level&amp;quot;: 1, &amp;quot;metricContext&amp;quot;: null, &amp;quot;sensor&amp;quot;: null, &amp;quot;measurementDirective&amp;quot;: null, &amp;quot;manual&amp;quot;: true, &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/metrics/EmailNotSent&amp;quot; }, { &amp;quot;name&amp;quot;: &amp;quot;EmailSent&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;scale&amp;quot;: null, &amp;quot;monotonicity&amp;quot;: &amp;quot;POSITIVE&amp;quot;, &amp;quot;unit&amp;quot;: null, &amp;quot;valueType&amp;quot;: null, &amp;quot;aggregationType&amp;quot;: null, &amp;quot;measuredObject&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#Workflow_SendInvoice&amp;quot;, &amp;quot;attribute&amp;quot;: null, &amp;quot;level&amp;quot;: 1, &amp;quot;metricContext&amp;quot;: null, &amp;quot;sensor&amp;quot;: null, &amp;quot;measurementDirective&amp;quot;: null, &amp;quot;manual&amp;quot;: true, &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/metrics/EmailSent&amp;quot; }, { &amp;quot;name&amp;quot;: &amp;quot;SaaSAvailability&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;scale&amp;quot;: null, &amp;quot;monotonicity&amp;quot;: &amp;quot;POSITIVE&amp;quot;, &amp;quot;unit&amp;quot;: null, &amp;quot;valueType&amp;quot;: null, &amp;quot;aggregationType&amp;quot;: null, &amp;quot;measuredObject&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#ExternalSaaS1&amp;quot;, &amp;quot;attribute&amp;quot;: null, &amp;quot;level&amp;quot;: 1, &amp;quot;metricContext&amp;quot;: null, &amp;quot;sensor&amp;quot;: null, &amp;quot;measurementDirective&amp;quot;: null, &amp;quot;manual&amp;quot;: true, &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/metrics/SaaSAvailability&amp;quot; }, { &amp;quot;name&amp;quot;: &amp;quot;CustomerSatisfaction&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;scale&amp;quot;: null, &amp;quot;monotonicity&amp;quot;: &amp;quot;POSITIVE&amp;quot;, &amp;quot;unit&amp;quot;: null, &amp;quot;valueType&amp;quot;: null, &amp;quot;aggregationType&amp;quot;: null, &amp;quot;measuredObject&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#Workflow_SendInvoice&amp;quot;, &amp;quot;attribute&amp;quot;: null, &amp;quot;level&amp;quot;: 1, &amp;quot;metricContext&amp;quot;: null, &amp;quot;sensor&amp;quot;: null, &amp;quot;measurementDirective&amp;quot;: null, &amp;quot;manual&amp;quot;: true, &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/metrics/CustomerSatisfaction&amp;quot; }, { &amp;quot;name&amp;quot;: &amp;quot;IaaSAvailability&amp;quot;, &amp;quot;description&amp;quot;: null, &amp;quot;abbreviation&amp;quot;: null, &amp;quot;synonym&amp;quot;: null, &amp;quot;scale&amp;quot;: null, &amp;quot;monotonicity&amp;quot;: &amp;quot;POSITIVE&amp;quot;, &amp;quot;unit&amp;quot;: null, &amp;quot;valueType&amp;quot;: null, &amp;quot;aggregationType&amp;quot;: null, &amp;quot;measuredObject&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#IaaS1&amp;quot;, &amp;quot;attribute&amp;quot;: null, &amp;quot;level&amp;quot;: 1, &amp;quot;metricContext&amp;quot;: null, &amp;quot;sensor&amp;quot;: null, &amp;quot;measurementDirective&amp;quot;: null, &amp;quot;manual&amp;quot;: true, &amp;quot;uri&amp;quot;: &amp;quot;http://www.cloudsocket.eu/metrics/IaaSAvailability&amp;quot; } ] &lt;/pre&gt; &lt;a name="Handbook"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Handbook&lt;/span&gt;&lt;/h4&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-05-25T13:13:59Z</dc:date> </entry> <entry> <title>Harvesting Engine 5.5</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Harvesting+Engine" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Harvesting+Engine</id> <updated>2017-05-25T13:13:27Z</updated> <published>2017-05-25T13:13:27Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Summary"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Summary&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Component_responsible"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Component responsible&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Architecture_Design"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;Architecture Design&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Installation_Manual"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Installation Manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#Development"&gt;&lt;span class="tocnumber"&gt;4.1&lt;/span&gt; &lt;span class="toctext"&gt;Development&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Production"&gt;&lt;span class="tocnumber"&gt;4.2&lt;/span&gt; &lt;span class="toctext"&gt;Production&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Test_Cases"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;Test Cases&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#User_Manual"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;User Manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#Handbook"&gt;&lt;span class="tocnumber"&gt;6.1&lt;/span&gt; &lt;span class="toctext"&gt;Handbook&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Summary"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Summary&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The &lt;i&gt;Harvesting Engine&lt;/i&gt; is a composite component in the BPaaS Evaluation Environment which is dedicated to:(a) the collection of deployment, monitoring and registry information from the BPaaS Execution Environment and the Repository Manager; (b) the semantic transformation and linking of that information; (c) the storage of that information in the &lt;i&gt;Semantic KB&lt;/i&gt;.&lt;/p&gt; &lt;p&gt;While this component is independent of the analysis components in the BPaaS Evaluation Environment, it actually enables them as it provides the proper information via which the corresponding analysis can be performed. To this end, by also considering that the information to be collected does not need to be harvested very frequently in order not to overwhelm the environment, this component is run periodically in order to perform its harvesting, semantic linking and storage job in the form of a Java thread.&lt;/p&gt; &lt;p&gt;The &lt;i&gt;Harvesting Engine&lt;/i&gt; is the component which also enables multi-tenancy in the BPaaS Evaluation Environment. As the sole user of that environment is the CloudSocket broker, multi-tenancy is offered in the form of the capability to simultaneously handle multiple brokers. This is achieved by the careful storage of the harvested information into disjoint, broker-specific fragments in the &lt;i&gt;Semantic KB&lt;/i&gt; that only the corresponding broker can see and reason about. To this end, by knowing exactly which broker makes the respective analysis request, the corresponding analysis components in the BPaaS Evaluation Environment can focus their analysis only on the fragment attributed to the broker concerned.&lt;/p&gt; &lt;p&gt;The information harvesting is performed by invoking the REST APIs offered by corresponding components in the CloudSocket platform. As such, the information sources currently exploited span: (a) the Workflow Engine (for collecting workflow modelling, task-to-service deployment &amp;amp; instance-based information); (b) the Cloud Provider Engine (for collecting service-to-IaaS deployment &amp;amp; monitoring definition information); (c) the Monitoring Engine (for collecting produced monitoring information); (d) the Repository Manager (for collecting information from the Abstract Service, Concrete Service and Software Component Registries).&lt;/p&gt; &lt;p&gt;The collected information is semantically transformed and linked by conforming to the Evaluation and OWL-Q (KPI Extension) ontologies. This means that the information is triplified according to the schema of these ontologies by also handling the corresponding links between the rdf resources generated for cross-points between the two ontologies. Such linking enables to connect deployment and monitoring information in order to allow the posing of suitable KPI metric evaluation queries which aggregates measurements only for those BPaaS elements that are correlated with a certain deployment hierarchy.&lt;/p&gt; &lt;p&gt;This component is not easily replaceable as it is the glue point between BPaaS evaluation-related and many other CloudSocket components in other environments. As such, the internal logic of that component could be quite hard to reproduce unless there is a deep knowledge of all the components from which this component has to extract information. In addition, there is the need to possess a good level of expertise in semantic technologies to realise this component due to the requirement to structure and link the harvested information based on the two ontologies considered.&lt;/p&gt; &lt;p&gt;The following table indicates the details of the component.&lt;/p&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Type of ownership&lt;/b&gt;&lt;/td&gt; &lt;td&gt;Creation&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Original tool&lt;/b&gt;&lt;/td&gt; &lt;td&gt;New component developed in the context of this project&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Planned OS license&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="https://www.mozilla.org/en-US/MPL/2.0/"&gt;Mozilla Public Licence 2.0&lt;/a&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Reference community&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="https://www.adoxx.org/live/community"&gt;ADOxx Community&lt;/a&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;&lt;br /&gt; &lt;b&gt;Consist of&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Harvester (main orchestration component run in the form of a Java thread)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Depends on&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Semantic KB&lt;/li&gt; &lt;li&gt;Workflow Engine&lt;/li&gt; &lt;li&gt;Cloud Provider Engine&lt;/li&gt; &lt;li&gt;Monitoring Engine&lt;/li&gt; &lt;li&gt;Repository Manager (only the aforementioned registries which are directly accessed via their REST API)&lt;/li&gt; &lt;/ul&gt; &lt;a name="Component_responsible"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Component responsible&lt;/span&gt;&lt;/h3&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;th&gt;Developer&lt;/th&gt; &lt;th&gt;Email&lt;/th&gt; &lt;th&gt;Company&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Kyriakos Kritikos&lt;/td&gt; &lt;td&gt;kritikos@ics.forth.gr&lt;/td&gt; &lt;td&gt;FORTH&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Architecture_Design"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Architecture Design&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The &lt;i&gt;Harvesting Engine&lt;/i&gt; is coloured in purple in the overall BPaaS Evaluation Environment architecture depicted in the figure below. As it has been already stated, this is an independent component (inside the BPaaS Evaluation Environment) which only communicates with the &lt;i&gt;Semantic KB&lt;/i&gt; in order to store the information collected and semantically lifted.&lt;/p&gt; &lt;p&gt;The final, internal architecture of the Harvesting Engine, which is depicted below, comprises 9 main components:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;i&gt;Harvester&lt;/i&gt;: This is the main component that coordinates the harvesting of the information to be collected from the BPaaS Execution Environment and the Repository Manager. Such a harvesting follows a 3 step process: (a) first IaaS service &amp;amp; cloud information is collected from the Cloud Provider Engine; (b) then workflow, deployment and monitoring definition information is collected from the Workflow Engine and the Cloud Provider Engine; (c) finally, monitoring information is collected from the Monitoring Engine. The component also takes care of how to enforce multitenancy by appropriately managing the broker-specific fragments and populating them with either general, cross-broker information or information that pertains only to the broker concerned.&lt;/li&gt; &lt;li&gt;5 components are extraction components which collect information from different CloudSocket components by calling their REST APIs. These components include: (a) the &lt;i&gt;Deployment Extractor&lt;/i&gt; (deployment information collection); (b) the &lt;i&gt;WF Engine Extractor&lt;/i&gt; (workflow-related information extraction); (c) &lt;i&gt;Registry Extractor&lt;/i&gt; (registry information collection); (d) &lt;i&gt;Monitoring Extractor&lt;/i&gt; (monitoring information extraction); (e) &lt;i&gt;Marketplace Extractor&lt;/i&gt; (marketplace information collection -- not yet implemented).&lt;/li&gt; &lt;li&gt;&lt;i&gt;BPMN Parser&lt;/i&gt;: takes care of parsing the BPMN model of the BPaaS workflow that has been collected from the &lt;i&gt;WF Engine Extractor&lt;/i&gt; and of enforcing the triplification of the workflow-related information&lt;/li&gt; &lt;li&gt;&lt;i&gt;CAMEL Parser&lt;/i&gt;: this component extracts the CAMEL model of the BPaaS workflow in order to obtain component and component-to-VM/IaaS deployment information as well as is capable of transforming the monitoring and KPI definition part of CAMEL into an OWL-Q model which is stored in the &lt;i&gt;Semantic KB&lt;/i&gt;.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Triple Importer&lt;/i&gt;: this is the component which takes care of the triplification of the collected information, its semantic linking based on the schema of the two ontologies and the storage of this information in the &lt;i&gt;Semantic KB&lt;/i&gt;&lt;/li&gt; &lt;/ul&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:510px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;img alt="harvester.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=harvester.png" /&gt;&lt;br /&gt; &lt;b&gt;Architecture of the Harvesting Engine&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Installation_Manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Installation Manual&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The component has been implemented purely in java. It depends on other external components / frameworks like jersey (for making REST requests to the CloudSocket APIs) and sesame/rdf4j (for the semantic storage of the triplified information in the &lt;i&gt;Semantic KB&lt;/i&gt;. It also depends on an internal component developed in the context of this project, the &lt;i&gt;owl-q&lt;/i&gt; one which enables the parsing of OWL-Q models into domain-specific objects as well as their writing. The following figure explicates the sole artefact generated mapping to this component as well as its dependencies on other artefacts (at a coarse-grained level to simplify the figure).&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:710px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;img alt="harvester-artifacts.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=harvester-artifacts.png" /&gt;&lt;br /&gt; &lt;br /&gt; &lt;b&gt;Artifact dependencies for the Harvesting Engine.&lt;/b&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;&lt;br /&gt; Maven has been exploited as the main build automation tool, prescribing how the component/artefact can be built and its main dependencies. Such a tool facilitates the building and automatic generation of this artefact for the different CloudSocket environments (development and production) and their configuration. A complete description of how such artefact building and generation can be performed for the different environments is given in the installation manual below.&lt;/p&gt; &lt;a name="Development"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Development&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;Currently, the following requirements hold for this component:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Oracle's 1.7.x JDK or higher&lt;/li&gt; &lt;li&gt;Maven tool for code compilation and packaging&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The installation procedure to be followed is the one given below:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Download source code from &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/harvester/repository/archive.tar?ref=master"&gt;https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/harvester/repository/archive.tar?ref=master&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Unzip code with tar (or any other tool)&lt;/li&gt; &lt;li&gt;Go to the root directory of the installed code&lt;/li&gt; &lt;li&gt;Change the configuration file to provide the right connection information to all the information sources exploited&lt;/li&gt; &lt;li&gt;Run: &lt;pre&gt; mvn clean install &lt;/pre&gt; to compile the source code&lt;/li&gt; &lt;li&gt;Run: &lt;pre&gt; mvn exec:java -Deu.cloudsocket.configdir=. &lt;/pre&gt; to run the component as a Java thread which is configured by reading the &amp;quot;eu.cloudsocket.evaluation.dd.properties&amp;quot; configuration file from the current directory&lt;/li&gt; &lt;li&gt;As the component runs in command line mode, it is easy to check whether the component is running normally. In case that you need to examine the content that it generates, you should connect to the Triple Store of the &lt;i&gt;Semantic KB&lt;/i&gt; and pose some SPARQL queries to draw and inspect it. This can be more easily done when the Triple Store is immediately empty.&lt;/li&gt; &lt;/ol&gt; &lt;a name="Production"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Production&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;The same instructions as above hold for this component&lt;/p&gt; &lt;a name="Test_Cases"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Test Cases&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;As this component runs as a Java thread, it can be immediately inspected if it exhibits any bug (by, e.g., taking care of creating a log out of the printed output). In order to check also the content that it generates, a set of SPARQL queries can be posed over the Triple Store of the &lt;i&gt;Semantic KB&lt;/i&gt;. If this triple store is developed locally, then you can connect to the local Virtuoso (Triple) Server endpoint (at &lt;a class="externallink" rel="nofollow" href="http://localhost:8890/sparql"&gt;http://localhost:8890/sparql&lt;/a&gt;) and then pose the queries from there, especially as it exhibits a nice interface to run SPARQL queries and visualise their results. If you desire to exhibit an existing endpoint, you can direct your queries at: &lt;a class="externallink" rel="nofollow" href="http://134.60.64.222:8890/sparql"&gt;http://134.60.64.222:8890/sparql&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;The SPARQL queries, which act as test cases that can be posed and inspected if they produce a respective result, involve the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Get all BPaaS workflow tasks and their input and output parameters -- this query tests whether we can obtain correctly workflow information from the Workflow Engine and to correctly correlated it &lt;pre&gt; PREFIX eval: &amp;lt;http://www.cloudsocket.eu/evaluation#&amp;gt; SELECT ?name ?id1 ?id2 from &amp;lt;http://www.cloudsocket.eu/evaluation/bwcon&amp;gt; WHERE { ?t eval:name ?name. { ?t a eval:ServiceTask } UNION { ?t a eval:ScriptTask } UNION {?t a eval:UserTask} optional{ ?t eval:inputVariable ?v1. ?v1 eval:id ?id1. } optional{ ?t eval:outputVariable ?v2. ?v2 eval:id ?id2. } } &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Get user id as well as information about the roles assigned to the user (id, name and type) for the customers over all BPaaSes -- this query tests the ability of the &lt;i&gt;Harvesting Engine&lt;/i&gt; to collect customer-specific information in the context of a BPaaS (workflow). The users collected map to the customer organisation but the roles are defined in the context of BPaaS workflow execution and not in general for the organisation. This means that &lt;i&gt;Knowledge Worker&lt;/i&gt; can be a generic organisation role which would characterise a user responsible for the execution of user tasks in corresponding BPaaS workflow instances that is not currently captured but &amp;quot;accounting&amp;quot; can be a captured role which maps to a specific fragment of a BPaaS workflow denoting a person responsible for accounting-related tasks. &lt;pre&gt; PREFIX eval: &amp;lt;http://www.cloudsocket.eu/evaluation#&amp;gt; SELECT ?name ?rid ?rname ?rtype from &amp;lt;http://www.cloudsocket.eu/evaluation/bwcon&amp;gt; WHERE { ?u a eval:User; eval:name ?name; eval:role ?r1. ?r1 eval:id ?rid; eval:name ?rname; eval:type ?rtype. } &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Get allocation information for each BPaaS which includes the workflow allocated, the allocation itself, the allocated task, the name of the (external or internal) SaaS service realising the functionality of the task, and the name of the IaaS service on which an internal SaaS service is deployed -- this information enables to check whether information from the Workflow Engine and the registries of the Repository Manager can be appropriately harvested and correctly correlated. &lt;pre&gt; PREFIX eval: &amp;lt;http://www.cloudsocket.eu/evaluation#&amp;gt; SELECT ?bpaasId ?workflow ?alloc ?taskName ?serviceName ?iaasName from &amp;lt;http://www.cloudsocket.eu/evaluation/bwcon&amp;gt; WHERE { ?bpaas eval:allocation ?alloc; eval:id ?bpaasId; eval:workflow ?workflow. ?alloc eval:allocatedTask ?task; eval:selectedService ?service. ?task eval:name ?taskName. ?service eval:name ?serviceName. optional{ ?alloc eval:selectedIaaS ?iaas. ?iaas eval:name ?iaasName. } } &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Get information about all IaaS services -- this query tests whether we can obtain IaaS-related information from the Cloud Provider Engine &lt;pre&gt; PREFIX eval: &amp;lt;http://www.cloudsocket.eu/evaluation#&amp;gt; SELECT ?iaas ?name ?coreNumber ?memorySize ?storageSize from &amp;lt;http://www.cloudsocket.eu/evaluation/bwcon&amp;gt; WHERE { ?iaas a eval:IaaS; eval:name ?name; eval:coreNumber ?coreNumber; eval:memorySize ?memorySize; eval:storageSize ?storageSize. } &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Get information about all SaaS services -- This query tests whether we can successfully obtain and correlate SaaS-related information from the (Abstract/Concrete) Service and Software Component Registries of the Repository Manager &lt;pre&gt; PREFIX eval: &amp;lt;http://www.cloudsocket.eu/evaluation#&amp;gt; SELECT ?service ?serviceName ?serviceOid ?serviceEndpoint from &amp;lt;http://www.cloudsocket.eu/evaluation/bwcon&amp;gt; WHERE { ?service rdf:type ?type; eval:name ?serviceName; eval:registryId ?serviceOid; eval:endpoint ?serviceEndpoint. FILTER(?type IN (eval:ExternalSaaS, eval:ServiceComponent)) } &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Get information about the instances of a deployed workflow and its tasks -- This query tests whether we can retrieve instance-based information from the Workflow Engine and correctly link it to the deployed workflows and tasks already modelled. &lt;pre&gt; PREFIX eval: &amp;lt;http://www.cloudsocket.eu/evaluation#&amp;gt; SELECT ?depWF ?depTask ?wfInstance ?taskInstance from &amp;lt;http://www.cloudsocket.eu/evaluation/bwcon&amp;gt; WHERE { ?depWF eval:workflowInstance ?wfInstance; eval:deployedTask ?depTask. ?depTask eval:taskInstance ?taskInstance. } &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Get (not task-related) information about a workflow instance -- This query tests whether we can obtain workflow instance information from the Workflow Engine &lt;pre&gt; PREFIX eval: &amp;lt;http://www.cloudsocket.eu/evaluation#&amp;gt; SELECT ?wfInstance ?startTime ?endTime ?endState ?initiator from &amp;lt;http://www.cloudsocket.eu/evaluation/bwcon&amp;gt; WHERE { ?wfInstance rdf:type eval:WorkflowInstance; eval:startTime ?startTime; eval:endTime ?endTime; eval:endState ?endState; eval:initiator ?initiator. } &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;a name="User_Manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;User Manual&lt;/span&gt;&lt;/h3&gt; &lt;a name="Handbook"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Handbook&lt;/span&gt;&lt;/h4&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-05-25T13:13:27Z</dc:date> </entry> <entry> <title>Deployment Discovery Engine 1.7</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Deployment+Discovery+Engine" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Deployment+Discovery+Engine</id> <updated>2017-05-25T13:12:38Z</updated> <published>2017-05-25T13:12:38Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Summary"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Summary&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Component_responsible"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Component responsible&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Architecture_Design"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;Architecture Design&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Installation_Manual"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Installation Manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#Development"&gt;&lt;span class="tocnumber"&gt;4.1&lt;/span&gt; &lt;span class="toctext"&gt;Development&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Production"&gt;&lt;span class="tocnumber"&gt;4.2&lt;/span&gt; &lt;span class="toctext"&gt;Production&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Test_Cases"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;Test Cases&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#User_Manual"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;User Manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#API_Specification"&gt;&lt;span class="tocnumber"&gt;6.1&lt;/span&gt; &lt;span class="toctext"&gt;API Specification&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#deploymentDiscovery"&gt;&lt;span class="tocnumber"&gt;6.1.1&lt;/span&gt; &lt;span class="toctext"&gt;deploymentDiscovery&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Handbook"&gt;&lt;span class="tocnumber"&gt;6.2&lt;/span&gt; &lt;span class="toctext"&gt;Handbook&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Summary"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Summary&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The &lt;i&gt;Deployment Discovery Engine&lt;/i&gt; is a composite component in the BPaaS Evaluation Environment which is responsible for discovering best deployments for a BPaaS according to the deployment and measurement history of this and other similar or equivalent BPaaS to this BPaaS, as being stored in the &lt;i&gt;Semantic KB&lt;/i&gt;. This component is invoked by the &lt;i&gt;Hybrid Dashboard&lt;/i&gt; to execute this required type of BPaaS analysis and visualise the respective analysis results according to the best possible visualisation metaphor.&lt;/p&gt; &lt;p&gt;The discovery of best deployments currently relies on three main factors:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;i&gt;workflow equivalence/similarity&lt;/i&gt;: as an execution history of a BPaaS can be limited or non-existing as in the case of a new BPaaS, we need to find a way to explore the measurement and deployment history of other BPaaSes that are similar or equivalent to the current one. To this end, BPaaS similarity or equivalence needs to be formally defined and the means to achieve it realised. Our main way of addressing this was to rely on workflow similarity, i.e., compare the workflows of the BPaaSes concerned in order to infer their similarity. Workflow similarity, in turn, is mapped to task equivalence which is enforced by considering the task name. In other words, two workflows are equivalent if they include the same tasks -- we assume here that probably the structure of the workflow is similar although this might not be true in all possible cases. On the other hand, two workflows are similar if they share a certain percentage (75% currently but this can be configured) of equivalent tasks.&lt;/li&gt; &lt;li&gt;&lt;i&gt;evaluation of &amp;quot;best&amp;quot; deployment&lt;/i&gt;: by considering that each BPaaS might have its own KPIs that need to be respected, it can be impossible to use a certain set of KPIs that can be common among many BPaaSes to evaluate whether a certain deployment can be considered as &amp;quot;best&amp;quot; or not. In order to remedy for this, we attempt to abstract away from KPIs by considering the overall level of QoS which can be considered to be derived via a weighted sum approach over utility functions constructed for each specific KPI metric exploited. In this sense, via such a normalisation and aggregation, each deployment then maps to just one overall QoS value and then ranking can be performed to infer which deployment is the best.&lt;/li&gt; &lt;li&gt;&lt;i&gt;deployment selection&lt;/i&gt;: while it could be argued that each deployment of a BPaaS should be considered in the analysis, this can be quite risky as this might also map to taking into account deployments for which the KPIs have been violated. While this might not occur so frequently, it can still lead to economic loss for the broker and is thus subject for performing deployment filtering. This means that only deployments which have been successful in the past by not violating any KPI should be considered in the best deployment analysis. As such, the risk of violating a KPI would be the minimum possible while the probability of achieving a better or higher service level will be increased.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Based on the above analysis, there is no need for the user to provide a special input to this engine apart from providing the id of the BPaaS for which the analysis needs to be performed. In addition, the user can restrain the execution (measurement &amp;amp; deployment) history within a certain period with the rationale that possibly more recent periods might involve the execution of more optimised BPaaSes. The result of the best BPaaS deployment analysis takes the form of two tables which include: (a) the mapping of each service task to a certain SaaS (internal or external) and (b) the mapping of each internal SaaS to a certain IaaS. Currently, JSON is supported but in the future possibly DMN and/or CAMEL could also be included in the support list by also giving the user the opportunity to select the most appropriate form of the output (&lt;b&gt;to check&lt;/b&gt;).&lt;/p&gt; &lt;p&gt;As enabled as a feature by the &lt;a href="/wiki/Special:Node:330801/Harvesting_Engine" title="Harvesting Engine"&gt;Harvesting Engine&lt;/a&gt;, the &lt;i&gt;Deployment Discovery Engine&lt;/i&gt; does support multi-tenancy as it allows each broker to focus the analysis only on its own fragment in the &lt;i&gt;Semantic KB&lt;/i&gt;. For this reason, the best deployment functionality is encapsulated in the form of a REST API with a single method which does take as input the id of the broker for which the analysis has to be performed plus optionally the history period for this analysis.&lt;/p&gt; &lt;p&gt;The &lt;i&gt;Deployment Discovery Engine&lt;/i&gt; can be easily replaced by another component developed externally by an organisation outside the CloudSocket consortium. This is due to the fact that this component is not tightly coupled with any other internal component in the BPaaS Evaluation Environment. It just communicates with the &lt;i&gt;Semantic KB&lt;/i&gt; in order to retrieve all the necessary information for inferring workflow equivalence and producing the rank of successful deployments, while it exposes an API to the &lt;i&gt;Hybrid Business Dashboard&lt;/i&gt; in order to enable its functionality to be invoked. In this sense, any replacement component would just have to conform to that API as well as be able to draw the correct information from the content of the &lt;i&gt;Semantic KB&lt;/i&gt;.&lt;/p&gt; &lt;p&gt;The following table indicates the details of the component.&lt;/p&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Type of ownership&lt;/b&gt;&lt;/td&gt; &lt;td&gt;Creation&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Original tool&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="https://www.drools.org"&gt;Drools&lt;/a&gt; Knowledge Base Framework&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Planned OS license&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="https://www.mozilla.org/en-US/MPL/2.0/"&gt;Mozilla Public Licence 2.0&lt;/a&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Reference community&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="https://www.adoxx.org/live/community"&gt;ADOxx Community&lt;/a&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;&lt;br /&gt; &lt;b&gt;Consist of&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Deployment Discovery Service (REST API exposing the core functionality of this engine)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Depends on&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Semantic KB&lt;/li&gt; &lt;/ul&gt; &lt;a name="Component_responsible"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Component responsible&lt;/span&gt;&lt;/h3&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;th&gt;Developer&lt;/th&gt; &lt;th&gt;Email&lt;/th&gt; &lt;th&gt;Company&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Kyriakos Kritikos&lt;/td&gt; &lt;td&gt;kritikos@ics.forth.gr&lt;/td&gt; &lt;td&gt;FORTH&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Architecture_Design"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Architecture Design&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The &lt;i&gt;Process Mining Engine&lt;/i&gt; is is coloured in deep blue in the overall BPaaS Evaluation Environment architecture depicted in the figure below. As it can be seen, it is invoked by the &lt;i&gt;Business Management Tool&lt;/i&gt; in order to start the best deployment analysis. This invocation, in turn, leads to exploiting the content of the &lt;i&gt;Semantic KB&lt;/i&gt; at the Data Layer in order to retrieve the most suitable information needed to support this analysis.&lt;/p&gt; &lt;p&gt;The final, internal architecture of the &lt;i&gt;Deployment Discovery Engine&lt;/i&gt;, which is depicted below, comprises the following 5 main components:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;i&gt;Deployment Discovery Service&lt;/i&gt;: A REST service which encapsulates the functionality of the &lt;i&gt;Deployment Discovery Engine&lt;/i&gt; in the form of a REST API method. Internally, this service triggers the execution of the &lt;i&gt;Deployment Discovery Orchestrator&lt;/i&gt; upon each service request.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Deployment Discovery Orchestrator&lt;/i&gt;: it takes care of orchestrating the execution of the rest of the components in the architecture in order to support the satisfaction of the best deployment discovery request. For each such request, this component invokes the &lt;i&gt;Semantic Information Extractor&lt;/i&gt; to retrieve the most suitable information for the analysis from the &lt;i&gt;Semantic KB&lt;/i&gt; which is then inserted in the form of facts inside the &lt;i&gt;Knowledge Base&lt;/i&gt;. Then, the all rules of that &lt;i&gt;Knowledge Base&lt;/i&gt; are fired which might invoke both the &lt;i&gt;Semantic Information Extractor&lt;/i&gt; for the retrieval of additional information as well as the &lt;i&gt;Smart Service Discovery &amp;amp; Selection Tool&lt;/i&gt; for inferring equivalence facts between different BPaaS elements.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Semantic Information Extractor&lt;/i&gt;: this component is capable of forming SPARQL queries which are then issued over the &lt;i&gt;Semantic KB&lt;/i&gt;. It is also capable of transforming the query results into domain objects that can then be inserted inside the &lt;i&gt;Knowledge Base&lt;/i&gt;.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Knowledge Base&lt;/i&gt;/&lt;i&gt;KB&lt;/i&gt;: this component represents a normal knowledge base in which the rules for the best BPaaS deployment discovery are stored. This &lt;i&gt;KB&lt;/i&gt; also enables the generation of sessions via which facts can be stored and rules can be fired to operate over these facts.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Smart Service Discovery &amp;amp; Selection Tool&lt;/i&gt;: this component has been produced in the research WP of the CloudSocket project ( &lt;b&gt;provide link to the innovation shop&lt;/b&gt;). It enables the semantic functional and non-functional discovery of various kinds of services as well as the global selection of services in the context of a specific BPaaS workflow. It is mainly used in the &lt;i&gt;Deployment Discovery Engine&lt;/i&gt; in order to infer the equivalence between services ( &lt;b&gt;check if this is true or it can be considered as a future feature to implement&lt;/b&gt;.&lt;/li&gt; &lt;/ul&gt; &lt;pre&gt; &amp;nbsp; &lt;/pre&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:460px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="dep-disc.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=dep-disc.png" /&gt;&lt;br /&gt; &lt;b&gt;Architecture of the Deployment Discovery Engine&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Installation_Manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Installation Manual&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The component has been implemented purely in java. It depends on other external components / frameworks like Spring, swagger, jersey and sesame/rdf4j. The following figure explicates the sole artefact generated mapping to this component as well as its dependencies on other artefacts (at a coarse-grained level to simplify the figure).&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:710px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;img alt="pm-artifacts.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=pm-artifacts.png" /&gt;&lt;br /&gt; &lt;br /&gt; &lt;b&gt;Artifact dependencies for the Deployment Discovery Engine&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;Maven has been exploited as the main build automation tool, prescribing how the component/artefact can be built and its main dependencies. Such a tool facilitates the building and automatic generation of this artefact for the different CloudSocket environments (development and production) and their configuration. A complete description of how such artefact building and generation can be performed for the different environments is given in the installation manual below.&lt;/p&gt; &lt;a name="Development"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Development&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;Currently, the following requirements hold for this component:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Oracle's 1.7.x JDK or higher&lt;/li&gt; &lt;li&gt;Apache tomcat 1.7 or higher&lt;/li&gt; &lt;li&gt;Maven tool for code compilation and packaging&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The installation procedure to be followed is the one given below:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Download source code from &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/evaluation_dd/repository/archive.tar?ref=master"&gt;https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/evaluation_dd/repository/archive.tar?ref=master&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Unzip code with tar (or any other tool)&lt;/li&gt; &lt;li&gt;Go to the root directory of the installed code&lt;/li&gt; &lt;li&gt;Change the configuration file to provide the right access information for the Virtuoso Triple Store (&lt;a class="externallink" rel="nofollow" href="https://virtuoso.openlinksw.com/"&gt;https://virtuoso.openlinksw.com/&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Run: &lt;pre&gt; mvn clean install &lt;/pre&gt; and then: &lt;pre&gt; mvn war:war &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Move the war file to the webapps directory of tomcat and start tomcat, if not yet started&lt;/li&gt; &lt;li&gt;Test installation by entering in your browser the following URL: &lt;a class="externallink" rel="nofollow" href="http://localhost:8080/evaluation-dd/"&gt;http://localhost:8080/evaluation-dd/&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt; &lt;a name="Production"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Production&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;The same instructions as above hold for this component&lt;/p&gt; &lt;a name="Test_Cases"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Test Cases&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;You can run test cases directly from the URL (&lt;a class="externallink" rel="nofollow" href="http://localhost:8080/evaluation-dd"&gt;http://localhost:8080/evaluation-dd&lt;/a&gt; in your development environment) of the REST service due to the use of swagger (&lt;a class="externallink" rel="nofollow" href="http://swagger.io"&gt;http://swagger.io&lt;/a&gt;) which enables the execution of the API method exposed by exploiting user input provided in a form-based manner. The following test cases are envisioned:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Retrieve the best deployments for a BPaaS&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;This test case attempts to assess whether the core functionality of the &lt;i&gt;Deployment Discovery Engine&lt;/i&gt; is correctly delivered. In this respect, the broker should guarantee that there exist deployments for the required BPaaS to be analysed or for BPaaSes that are similar or equivalent to it and have been coupled with monitoring information (which could be done by exploring the content of the &lt;i&gt;Semantic KB&lt;/i&gt;). Once this check is done, then the respective testing of the best deployment discovery functionality can proceed according to the following user story (where the id of the BPaaS can be of course interchanged with the one for which the analysis can be really performed).&lt;/p&gt; &lt;p&gt;Suppose that the user desires to find the best deployments of the &amp;quot;SendInvoiceSaaSEurope&amp;quot; BPaaS. Then, he/she can browse the methods of the API and click on the one named as &amp;quot;deploymentDiscovery&amp;quot;. The following screenshot indicates the upper part of the description of the method when selected:&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:660px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="dd1.PNG" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=dd1.PNG" /&gt;&lt;br /&gt; &lt;b&gt;Swagger overview of the &amp;quot;deploymentDiscovery&amp;quot; method of the Deployment Discovery Service&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;Next, he/she can fill in the required input parameters, i.e., the name of the broker (&amp;quot;bwcon&amp;quot;), the id of the BPaaS bundle (&amp;quot;SendInvoiceSaaSEurope&amp;quot;) and optionally the analysis period. As he/she does require the whole execution history to be considered, the input to the &amp;quot;analysisPeriod&amp;quot; parameter is not given. Once the filling of the parameters is completed, then he/she can press the &amp;quot;Try it out!&amp;quot; button.&lt;/p&gt; &lt;p&gt;Finally, he/she will be able to see the respective curl command issued, the request URL, the corresponding results, as well as the response status and headers as indicated in the following figure:&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:660px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="dd2.PNG" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=dd2.PNG" /&gt;&lt;br /&gt; &lt;b&gt;Result of calling the deploymentDiscovery method of the Deployment Discovery Service&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="User_Manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;User Manual&lt;/span&gt;&lt;/h3&gt; &lt;a name="API_Specification"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;API Specification&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;The reader should refer to the Swagger-based API web page (&lt;a class="externallink" rel="nofollow" href="http://localhost:8080/evaluation-dd"&gt;http://localhost:8080/evaluation-dd&lt;/a&gt; for a local installation or &lt;a class="externallink" rel="nofollow" href="http://134.60.64.222:8080/evaluation-dd"&gt;http://134.60.64.222:8080/evaluation-dd&lt;/a&gt; for an existing remote installation) for browsing the API on-line documentation with the capability to execute the API methods. In the following, the API methods of the &lt;i&gt;Process Mining Service&lt;/i&gt; are analysed below:&lt;/p&gt; &lt;a name="deploymentDiscovery"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;deploymentDiscovery&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to execute the best deployment discovery functionality and retrieve back the corresponding results:&lt;/p&gt; &lt;pre&gt; POST dd/deploymentDiscovery/{brokerId} &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;brokerId&lt;/i&gt;&lt;/b&gt;: denotes the id of the broker for which the best deployment discovery needs to be performed. It is a path parameter as it can be seen from the method relative URL (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;bundleId&lt;/i&gt;&lt;/b&gt;: denotes the id of the BPaaS bundle for which the analysis needs to be performed (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;analysisPeriod&lt;/i&gt;&lt;/b&gt;: denotes the extent of the execution history from the current moment in the form of a Java period (a possible value, e.g., &amp;quot;P1M&amp;quot; would then declare a period of 1 month until now) (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;404 -- The resource requested (i.e., the broker) was not found&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output will be in either JSON or XML form for now. A sample of a JSON-based output is given below:&lt;/p&gt; &lt;pre&gt; &amp;lt;b&amp;gt; to include the description of the result here &amp;lt;/b&amp;gt; &lt;/pre&gt; &lt;a name="Handbook"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Handbook&lt;/span&gt;&lt;/h4&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-05-25T13:12:38Z</dc:date> </entry> <entry> <title>Semantic Knowledge Base 2.3</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Semantic+Knowledge+Base" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Semantic+Knowledge+Base</id> <updated>2017-05-25T13:11:45Z</updated> <published>2017-05-25T13:11:45Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Summary"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Summary&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Component_responsible"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Component responsible&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Architecture_Design"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;Architecture Design&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Installation_Manual"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Installation Manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#Development"&gt;&lt;span class="tocnumber"&gt;4.1&lt;/span&gt; &lt;span class="toctext"&gt;Development&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Production"&gt;&lt;span class="tocnumber"&gt;4.2&lt;/span&gt; &lt;span class="toctext"&gt;Production&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Test_Cases"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;Test Cases&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#User_Manual"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;User Manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#API_Specification"&gt;&lt;span class="tocnumber"&gt;6.1&lt;/span&gt; &lt;span class="toctext"&gt;API Specification&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#ldQuery"&gt;&lt;span class="tocnumber"&gt;6.1.1&lt;/span&gt; &lt;span class="toctext"&gt;ldQuery&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#ldExport"&gt;&lt;span class="tocnumber"&gt;6.1.2&lt;/span&gt; &lt;span class="toctext"&gt;ldExport&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#ldImport"&gt;&lt;span class="tocnumber"&gt;6.1.3&lt;/span&gt; &lt;span class="toctext"&gt;ldImport&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#importStatus"&gt;&lt;span class="tocnumber"&gt;6.1.4&lt;/span&gt; &lt;span class="toctext"&gt;importStatus&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#ldUpdate"&gt;&lt;span class="tocnumber"&gt;6.1.5&lt;/span&gt; &lt;span class="toctext"&gt;ldUpdate&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Handbook"&gt;&lt;span class="tocnumber"&gt;6.2&lt;/span&gt; &lt;span class="toctext"&gt;Handbook&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Summary"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Summary&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The &lt;i&gt;Semantic Knowledge Base&lt;/i&gt; (&lt;i&gt;Semantic KB&lt;/i&gt;) is a composite component in the BPaaS Evaluation Environment which is responsible for the storage and management of the semantic information collected by the &lt;a href="/wiki/Special:Node:330801/Harvesting_Engine" title="Harvesting Engine"&gt;Harvesting Engine&lt;/a&gt;. It represents a dependency point for most of the other components in the evaluation environment as all of these components need to interact with it in order to retrieve or store semantic information. The only components currently independent from the &lt;i&gt;Semantic KB&lt;/i&gt; are those at the upper level of the evaluation environment architecture, i.e., the &lt;i&gt;Hybrid Business Dashboard&lt;/i&gt; and the &lt;i&gt;Hybrid Business Management Tool&lt;/i&gt;. This is due to the fact that the &lt;i&gt;Semantic KB&lt;/i&gt; is not directly involved in the execution of a certain BPaaS analysis functionality.&lt;/p&gt; &lt;p&gt;This component has been realised in the form of a REST API which lies on top of an existing &lt;i&gt;Triple Store&lt;/i&gt; named as &lt;a class="externallink" rel="nofollow" href="https://virtuoso.openlinksw.com/"&gt;Virtuoso&lt;/a&gt;. This API offers typical semantic data management functionalities, such as querying, importing, exporting, insertion, updating, deletion. In addition, the use of a &lt;i&gt;Triple Store&lt;/i&gt; enables the exploration of other facilities that can be offered that are more triple-store-specific. However, this is not actually required as the REST API should be used instead which enables decoupling from any technical peculiarities of the corresponding triple store exploited thus enabling the future interchange of that triple store implementation with another one.&lt;/p&gt; &lt;p&gt;The main functionalities offered by the REST API can be summarised as follows:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;SPARQL query issuing -- main functionality that has been widely used by all analysis engines&lt;/li&gt; &lt;li&gt;semantic information importing -- various formats are supported for this but &lt;a class="externallink" rel="nofollow" href="https://www.w3.org/TR/turtle/"&gt;Turtle&lt;/a&gt; is the one mostly recommended for performance reasons&lt;/li&gt; &lt;li&gt;semantic information insertion/updating/deletion -- triples can be inserted, inserted or deleted at any time point by exploiting the &lt;a class="externallink" rel="nofollow" href="http://rdf4j.org"&gt;Sesame/rdf4j&lt;/a&gt; interface bridge of Virtuoso via issuing &lt;a class="externallink" rel="nofollow" href="https://www.w3.org/Submission/SPARQL-Update/"&gt;SPARUL&lt;/a&gt; statements&lt;/li&gt; &lt;li&gt;semantic information exporting -- semantic information exporting is also supported in different forms - similarly to the case of importing, Turtle is recommended also for file size reasons&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;It should be noted that for administration purposes, Virtuoso also offers the Virtuoso Conductor which is a web interface that enables to manage in a web-based manner your triple store implementation. This allows for the creation and deletion of whole graphs, the querying of the semantic information, the importing of such information and its updating. As such, it can be a complement to the API offered which can enable an administrator to intervene at any time point and browse, inspect and adjust the content of the Triple Store, if needed.&lt;/p&gt; &lt;p&gt;This component can be easily replaced by another component developed externally with respect to the CloudSocket organisation. The only requirement for such a replacement is that the same REST interface should be realised as it is currently exploited by many other components in the BPaaS Evaluation Environment architecture (including the &lt;a href="/wiki/Special:Node:330801/Harvesting_Engine" title="Harvesting Engine"&gt;Harvesting Engine&lt;/a&gt;, the &lt;a href="/wiki/Special:Node:330801/Process_Mining_Engine" title="Process Mining Engine"&gt;Process Mining Engine&lt;/a&gt;, the &lt;a href="/wiki/Special:Node:330801/Deployment_Discovery_Engine" title="Deployment Discovery Engine"&gt;Deployment Discovery Engine&lt;/a&gt; and the &lt;a href="/wiki/Special:Node:330801/Conceptual_Analytics_Engine" title="Conceptual Analytics Engine"&gt;Conceptual Analytics Engine&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;The following table indicates the details of the component.&lt;/p&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Type of ownership&lt;/b&gt;&lt;/td&gt; &lt;td&gt;Update&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Original tool&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="https://virtuoso.openlinksw.com/"&gt;Virtuoso&lt;/a&gt; Triple Store&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Planned OS license&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="https://www.mozilla.org/en-US/MPL/2.0/"&gt;Mozilla Public Licence 2.0&lt;/a&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Reference community&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="https://www.adoxx.org/live/community"&gt;ADOxx Community&lt;/a&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;&lt;br /&gt; &lt;b&gt;Consist of&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Semantic KB Service (REST API exposing the core functionality of the &lt;i&gt;Semantic KB&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Depends on&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;This component is entirely independent of the others in the BPaaS Evaluation Environment Architecture&lt;/li&gt; &lt;/ul&gt; &lt;a name="Component_responsible"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Component responsible&lt;/span&gt;&lt;/h3&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;th&gt;Developer&lt;/th&gt; &lt;th&gt;Email&lt;/th&gt; &lt;th&gt;Company&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Kyriakos Kritikos&lt;/td&gt; &lt;td&gt;kritikos@ics.forth.gr&lt;/td&gt; &lt;td&gt;FORTH&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Architecture_Design"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Architecture Design&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The &lt;i&gt;Semantic KB&lt;/i&gt; is coloured in orange in the overall BPaaS Evaluation Environment architecture depicted in the figure below. As it can be seen, it is invoked by all the engines involved in this environment.&lt;/p&gt; &lt;p&gt;The final, internal architecture of the &lt;i&gt;Semantic KB&lt;/i&gt;, which is depicted below, comprises the following 2 main components:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;i&gt;Semantic KB Service&lt;/i&gt;: A REST service which encapsulates the semantic data management functionality exposed by the &lt;i&gt;Semantic KB&lt;/i&gt; in the form of a set of REST API methods.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Triple Store&lt;/i&gt;: an internal triple store which enables the semantic data management functionality by providing the right facilities for its realisation. This maps to using the Sesame interface bridge in order to be able to exploit Sesame as the implementation of the &lt;i&gt;Semantic KB Service&lt;/i&gt; which can accordingly connect to the triple store in order to execute the semantic data management functionality requested.&lt;/li&gt; &lt;/ul&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:260px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="skb.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=skb.png" /&gt;&lt;br /&gt; &lt;b&gt;Architecture of the Semantic KB&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Installation_Manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Installation Manual&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The component has been implemented purely in java. It depends on other external components/frameworks like Spring, swagger, jersey and sesame/rdf4j. The following figure explicates the sole artefact generated mapping to this component as well as its dependencies on other artefacts (at a coarse-grained level to simplify the figure).&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:710px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;img alt="skb-artifacts.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=skb-artifacts.png" /&gt;&lt;br /&gt; &lt;br /&gt; &lt;b&gt;Artifact dependencies for the Semantic KB&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;Maven has been exploited as the main build automation tool, prescribing how the component/artefact can be built and its main dependencies. Such a tool facilitates the building and automatic generation of this artefact for the different CloudSocket environments (development and production) and their configuration. A complete description of how such artefact building and generation can be performed for the different environments is given in the installation manual below.&lt;/p&gt; &lt;a name="Development"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Development&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;Currently, the following requirements hold for this component:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Oracle's 1.7.x JDK or higher&lt;/li&gt; &lt;li&gt;Apache tomcat 1.7 or higher&lt;/li&gt; &lt;li&gt;Maven tool for code compilation and packaging&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The installation procedure to be followed is the one given below:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Download source code from &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/evaluation_skb/repository/archive.tar?ref=master"&gt;https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/evaluation_skb/repository/archive.tar?ref=master&lt;/a&gt; (&lt;b&gt;to be modified&lt;/b&gt;)&lt;/li&gt; &lt;li&gt;Unzip code with tar (or any other tool)&lt;/li&gt; &lt;li&gt;Go to the root directory of the installed code&lt;/li&gt; &lt;li&gt;Change the configuration file to provide the right access information for the Virtuoso Triple Store (&lt;a class="externallink" rel="nofollow" href="https://virtuoso.openlinksw.com/"&gt;https://virtuoso.openlinksw.com/&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Run: &lt;pre&gt; mvn clean install &lt;/pre&gt; and then: &lt;pre&gt; mvn war:war &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Move the war file to the webapps directory of tomcat and start tomcat, if not yet started&lt;/li&gt; &lt;li&gt;Test installation by entering in your browser the following URL: &lt;a class="externallink" rel="nofollow" href="http://localhost:8080/skb/"&gt;http://localhost:8080/skb/&lt;/a&gt; (&lt;b&gt;eventual endpoint&lt;/b&gt;)&lt;/li&gt; &lt;/ol&gt; &lt;a name="Production"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Production&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;The same instructions as above hold for this component&lt;/p&gt; &lt;a name="Test_Cases"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Test Cases&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;You can run test cases directly from the URL (&lt;a class="externallink" rel="nofollow" href="http://localhost:8080/skb"&gt;http://localhost:8080/skb&lt;/a&gt; in your development environment) of the REST service due to the use of swagger (&lt;a class="externallink" rel="nofollow" href="http://swagger.io"&gt;http://swagger.io&lt;/a&gt;) which enables the execution of the API method exposed by exploiting user input provided in a form-based manner.&lt;/p&gt; &lt;p&gt;The loading of the API can unveil that it is up and running but its correct functioning is the one that needs to be further tested. However, this correct functioning depends on the proper functioning of the Virtuoso Triple Store. In this sense, the tester should also attempt to connect to the virtuoso conductor by supplying the corresponding URL (&lt;a class="externallink" rel="nofollow" href="http://localost:8890"&gt;http://localost:8890&lt;/a&gt; for a local installation or &lt;a class="externallink" rel="nofollow" href="http://http://134.60.64.222:8890"&gt;http://http://134.60.64.222:8890&lt;/a&gt; for an existing remote installation). If this is successful, he/she can also check whether some functionality can be executed by, e.g., executing a simple SPARQL query. One all these steps are performed, the actual testing of the API can proceed.&lt;/p&gt; &lt;p&gt;The following two test cases are envisioned which map to user stories that actually involve a semantic/ontology expert (acting also as an administrator of the &lt;i&gt;Semantic KB&lt;/i&gt;). Such a user is required to be involved here due to the respective expertise and knowledge needed for correctly carrying out the testing cases. In principle, the broker should have employed such a user in order to take care the administration of the underlying triple store.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Linked Data Querying&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;This test case attempts to check whether the querying functionality of the API operates normally and returns correct results. Such results can also be compared to those returned by the native or the conductor interface of Virtuoso. Please note for such a comparison of the ordering can be different unless there are some elements in the corresponding query that impose a certain order of results presentation that has to be enforced. Please also take into account that this type of testing can also be used for checking if the harvesting and linking of semantic information is correct.&lt;/p&gt; &lt;p&gt;By relying on the latter observation, this test case attempts to run a specific test query of the &lt;a href="/wiki/Special:Node:330801/Harvesting_Engine" title="Harvesting Engine"&gt;Harvesting Engine&lt;/a&gt; in order to check the correctness of the harvesting and semantic linking. Thus, suppose that the user desires to run the first test query which attempts to retrieve all BPaaS workflow tasks and their input and output parameters. He/she can then browse the methods of the API and click on the one named as &amp;quot;ldQuery&amp;quot;. The following screenshot indicates the upper part of the description of the method when selected:&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:660px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="skb1.PNG" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=skb1.PNG" /&gt;&lt;br /&gt; &lt;b&gt;Swagger overview of the &amp;quot;ldQuery&amp;quot; method of the Semantic KB Service&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;Next, he/she can fill in the required input parameters, i.e., the URI of the graph mapping to the broker-specific fragment, the SPARQL (test) query itself, the timeout value and the max number of rows to be returned. As the user is not impatient, he/she does not provide a value for the &amp;quot;timeout&amp;quot; parameter and desires to obtain all results so lets the default value of the &amp;quot;maxRows&amp;quot; input parameter to apply. Once the filling of the parameters is completed, then he/she can press the &amp;quot;Try it out!&amp;quot; button.&lt;/p&gt; &lt;p&gt;Finally, he/she will be able to see the respective curl command issued, the request URL, the corresponding results, as well as the response status and headers as indicated in the following figure:&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:660px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="skb2.PNG" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=skb2.PNG" /&gt;&lt;br /&gt; &lt;b&gt;Result of calling the ldQuery method of the Semantic KB Service&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;ul&gt; &lt;li&gt;Graph Deletion&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;This test case attempts to check whether the updating functionality of the &lt;i&gt;Semantic KB Service&lt;/i&gt; works correctly. It maps to the usual situation within a deployment environment that the triple store administrator desires to remove the broker-specific graphs created to initiate again the harvesting and linking of deployment, monitoring and registry information after a bug fix. Such a task can be of course executed via the Virtuoso Conductor as it enables the user-intuitive browsing and management of all the graphs created but here we need to focus on the testing of the &lt;i&gt;Semantic KB Service&lt;/i&gt;. This means that an SPARUL statement needs to be executed via the &amp;quot;ldUpdate&amp;quot; method of this service in order to delete these graphs. The following user story applies to this test case.&lt;/p&gt; &lt;p&gt;Suppose that the user desires to delete the graphs of the sole broker currently serviced namely &amp;quot;bwcon&amp;quot;. To this end, he/she will first browse the methods of the API and click on the one named as &amp;quot;ldUpdate&amp;quot;. The following screenshot indicates the upper part of the description of the method when selected:&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:660px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="skb3.PNG" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=skb3.PNG" /&gt;&lt;br /&gt; &lt;b&gt;Swagger overview of the &amp;quot;ldUpdate&amp;quot; method of the Semantic KB Service&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;Next, he/she can fill in the required input parameters. In this case, only the SPARUL statement needs to be provided for the first parameter, the &amp;quot;update&amp;quot; one as the rest of the parameters do not need to be filled in with the value of &amp;quot;DROP &amp;lt;&lt;a class="externallink" rel="nofollow" href="http://www.cloudsocket.eu/evaluation/bwcon%3E"&gt;http://www.cloudsocket.eu/evaluation/bwcon&gt;&lt;/a&gt;; DROP &amp;lt;&lt;a class="externallink" rel="nofollow" href="http://www.cloudsocket.eu/evaluation/bwcon/kpis%3E"&gt;http://www.cloudsocket.eu/evaluation/bwcon/kpis&gt;&lt;/a&gt;; DROP &amp;lt;&lt;a class="externallink" rel="nofollow" href="http://www.cloudsocket.eu/evaluation/bwcon/history%3E"&gt;http://www.cloudsocket.eu/evaluation/bwcon/history&gt;&lt;/a&gt;&amp;quot; (these are the graphs mapping to the &amp;quot;bwcon&amp;quot; broker). Once the filling of the parameters is completed, then he/she can press the &amp;quot;Try it out!&amp;quot; button.&lt;/p&gt; &lt;p&gt;Finally, he/she will be able to see the respective curl command issued, the request URL, the corresponding results, as well as the response status and headers as indicated in the following figure:&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:660px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="skb3.PNG" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=skb3.PNG" /&gt;&lt;br /&gt; &lt;b&gt;Result of calling the ldQuery method of the Semantic KB Service&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="User_Manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;User Manual&lt;/span&gt;&lt;/h3&gt; &lt;a name="API_Specification"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;API Specification&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;The reader should refer to the Swagger-based API web page (&lt;a class="externallink" rel="nofollow" href="http://localhost:8080/skb"&gt;http://localhost:8080/skb&lt;/a&gt; for a local installation or &lt;a class="externallink" rel="nofollow" href="http://134.60.64.222:8080/skb"&gt;http://134.60.64.222:8080/skb&lt;/a&gt; for an existing remote installation) for browsing the API on-line documentation with the capability to execute the API methods. In the following, the API methods of the &lt;i&gt;Process Mining Service&lt;/i&gt; are analysed below:&lt;/p&gt; &lt;a name="ldQuery"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;ldQuery&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to run a SPARQL query over the underlying &lt;i&gt;Triple Store&lt;/i&gt;:&lt;/p&gt; &lt;pre&gt; POST skb/ldQuery &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;query&lt;/i&gt;&lt;/b&gt;: denotes the SPARQL query to be issued (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;graphURI&lt;/i&gt;&lt;/b&gt;: denotes the URI of the graph to be queried. This parameter is optional as the URI of the graph can be provided in the FROM clause of the query (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;timeout&lt;/i&gt;&lt;/b&gt;: denotes the maximum amount of time to wait until the query results can be received. It defaults to the value of 0 which means unlimited (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;maxRows&lt;/i&gt;&lt;/b&gt;: denotes the maximum number of query results to be returned. It defaults to the value of 0 which means all. This parameter is ignored if the query has the LIMIT SPARQL clause involved in it. This means that the query semantics is given priority over the semantics of this parameter (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;401 -- Access denied exception&lt;/li&gt; &lt;li&gt;404 -- The resource requested was not found&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output will be in various RDF forms (&amp;quot;application/sparql-results+xml&amp;quot;, &amp;quot;application/sparql-results+json&amp;quot;, &amp;quot;text/csv&amp;quot; and &amp;quot;text/tab-separated-values&amp;quot;). A sample of the JSON-based form for an output is given below:&lt;/p&gt; &lt;pre&gt; { &amp;quot;head&amp;quot;: { &amp;quot;link&amp;quot;: [], &amp;quot;vars&amp;quot;: [&amp;quot;bpaas&amp;quot;, &amp;quot;id&amp;quot;] }, &amp;quot;results&amp;quot;: { &amp;quot;distinct&amp;quot;: false, &amp;quot;ordered&amp;quot;: true, &amp;quot;bindings&amp;quot;: [ { &amp;quot;bpaas&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;uri&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#BPaaS_bwcon_SendInvoiceSaaSEurope&amp;quot; } , &amp;quot;id&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;typed-literal&amp;quot;, &amp;quot;datatype&amp;quot;: &amp;quot;http://www.w3.org/2001/XMLSchema#string&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;SendInvoiceSaaSEurope&amp;quot; }}, { &amp;quot;bpaas&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;uri&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#BPaaS_bwcon_SendInvoiceSaaSWorldwide&amp;quot; } , &amp;quot;id&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;typed-literal&amp;quot;, &amp;quot;datatype&amp;quot;: &amp;quot;http://www.w3.org/2001/XMLSchema#string&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;SendInvoiceSaaSWorldwide&amp;quot; }}, { &amp;quot;bpaas&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;uri&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;http://www.cloudsocket.eu/evaluation#BPaaS_bwcon_SendInvoiceIaaSEurope&amp;quot; } , &amp;quot;id&amp;quot;: { &amp;quot;type&amp;quot;: &amp;quot;typed-literal&amp;quot;, &amp;quot;datatype&amp;quot;: &amp;quot;http://www.w3.org/2001/XMLSchema#string&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;SendInvoiceIaaSEurope&amp;quot; }} ] } } &lt;/pre&gt; &lt;a name="ldExport"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;ldExport&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to export the contents of a graph or part of these contents in various RDF formats (RDF/XML, Turtle, CSV, etc.):&lt;/p&gt; &lt;pre&gt; POST skb/ldExport &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;graphURI&lt;/i&gt;&lt;/b&gt;: denotes the URI of the graph whose content should be exported. If this URI is not given, then the default graph in the &lt;i&gt;Triple Store&lt;/i&gt; is assumed (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;subjURI&lt;/i&gt;&lt;/b&gt;: denotes the URI of the subject resource to be exported. If this URI is given, then only statements containing this URI as subject are exported (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;predURI&lt;/i&gt;&lt;/b&gt;: denotes the URI of the predicate to be exported. If this URI is given, then only statements containing this predicate are exported (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;objURI&lt;/i&gt;&lt;/b&gt;: denotes the URI of the object resource to be exported. If this URI is given, then only statements containing this URI as object are exported (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;401 -- Access denied exception&lt;/li&gt; &lt;li&gt;404 -- The resource requested was not found&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;li&gt;500 -- An internal server error has occurred preventing the service from appropriately serving the request&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output will be in various RDF forms (RDF/XML, Turtle, NTriples, CSV, etc.). A sample of the Turtle form for an output is given below (produced by requesting to obtain only statements involving the &amp;lt;&lt;a class="externallink" rel="nofollow" href="http://www.cloudsocket.eu/evaluation#allocation"&gt;http://www.cloudsocket.eu/evaluation#allocation&lt;/a&gt; predicate for the bwcon broker):&lt;/p&gt; &lt;pre&gt; @prefix : &amp;lt;http://www.cloudsocket.eu/evaluation#&amp;gt; . :BPaaS_SendInvoice :allocation :Workflow_SendInvoice_Allocation2, :Workflow_SendInvoice_Allocation1. :BPaaS_ChristmasSending :allocation :Workflow_ChristmasSending_Allocation2, :Workflow_ChristmasSending_Allocation1. &lt;/pre&gt; &lt;a name="ldImport"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;ldImport&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to import a linked data file which can be either put inside the request body or can be downloaded from a specific URL given as input:&lt;/p&gt; &lt;pre&gt; POST skb/ldImport &lt;/pre&gt; &lt;p&gt;The expected input format is either &amp;quot;application/rdf+xml&amp;quot; or &amp;quot;text/rdf+n3&amp;quot; or &amp;quot;text/turtle&amp;quot; for the inline request while just query parameters are involved in the main body. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;url&lt;/i&gt;&lt;/b&gt;: denotes the URL from which the linked data content can be downloaded. It is optional as there is also the option to provide this content inline in the request (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;uri&lt;/i&gt;&lt;/b&gt;: denotes the URI of the graph that will be mapped to the imported content. Absence of this parameter signifies that the imported content will be inserted in the default graph of the &lt;i&gt;Triple Store&lt;/i&gt; (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;format&lt;/i&gt;&lt;/b&gt;: denotes the format of the content to be imported. Only required in case that this content is to be downloaded from the given URL (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;blocking&lt;/i&gt;&lt;/b&gt;: indicates whether the request should be blocked waiting for the importing to end or not. In the latter case, the method returns an id which can be used to query the status of the import by calling the &amp;quot;importStatus&amp;quot; method (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;401 -- Access denied exception&lt;/li&gt; &lt;li&gt;404 -- The resource requested was not found&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;li&gt;500 -- An internal server error has occurred preventing the service from appropriately serving the request&lt;/li&gt; &lt;li&gt;503 -- The service is not available&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output will be in either JSON or XML form. A sample of the JSON form for an output is given below (highlighting that a non-blocking request was issued for which the importing is currently running):&lt;/p&gt; &lt;pre&gt; { &amp;quot;importID&amp;quot;: &amp;quot;100&amp;quot;, &amp;quot;status&amp;quot;: &amp;quot;RUNNING&amp;quot; } &lt;/pre&gt; &lt;a name="importStatus"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;importStatus&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to obtain the status of an ongoing RDF import request:&lt;/p&gt; &lt;pre&gt; POST skb/importStatus &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;importId&lt;/i&gt;&lt;/b&gt;: denotes the importId of an ongoing import request which should have been returned when the &amp;quot;ldImport&amp;quot; method was called in a non-blocking way (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;401 -- Access denied exception&lt;/li&gt; &lt;li&gt;404 -- The resource requested was not found&lt;/li&gt; &lt;li&gt;500 -- An internal server error has occurred preventing the service from appropriately serving the request&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output will be in either JSON or XML form. A sample of the JSON form for an output is given below (actually almost the same as in the case of the &amp;quot;ldImport&amp;quot; method but now denoting a successful result):&lt;/p&gt; &lt;pre&gt; { &amp;quot;importID&amp;quot;: &amp;quot;100&amp;quot;, &amp;quot;status&amp;quot;: &amp;quot;FINISHED&amp;quot; } &lt;/pre&gt; &lt;a name="ldUpdate"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;ldUpdate&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to update the content of an existing graph in the &lt;i&gt;Triple Store&lt;/i&gt; by issuing a SPARUL statement:&lt;/p&gt; &lt;pre&gt; POST skb/ldUpdate &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;update&lt;/i&gt;&lt;/b&gt;: denotes the update statement in SPARUL (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;baseURI&lt;/i&gt;&lt;/b&gt;: denotes the base URI via which relative URI statements in the SPARUL query can be resolved (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;timeout&lt;/i&gt;&lt;/b&gt;: denotes the maximum amount of time that the broker can wait until the update is performed (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;maxRows&lt;/i&gt;&lt;/b&gt;: indicates the maximum number of rows that can be affected from the execution of the SPARUL statement (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;401 -- Access denied exception&lt;/li&gt; &lt;li&gt;500 -- An internal server error has occurred preventing the service from appropriately serving the request&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;A respective message is given in the response which indicates the successful outcome of the execution of the update statement:&lt;/p&gt; &lt;pre&gt; Update was performed successfully &lt;/pre&gt; &lt;a name="Handbook"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Handbook&lt;/span&gt;&lt;/h4&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-05-25T13:11:45Z</dc:date> </entry> <entry> <title>Process Mining Engine 2.9</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Process+Mining+Engine" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Process+Mining+Engine</id> <updated>2017-05-25T09:12:16Z</updated> <published>2017-05-25T09:12:16Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Summary"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Summary&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Component_responsible"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Component responsible&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Architecture_Design"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;Architecture Design&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Installation_Manual"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Installation Manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#Development"&gt;&lt;span class="tocnumber"&gt;4.1&lt;/span&gt; &lt;span class="toctext"&gt;Development&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Production"&gt;&lt;span class="tocnumber"&gt;4.2&lt;/span&gt; &lt;span class="toctext"&gt;Production&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Test_Cases"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;Test Cases&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#User_Manual"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;User Manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#API_Specification"&gt;&lt;span class="tocnumber"&gt;6.1&lt;/span&gt; &lt;span class="toctext"&gt;API Specification&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#pmAlgorithms"&gt;&lt;span class="tocnumber"&gt;6.1.1&lt;/span&gt; &lt;span class="toctext"&gt;pmAlgorithms&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#mine"&gt;&lt;span class="tocnumber"&gt;6.1.2&lt;/span&gt; &lt;span class="toctext"&gt;mine&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Handbook"&gt;&lt;span class="tocnumber"&gt;6.2&lt;/span&gt; &lt;span class="toctext"&gt;Handbook&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Summary"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Summary&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The &lt;i&gt;Process Mining Engine&lt;/i&gt; is a composite component in the BPaaS Evaluation Environment which is responsible for executing process mining algorithms over the execution history of a BPaaS stored in the &lt;i&gt;Semantic KB&lt;/i&gt;. This component is invoked by the &lt;i&gt;Hybrid Dashboard&lt;/i&gt; to execute this required type of BPaaS analysis and visualise the respective analysis results according to the best possible visualisation metaphor.&lt;/p&gt; &lt;p&gt;While various kinds of process mining algorithms exist, we have selected to re-use only one kind for the moment. This kind maps to the recreation of a process model from the process log. This kind is quite useful for the optimisation of the BPaaS modelling as it enables to check which paths in the BPaaS workflow model are frequently executed, which are scarcely executed and which are not at all. As such, this can signify an indication to the modeller that possibly the paths that are never followed do not need to be modelled anymore. Concerning the other kinds of process mining algorithms that we intended to support, which include decision and organisational mining, they were not integrated for some technical reasons mapping mainly to the lack of some required data that could be collected from particular information sources in the CloudSocket platform (see D3.6 for more details). On the other hand, we do support semantic process mining as we can exploit semantic annotations over tasks in order to improve the accuracy of the process mining algorithms currently exploited.&lt;/p&gt; &lt;p&gt;The process model re-creation algorithms that we exploit come from the &lt;a class="externallink" rel="nofollow" href="http://www.promtools.org"&gt;ProM&lt;/a&gt; process mining framework and constitute state-of-the-art algorithms. They are exploited as they are by appropriately creating a log from the &lt;i&gt;Semantic KB&lt;/i&gt; mapping to the execution history of a certain BPaaS (either solely coupled to a specific customer or across all customers of that BPaaS) and then passing that log as input to these algorithms. This log conforms to the &lt;a class="externallink" rel="nofollow" href="http://www.xes-standard.org/"&gt;XES&lt;/a&gt; standard. Depending on the broker choice, this log can be formed by including either the names of the BPaaS workflow tasks in the log entries or the names of the concepts which have been used to annotate these workflow tasks. Upon successful execution, the result of each algorithm is then transformed again by exploiting the facilities of the ProM framework into a file conforming to BPMN which is the de facto standard adopted by CloudSocket.&lt;/p&gt; &lt;p&gt;As enabled as a feature by the &lt;a href="/wiki/Special:Node:330801/Harvesting_Engine" title="Harvesting Engine"&gt;Harvesting Engine&lt;/a&gt;, the &lt;i&gt;Process Mining Engine&lt;/i&gt; does support multi-tenancy as it allows each broker to focus the analysis only on its own fragment in the &lt;i&gt;Semantic KB&lt;/i&gt;. The whole process mining functionality is encapsulated for that reason in the form of a REST API which does take as input the id of the broker for which the analysis has to be performed. Apart from the core process mining functionality, this REST API offers a utility function that lists all state-of-the-art process mining algorithms that can be exploited by the broker. In this sense, via the interaction with the &lt;i&gt;Hybrid Business Dashboard&lt;/i&gt;, the broker is listed with all these algorithms, he/she can select the one that is desired by him/her and then initiate its execution.&lt;/p&gt; &lt;p&gt;The &lt;i&gt;Process Mining Engine&lt;/i&gt; can be easily replaced by another component developed externally by an organisation outside the CloudSocket consortium. This is due to the fact that this component is not tightly coupled with any other internal component in the BPaaS Evaluation Environment. It just communicates with the &lt;i&gt;Semantic KB&lt;/i&gt; in order to retrieve the execution history of a certain BPaaS and exposes an API to the &lt;i&gt;Hybrid Business Dashboard&lt;/i&gt; in order to enable its functionality to be invoked. In this sense, any replacement component would just have to conform to that API as well as be able to draw the correct information from the content of the &lt;i&gt;Semantic KB&lt;/i&gt;.&lt;/p&gt; &lt;p&gt;The following table indicates the details of the component.&lt;/p&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Type of ownership&lt;/b&gt;&lt;/td&gt; &lt;td&gt;Creation&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Original tool&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="http://www.promtools.org"&gt;ProM&lt;/a&gt; Process Mining Framework&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Planned OS license&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="https://www.mozilla.org/en-US/MPL/2.0/"&gt;Mozilla Public Licence 2.0&lt;/a&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Reference community&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="https://www.adoxx.org/live/community"&gt;ADOxx Community&lt;/a&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;&lt;br /&gt; &lt;b&gt;Consist of&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Process Mining Service (REST API exposing the core functionality of this engine)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Depends on&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Semantic KB&lt;/li&gt; &lt;/ul&gt; &lt;a name="Component_responsible"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Component responsible&lt;/span&gt;&lt;/h3&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;th&gt;Developer&lt;/th&gt; &lt;th&gt;Email&lt;/th&gt; &lt;th&gt;Company&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Kyriakos Kritikos&lt;/td&gt; &lt;td&gt;kritikos@ics.forth.gr&lt;/td&gt; &lt;td&gt;FORTH&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Architecture_Design"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Architecture Design&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The &lt;i&gt;Process Mining Engine&lt;/i&gt; is is coloured in blue in the overall BPaaS Evaluation Environment architecture depicted in the figure below. As it can be seen, it is invoked by the &lt;i&gt;Business Management Tool&lt;/i&gt; in order to invoke the right state-of-the-art process mining algorithm. This invocation, in turn, leads to exploiting the content of the &lt;i&gt;Semantic KB&lt;/i&gt; at the Data Layer in order to support the creation of the log to be mined.&lt;/p&gt; &lt;p&gt;The final, internal architecture of the &lt;i&gt;Process Mining Engine&lt;/i&gt;, which is depicted below, comprises the following 5 main components:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;i&gt;Process Mining Service&lt;/i&gt;: A REST service which encapsulates the whole functionality of the &lt;i&gt;Process Mining Engine&lt;/i&gt; in the form of REST API methods. Each method invoked triggers the execution of the &lt;i&gt;Process Mining Orchestrator&lt;/i&gt;.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Process Mining Orchestrator&lt;/i&gt; takes care of orchestrating the execution of the rest of the components in the architecture in order to support the satisfaction of the process mining request. For each process mining request, this component first invokes the &lt;i&gt;Query Creator&lt;/i&gt; to create a SPARQL query which is then issued over the &lt;i&gt;Semantic KB&lt;/i&gt;. The query result is then used to invoke the &lt;i&gt;Log Creator&lt;/i&gt; in order to produce the required log which is exploited to execute the process mining algorithm selected from the &lt;i&gt;Process Mining Library&lt;/i&gt;. The mining result is then transformed into BPMN form by exploiting a certain transformation algorithm from the &lt;i&gt;Process Mining Library&lt;/i&gt; depending on the original form of the output supported by the executed process mining algorithm.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Query Creator&lt;/i&gt;: this component, depending on the broker input which designates the BPaaS to be mined and optionally: (a) the customer to which the analysis should be restrained, (b) the period of the execution history and (c) whether semantic mining is to be performed, dynamically creates the right SPARQL query which can be issued over the &lt;i&gt;Semantic KB&lt;/i&gt; in order to accurately obtain the right process log-oriented information to be used for the mining.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Log Creator&lt;/i&gt;: this component takes the result of the SPARQL query execution and creates a log out of it which conforms to the XES standard. Depending on whether normal or semantic process mining needs to be supported, either the BPaaS workflow task names or their annotations are used to populate each entry of the log.&lt;/li&gt; &lt;li&gt;&lt;i&gt;Process Mining Library&lt;/i&gt;: this library has been constructed by exploiting some state-of-the-art process mining algorithms from ProM as well as the needed transformation algorithms (e.g., from petri net to BPMN) from the same framework that guarantee the final production of a BPMN recreated process model. &amp;nbsp;&lt;/li&gt; &lt;/ul&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:460px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="pm.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=pm.png" /&gt;&lt;br /&gt; &lt;b&gt;Architecture of the Process Mining Engine&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Installation_Manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Installation Manual&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The component has been implemented purely in java. It depends on other external components / frameworks like ProM, OpenXES, Spring, swagger, jersey and sesame/open rdf. The following figure explicates the sole artefact generated mapping to this component as well as its dependencies on other artefacts (at a coarse-grained level to simplify the figure).&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:710px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;img alt="pm-artifacts.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=pm-artifacts.png" /&gt;&lt;br /&gt; &lt;br /&gt; &lt;b&gt;Artifact dependencies for the Process Mining Engine&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;Maven has been exploited as the main build automation tool, prescribing how the component/artefact can be built and its main dependencies. Such a tool facilitates the building and automatic generation of this artefact for the different CloudSocket environments (development and production) and their configuration. A complete description of how such artefact building and generation can be performed for the different environments is given in the installation manual below.&lt;/p&gt; &lt;a name="Development"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Development&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;Currently, the following requirements hold for this component:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Oracle's 1.7.x JDK or higher&lt;/li&gt; &lt;li&gt;Apache tomcat 1.7 or higher&lt;/li&gt; &lt;li&gt;Maven tool for code compilation and packaging&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The installation procedure to be followed is the one given below:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Download source code from &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/evaluation_pm/repository/archive.tar?ref=master"&gt;https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/evaluation_pm/repository/archive.tar?ref=master&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Unzip code with tar (or any other tool)&lt;/li&gt; &lt;li&gt;Go to the root directory of the installed code&lt;/li&gt; &lt;li&gt;Change the configuration file to provide the right access information for the Virtuoso Triple Store (&lt;a class="externallink" rel="nofollow" href="https://virtuoso.openlinksw.com/"&gt;https://virtuoso.openlinksw.com/&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;Run: &lt;pre&gt; mvn clean install &lt;/pre&gt; and then: &lt;pre&gt; mvn war:war &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Move the war file to the webapps directory of tomcat and start tomcat, if not yet started&lt;/li&gt; &lt;li&gt;Test installation by entering in your browser the following URL: &lt;a class="externallink" rel="nofollow" href="http://localhost:8080/evaluation-pm/"&gt;http://localhost:8080/evaluation-pm/&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt; &lt;a name="Production"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Production&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;The same instructions as above hold for this component&lt;/p&gt; &lt;a name="Test_Cases"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Test Cases&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;You can run test cases directly from the URL (&lt;a class="externallink" rel="nofollow" href="http://localhost:8080/evaluation-pm"&gt;http://localhost:8080/evaluation-pm&lt;/a&gt; in your development environment) of the REST service due to the use of swagger (&lt;a class="externallink" rel="nofollow" href="http://swagger.io"&gt;http://swagger.io&lt;/a&gt;) which enables the execution of the API method exposed by exploiting user input provided in a form-based manner. The following test cases are envisioned:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Obtain all state-of-the-art process mining algorithms supported&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;At first contact, a broker might desire to see which process mining algorithms can be exploited. Moreover, this can be a first type of basic testing that the service is not only up but is also running correctly. To this end, the broker will go to the endpoint URL of the &lt;i&gt;Process Mining Service&lt;/i&gt; and will click to expand the &lt;i&gt;pmAlgorithms&lt;/i&gt; method. Then he/she can just press the &amp;quot;Try it out!&amp;quot; button to see the corresponding result. The following screenshot shows both the swagger-based description of this API method and the corresponding result of its invocation.&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:660px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="pmAlgorithms.PNG" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=pmAlgorithms.PNG" /&gt;&lt;br /&gt; &lt;b&gt;Result of executing the pmAlgorithms method of the Process Mining Service&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;ul&gt; &lt;li&gt;Run a process mining algorithm&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;This test case attempts to assess whether the core functionality of the &lt;i&gt;Process Mining Engine&lt;/i&gt; is correctly delivered. In this respect, the broker should guarantee that the execution history of the BPaS to be examined already exists and has been stored in the &lt;i&gt;Semantic KB&lt;/i&gt;. Once this check is done, then the respective testing of the mining functionality can proceed according to the following user story (where the id of the BPaaS can be of course interchanged with the one for which the execution history does exist).&lt;/p&gt; &lt;p&gt;Suppose that the user desires to mine the execution history of the &amp;quot;SendInvoiceSaaSEurope&amp;quot; BPaaS. Then, he/she can browse the methods of the API and click on the one named as &amp;quot;mine&amp;quot;. The following screenshot indicates the upper part of the description of the method when selected:&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:660px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="mine1.PNG" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=mine1.PNG" /&gt;&lt;br /&gt; &lt;b&gt;Swagger overview of the mine method of the Process Mining Service&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;Next, he/she can fill in the required input parameters, i.e., the name of the broker (&amp;quot;bwcon&amp;quot;), the id of the BPaaS bundle (&amp;quot;SendInvoiceSaaSEurope&amp;quot;). As he/she does not need to restrain the mining over one tenant as well as requires the whole execution history to be considered, the rest of the parameters are not touched. One this is done, then he/she can press the &amp;quot;Try it out!&amp;quot; button.&lt;/p&gt; &lt;p&gt;Finally, he/she will be able to see the respective curl command issued, the request URL, the corresponding results, as well as the response status and headers as indicated in the following figure:&lt;/p&gt; &lt;table style="margin-left: auto; margin-right: auto; border: none; width:660px; border:1px solid; text-align:center"&gt; &lt;tr&gt; &lt;td&gt;&lt;img alt="mine2.PNG" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=mine2.PNG" /&gt;&lt;br /&gt; &lt;b&gt;Result of calling the mine method of the Process Mining Service&lt;/b&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="User_Manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;User Manual&lt;/span&gt;&lt;/h3&gt; &lt;a name="API_Specification"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;API Specification&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;The reader should refer to the Swagger-based API web page (&lt;a class="externallink" rel="nofollow" href="http://localhost:8080/evaluation-pm"&gt;http://localhost:8080/evaluation-pm&lt;/a&gt; for a local installation or &lt;a class="externallink" rel="nofollow" href="http://134.60.64.222:8080/evaluation-pm"&gt;http://134.60.64.222:8080/evaluation-pm&lt;/a&gt; for an existing remote installation) for browsing the API on-line documentation with the capability to execute the API methods. In the following, the API methods of the &lt;i&gt;Process Mining Service&lt;/i&gt; are analysed below:&lt;/p&gt; &lt;a name="pmAlgorithms"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;pmAlgorithms&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to obtain the list of the state-of-the-art process mining algoriths that can be executed by the &lt;i&gt;Process Mining Service&lt;/i&gt;. No input is required for executing this method.&lt;/p&gt; &lt;pre&gt; POST pm/pmAlgorithms &lt;/pre&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;li&gt;500 -- An internal server error has been generated&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output can be in both json and xml formats. A sample for a json output is given below:&lt;/p&gt; &lt;pre&gt; [ &amp;quot;HeuristicsMiner&amp;quot;, &amp;quot;HeuristicsCnetMiner&amp;quot;, &amp;quot;ILPMiner&amp;quot;, &amp;quot;InductiveMiner&amp;quot; ] &lt;/pre&gt; &lt;a name="mine"&gt;&lt;/a&gt;&lt;h5&gt;&lt;span&gt;mine&lt;/span&gt;&lt;/h5&gt; &lt;p&gt;This method enables to execute a certain state-of-the-art process mining algorithm (from those supported -- see previous method) over the execution history of a specific BPaaS:&lt;/p&gt; &lt;pre&gt; POST pm/mine/{brokerId} &lt;/pre&gt; &lt;p&gt;The expected input format is multipart/form-data. The following input parameters are expected:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;brokerId&lt;/i&gt;&lt;/b&gt;: denotes the id of the broker for which the mining needs to be performed. It is a path parameter as it can be seen from the method relative URL (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;bundleId&lt;/i&gt;&lt;/b&gt;: denotes the id of the BPaaS bundle for which the mining needs to be performed (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;minePeriod&lt;/i&gt;&lt;/b&gt;: denotes the extent of the execution history from the current moment in the form of a Java period (a possible value, e.g., &amp;quot;P1M&amp;quot; would then declare a period of 1 month until now) (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;tenant&lt;/i&gt;&lt;/b&gt;: denotes the id of the tenant/customer for which the mining can be performed. This will restrict the execution history to include only information pertaining to the instance(s) of the BPaaS at hand that have been purchased by this tenant (&lt;i&gt;optional&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;algorithm&lt;/i&gt;&lt;/b&gt;: denotes the name of the state-of-the-art algorithm to be used for the process mining. This name can be obtained by calling the previous method (&amp;quot;pmAlgorithms&amp;quot;) (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;li&gt;&lt;b&gt;&lt;i&gt;semantic&lt;/i&gt;&lt;/b&gt;: denotes whether semantic or normal process mining must be performed. The default value is false (favouring normal process mining) (&lt;i&gt;obligatory&lt;/i&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following response codes can be returned depending on whether the API method execution was successful or not:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;200 -- The method execution was successful&lt;/li&gt; &lt;li&gt;400 -- Wrong parameter values have been provided&lt;/li&gt; &lt;li&gt;404 -- The resource requested (i.e., the broker) was not found&lt;/li&gt; &lt;li&gt;406 -- The format requested for the method output is not supported&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The output will be strictly for now in BPMN form. A sample of such an output is given below:&lt;/p&gt; &lt;pre&gt; &amp;lt;b&amp;gt; to include the description of the BPMN process model here &amp;lt;/b&amp;gt; &lt;/pre&gt; &lt;a name="Handbook"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Handbook&lt;/span&gt;&lt;/h4&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-05-25T09:12:16Z</dc:date> </entry> <entry> <title>Monitoring Engine (InfluxDB Prototype) 1.0</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Monitoring+Engine+%28InfluxDB+Prototype%29" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Monitoring+Engine+%28InfluxDB+Prototype%29</id> <updated>2017-05-22T08:16:44Z</updated> <published>2017-05-22T08:16:44Z</published> <summary type="html">&lt;p&gt;TODO: add brief description according the D3.6 &lt;/p&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-05-22T08:16:44Z</dc:date> </entry> <entry> <title>Developer manual 1.4</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Developer+manual" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Developer+manual</id> <updated>2017-04-21T08:55:04Z</updated> <published>2017-04-21T08:55:04Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Configuration_of_development_environment"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Configuration of development environment&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Specific_fields"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Specific fields&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#How_to_create_specific_fields"&gt;&lt;span class="tocnumber"&gt;2.1&lt;/span&gt; &lt;span class="toctext"&gt;How to create specific fields&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#Create_the_specific_classes_for_this_field"&gt;&lt;span class="tocnumber"&gt;2.1.1&lt;/span&gt; &lt;span class="toctext"&gt;Create the specific classes for this field&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Include_the_attributes_of_the_beans_into_the_Spring_configuration_to_be_recognized_by_the_renderer."&gt;&lt;span class="tocnumber"&gt;2.1.2&lt;/span&gt; &lt;span class="toctext"&gt;Include the attributes of the beans into the Spring configuration to be recognized by the renderer.&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Add_the_new_type_field_in_the_BPMN_editor."&gt;&lt;span class="tocnumber"&gt;2.1.3&lt;/span&gt; &lt;span class="toctext"&gt;Add the new type field in the BPMN editor.&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Include_the_specific_styles_in_the_css_file."&gt;&lt;span class="tocnumber"&gt;2.1.4&lt;/span&gt; &lt;span class="toctext"&gt;Include the specific styles in the css file.&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Create_simple_workflow_to_see_the_new_field"&gt;&lt;span class="tocnumber"&gt;2.1.5&lt;/span&gt; &lt;span class="toctext"&gt;Create simple workflow to see the new field&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#How_to_introduce_and_modify_basic_fields"&gt;&lt;span class="tocnumber"&gt;2.2&lt;/span&gt; &lt;span class="toctext"&gt;How to introduce and modify basic fields&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Type_of_fields"&gt;&lt;span class="tocnumber"&gt;2.3&lt;/span&gt; &lt;span class="toctext"&gt;Type of fields&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Configuration_of_development_environment"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Configuration of development environment&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;To be completed&lt;/p&gt; &lt;a name="Specific_fields"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Specific fields&lt;/span&gt;&lt;/h2&gt; &lt;a name="How_to_create_specific_fields"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;How to create specific fields&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;When a new form field is needed to be included in a user task, and it is not available. You, as a developer, need to follow these steps in order to create it:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Create the specific classes for this field.&lt;/li&gt; &lt;li&gt;Include the classes in the Spring configuration to be injected automatically when the WFE generate the form on the fly.&lt;/li&gt; &lt;li&gt;Include the attributes of the beans into the Spring configuration to be recognized by the renderer.&lt;/li&gt; &lt;li&gt;Add the new type field in the BPMN editor.&lt;/li&gt; &lt;li&gt;Include the specific styles in the css file.&lt;/li&gt; &lt;li&gt;Create simple workflow to see the new field&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following sections describe these steps through the message text field example, which shows a non modifiable message box for the user.&lt;/p&gt; &lt;a name="Create_the_specific_classes_for_this_field"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Create the specific classes for this field&lt;/span&gt;&lt;/h4&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;Create the custom component to be included in the custom field.&lt;/b&gt; You can include here what you consider, since it will be rendered on the fly in the associated user task. &lt;pre&gt; package net.atos.yourbpm.form; import com.vaadin.ui.*; public class MessageTextCustomComponent extends CustomComponent { private static final long serialVersionUID = 1L; private Label message; private Label label; MessageTextCustomComponent() { messageTextCustomComponentBuild(&amp;quot;Message&amp;quot;, &amp;quot;&amp;quot;); } MessageTextCustomComponent(String vLabel, String vMessage) { messageTextCustomComponentBuild(vLabel, vMessage); } private void messageTextCustomComponentBuild(String vLabel, String vMessage){ VerticalLayout layoutV = new VerticalLayout(); layoutV.setStyleName(&amp;quot;messageTextField&amp;quot;); label = new Label(vLabel); label.setContentMode(Label.CONTENT_XHTML); label.setStyleName(&amp;quot;messageTextField_title&amp;quot;); message = new Label(vMessage); message.setContentMode(Label.CONTENT_XHTML); message.setStyleName(&amp;quot;messageTextField_message&amp;quot;); layoutV.addComponent(label); layoutV.addComponent(message); setCompositionRoot(layoutV); } public String getLabel() { return (String) label.getValue(); } public void setLabel(String value) { label.setValue(value);; } public String getMessage() { return (String) message.getValue(); } public void setMessage(String vMessage) { message.setValue(vMessage); } } &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;NOTE&lt;/b&gt;: remember to set the composition of the root through the method &amp;quot;setCompositionRoot(yourComposition)&amp;quot;. If you don't do it, you will receive and error indicating that the root is null when the engine is rendering the page in execution time (but for building time is correct).&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;Create the custom field to be included into the form associated to the user task.&lt;/b&gt; &lt;pre&gt; package net.atos.yourbpm.form; import org.vaadin.addon.customfield.CustomField; public class MessageTextField extends CustomField { private static final long serialVersionUID = 1L; private MessageTextCustomComponent messageTextCustomComponent; public MessageTextField() { messageTextCustomComponent = new MessageTextCustomComponent(); setCompositionRoot(messageTextCustomComponent); } public MessageTextField(String head, String message) { messageTextCustomComponent = new MessageTextCustomComponent(head, message); setCompositionRoot(messageTextCustomComponent); } @Override public Class&amp;lt;?&amp;gt; getType() { return String.class; } @Override public Object getValue() { return messageTextCustomComponent.getMessage(); } @Override public void setValue(Object value){ messageTextCustomComponent.setMessage((String) value); } public void setLabel(Object value){ messageTextCustomComponent.setLabel((String) value); } } &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;You have to include the MessageTextCustomComponent into your custom field as an attribute of the new field. Remember to include the new custom field to the root as you have done for the custom component (method &amp;quot;setCompositionRoot(messageTextCustomComponent)&amp;quot;). The engine will render all the components and it will need to have the main root (if not, an execution error will appear indicating that the root is null).&lt;/p&gt; &lt;p&gt;You also need to override the abstract methods of the CustomField Class:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;ul&gt; &lt;li&gt;public Class&amp;lt;?&amp;gt; getType()&lt;/li&gt; &lt;li&gt;public Object getValue()&lt;/li&gt; &lt;li&gt;public void setValue(Object value)&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;b&gt;Create the FormType&lt;/b&gt;, which is responsible to convert the value between the new field type and the Model: &lt;pre&gt; package net.atos.yourbpm.form; import org.activiti.engine.form.AbstractFormType; public class MessageTextFormType extends AbstractFormType { private static final long serialVersionUID = 1L; public static final String TYPE_NAME = &amp;quot;messageText&amp;quot;; public String getName() { return TYPE_NAME; } public Object convertFormValueToModelValue(String propertyValue) { return propertyValue; } public String convertModelValueToFormValue(Object modelValue) { if (modelValue == null) { return null; } return modelValue.toString(); } } &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;&lt;b&gt;Create the property renderer&lt;/b&gt;, which is responsible to include the new field into the user task: &lt;pre&gt; package net.atos.yourbpm.form; import org.activiti.engine.form.FormProperty; import org.activiti.explorer.ui.form.AbstractFormPropertyRenderer; import com.vaadin.ui.Field; public class MessageTextPropertyRenderer extends AbstractFormPropertyRenderer { private static final long serialVersionUID = 1L; public MessageTextPropertyRenderer() { super(MessageTextFormType.class); } public Field getPropertyField(FormProperty formProperty) { MessageTextField messagetextField = new MessageTextField(formProperty.getName(), formProperty.getValue()); return messagetextField; } } &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;a name="Include_the_attributes_of_the_beans_into_the_Spring_configuration_to_be_recognized_by_the_renderer."&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Include the attributes of the beans into the Spring configuration to be recognized by the renderer.&lt;/span&gt;&lt;/h4&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;Include the new field type into the activiti-custom-context.xml &lt;i&gt;for the bean &amp;quot;processEngineConfiguration&amp;quot; &lt;pre&gt; &amp;lt;bean id=&amp;quot;processEngineConfiguration&amp;quot; class=&amp;quot;org.activiti.spring.SpringProcessEngineConfiguration&amp;quot;&amp;gt; &amp;lt;property name=&amp;quot;dataSource&amp;quot; ref=&amp;quot;dataSource&amp;quot; /&amp;gt; &amp;lt;property name=&amp;quot;transactionManager&amp;quot; ref=&amp;quot;transactionManager&amp;quot; /&amp;gt; &amp;lt;property name=&amp;quot;databaseSchemaUpdate&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt; &amp;lt;property name=&amp;quot;jobExecutorActivate&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt; &amp;lt;property name=&amp;quot;enableDatabaseEventLogging&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt; &amp;lt;property name=&amp;quot;customFormTypes&amp;quot;&amp;gt; &amp;lt;list&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.form.UserFormType&amp;quot;/&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.form.ProcessDefinitionFormType&amp;quot;/&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.form.MonthFormType&amp;quot;/&amp;gt; &amp;lt;!-- YourBPM --&amp;gt; &amp;lt;bean class=&amp;quot;net.atos.yourbpm.form.TextAreaFormType&amp;quot;/&amp;gt; &amp;lt;bean class=&amp;quot;net.atos.yourbpm.form.RadioGroupFormType&amp;quot;/&amp;gt; &amp;lt;bean class=&amp;quot;net.atos.yourbpm.form.UploadFormType&amp;quot;/&amp;gt; &amp;lt;bean class=&amp;quot;net.atos.yourbpm.form.InvoiceItemsFormType&amp;quot;/&amp;gt; &amp;lt;bean class=&amp;quot;net.atos.yourbpm.form.MessageTextFormType&amp;quot;/&amp;gt; &amp;lt;/list&amp;gt; &amp;lt;/property&amp;gt; &amp;lt;/bean&amp;gt; &lt;/pre&gt;&lt;/i&gt;&lt;/b&gt;&lt;/li&gt; &lt;li&gt;&lt;b&gt;Include the new renderer into the activiti-ui-context.xml&lt;/b&gt; for the bean &amp;quot;formPropertyRendererManager&amp;quot; &lt;pre&gt; &amp;lt;!-- Custom form property renderers can be plugged in here --&amp;gt; &amp;lt;bean id=&amp;quot;formPropertyRendererManager&amp;quot; class=&amp;quot;org.activiti.explorer.ui.form.FormPropertyRendererManager&amp;quot; lazy-init=&amp;quot;true&amp;quot;&amp;gt; &amp;lt;!-- Default renderer --&amp;gt; &amp;lt;property name=&amp;quot;noTypePropertyRenderer&amp;quot;&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.ui.form.StringFormPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;/property&amp;gt; &amp;lt;!-- Renderers by property type --&amp;gt; &amp;lt;property name=&amp;quot;propertyRenderers&amp;quot;&amp;gt; &amp;lt;list&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.ui.form.StringFormPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.ui.form.EnumFormPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.ui.form.LongFormPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.ui.form.DoubleFormPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.ui.form.DateFormPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.ui.form.UserFormPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.ui.form.BooleanFormPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.ui.form.ProcessDefinitionFormPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;bean class=&amp;quot;org.activiti.explorer.ui.form.MonthFormPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;!--YourBPM--&amp;gt; &amp;lt;bean class=&amp;quot;net.atos.yourbpm.form.TextAreaFormPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;bean class=&amp;quot;net.atos.yourbpm.form.RadioGroupPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;bean class=&amp;quot;net.atos.yourbpm.form.UploadPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;bean class=&amp;quot;net.atos.yourbpm.form.InvoiceItemsPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;bean class=&amp;quot;net.atos.yourbpm.form.MessageTextPropertyRenderer&amp;quot; /&amp;gt; &amp;lt;/list&amp;gt; &amp;lt;/property&amp;gt; &amp;lt;/bean&amp;gt; &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;NOTE&lt;/b&gt;: If you are using the activiti rest module, it is necessary to add the field type in the activiti-custom-context.xml, since the engine parsers all possible attributes of the BPMN 2.0 file, so although it is not responsible to render the graphical user interface, we need to declare it in order to allow to deploy the BPMN 2.0 files that include the new field type.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;a name="Add_the_new_type_field_in_the_BPMN_editor."&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Add the new type field in the BPMN editor.&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;Now, you can used it in your BPMN2.0 files that you want to deploy. However we can include this new field in the user task during the design phase in order to simplify the creation of the new forms. Add the name &amp;quot;messageText&amp;quot; that you have associated in the Class MessageTextFormType --&amp;gt; &amp;quot;public static final String TYPE_NAME = &amp;quot;messageText&amp;quot;;&amp;quot;&amp;quot;&lt;/p&gt; &lt;p&gt;Add this &amp;quot;messageText&amp;quot; name into the html file --&amp;gt; /activiti-webapp-explorer2/src/main/webapp/editor-app/configuration/properties/form-properties-popup.html&lt;/p&gt; &lt;pre&gt; &amp;lt;div class=&amp;quot;form-group&amp;quot;&amp;gt; &amp;lt;label for=&amp;quot;typeField&amp;quot;&amp;gt;{{'PROPERTY.FORMPROPERTIES.TYPE' | translate}}&amp;lt;/label&amp;gt; &amp;lt;select id=&amp;quot;typeField&amp;quot; class=&amp;quot;form-control&amp;quot; ng-model=&amp;quot;selectedProperties[0].type&amp;quot; ng-change=&amp;quot;propertyTypeChanged()&amp;quot;&amp;gt; &amp;lt;option&amp;gt;string&amp;lt;/option&amp;gt; &amp;lt;option&amp;gt;long&amp;lt;/option&amp;gt; &amp;lt;option&amp;gt;boolean&amp;lt;/option&amp;gt; &amp;lt;option&amp;gt;date&amp;lt;/option&amp;gt; &amp;lt;option&amp;gt;enum&amp;lt;/option&amp;gt; &amp;lt;!-YourBPM -&amp;gt; &amp;lt;option&amp;gt;textArea&amp;lt;/option&amp;gt; &amp;lt;option&amp;gt;upload&amp;lt;/option&amp;gt; &amp;lt;option&amp;gt;radioGroup&amp;lt;/option&amp;gt; &amp;lt;option&amp;gt;invoiceItems&amp;lt;/option&amp;gt; &amp;lt;option&amp;gt;messageText&amp;lt;/option&amp;gt; &amp;lt;/select&amp;gt; &amp;lt;/div&amp;gt; &lt;/pre&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;a name="Include_the_specific_styles_in_the_css_file."&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Include the specific styles in the css file.&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;Although the Vaadin framework abstract the GUI layer (html, javacript...), it is recommended not to include the styles into the own java classes for the different graphical user interface representation. Hence, in order to decouple the layers, you can associate different styles that you will be able to modify directly through the css file. For example, we have associated different styles for the message box:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Box of the message --&amp;gt; messageTextField&lt;/li&gt; &lt;li&gt;Title of the message --&amp;gt; messageTextField_title&lt;/li&gt; &lt;li&gt;Body of the message --&amp;gt; messageTextField_message&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;You only need to include in the style.css file (/activiti-webapp-explorer2/src/main/webapp/VAADIN/themes/activiti/styles.css) the styles that you want to applied for your application.&lt;/p&gt; &lt;pre&gt; .messageTextField { background-image: none; height: auto; width: 100%; background-color: #cae2f5; padding-top: 5px; padding-left: 10px; } .messageTextField_title { font-family: 'Open Sans Condensed', sans-serif; font-size: 15px; color: #333; font-weight: bold; } .messageTextField_message { color: #333; font-family: 'Muli', sans-serif; margin-bottom: 12px; } &lt;/pre&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;a name="Create_simple_workflow_to_see_the_new_field"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Create simple workflow to see the new field&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;Enter in the design editor and create a simple workflow like this one:&lt;/p&gt; &lt;p&gt;&lt;img alt="workflowExampleMessageField.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=workflowExampleMessageField.png" /&gt;&lt;/p&gt; &lt;p&gt;Figure: simple workflow to test the specific field.&lt;/p&gt; &lt;p&gt;You can associate a field with the new type&lt;/p&gt; &lt;p&gt;&lt;img alt="messageTextInUserTask.jpg" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=messageTextInUserTask.jpg" /&gt;&lt;/p&gt; &lt;p&gt;Figure: assign the new field in the user task.&lt;/p&gt; &lt;p&gt;&lt;br /&gt; You will obtain the BPMN2.0 in order to deploy it:&lt;/p&gt; &lt;pre&gt; &amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt; &amp;lt;definitions xmlns=&amp;quot;http://www.omg.org/spec/BPMN/20100524/MODEL&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:activiti=&amp;quot;http://activiti.org/bpmn&amp;quot; xmlns:bpmndi=&amp;quot;http://www.omg.org/spec/BPMN/20100524/DI&amp;quot; xmlns:omgdc=&amp;quot;http://www.omg.org/spec/DD/20100524/DC&amp;quot; xmlns:omgdi=&amp;quot;http://www.omg.org/spec/DD/20100524/DI&amp;quot; typeLanguage=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; expressionLanguage=&amp;quot;http://www.w3.org/1999/XPath&amp;quot; targetNamespace=&amp;quot;http://www.activiti.org/processdef&amp;quot;&amp;gt; &amp;lt;process id=&amp;quot;Message_test&amp;quot; name=&amp;quot;Message test&amp;quot; isExecutable=&amp;quot;true&amp;quot;&amp;gt; &amp;lt;startEvent id=&amp;quot;sid-CD793B83-B45D-45D2-81C4-B4A9D85FE77B&amp;quot;/&amp;gt; &amp;lt;userTask id=&amp;quot;sid-3BC1FF99-E940-461F-8775-6DD41A21CDD6&amp;quot; name=&amp;quot;Message Test&amp;quot; activiti:assignee=&amp;quot;kermit&amp;quot;&amp;gt; &amp;lt;extensionElements&amp;gt; &amp;lt;activiti:formProperty id=&amp;quot;messageError&amp;quot; name=&amp;quot;Error Message&amp;quot; type=&amp;quot;messageText&amp;quot; expression=&amp;quot;The invoiceNinja service is not available&amp;quot; writable=&amp;quot;false&amp;quot;/&amp;gt; &amp;lt;/extensionElements&amp;gt; &amp;lt;/userTask&amp;gt; &amp;lt;endEvent id=&amp;quot;sid-A8AFB2A7-F8E5-449B-BDF8-22819398C337&amp;quot;/&amp;gt; &amp;lt;sequenceFlow id=&amp;quot;sid-887B7D01-CB82-4596-8AAA-AEB247003E33&amp;quot; sourceRef=&amp;quot;sid-CD793B83-B45D-45D2-81C4-B4A9D85FE77B&amp;quot; targetRef=&amp;quot;sid-3BC1FF99-E940-461F-8775-6DD41A21CDD6&amp;quot;/&amp;gt; &amp;lt;sequenceFlow id=&amp;quot;sid-2AF8F91C-C21C-46B5-BA5E-8AEB3D1CCFF3&amp;quot; sourceRef=&amp;quot;sid-3BC1FF99-E940-461F-8775-6DD41A21CDD6&amp;quot; targetRef=&amp;quot;sid-A8AFB2A7-F8E5-449B-BDF8-22819398C337&amp;quot;/&amp;gt; &amp;lt;/process&amp;gt; &amp;lt;bpmndi:BPMNDiagram id=&amp;quot;BPMNDiagram_test_para_Borrar&amp;quot;&amp;gt; &amp;lt;bpmndi:BPMNPlane bpmnElement=&amp;quot;test_para_Borrar&amp;quot; id=&amp;quot;BPMNPlane_test_para_Borrar&amp;quot;&amp;gt; &amp;lt;bpmndi:BPMNShape bpmnElement=&amp;quot;sid-CD793B83-B45D-45D2-81C4-B4A9D85FE77B&amp;quot; id=&amp;quot;BPMNShape_sid-CD793B83-B45D-45D2-81C4-B4A9D85FE77B&amp;quot;&amp;gt; &amp;lt;omgdc:Bounds height=&amp;quot;30.0&amp;quot; width=&amp;quot;30.0&amp;quot; x=&amp;quot;84.99998474121094&amp;quot; y=&amp;quot;167.99999237060547&amp;quot;/&amp;gt; &amp;lt;/bpmndi:BPMNShape&amp;gt; &amp;lt;bpmndi:BPMNShape bpmnElement=&amp;quot;sid-3BC1FF99-E940-461F-8775-6DD41A21CDD6&amp;quot; id=&amp;quot;BPMNShape_sid-3BC1FF99-E940-461F-8775-6DD41A21CDD6&amp;quot;&amp;gt; &amp;lt;omgdc:Bounds height=&amp;quot;80.0&amp;quot; width=&amp;quot;100.0&amp;quot; x=&amp;quot;300.0&amp;quot; y=&amp;quot;142.99999237060547&amp;quot;/&amp;gt; &amp;lt;/bpmndi:BPMNShape&amp;gt; &amp;lt;bpmndi:BPMNShape bpmnElement=&amp;quot;sid-A8AFB2A7-F8E5-449B-BDF8-22819398C337&amp;quot; id=&amp;quot;BPMNShape_sid-A8AFB2A7-F8E5-449B-BDF8-22819398C337&amp;quot;&amp;gt; &amp;lt;omgdc:Bounds height=&amp;quot;28.0&amp;quot; width=&amp;quot;28.0&amp;quot; x=&amp;quot;590.9999847412109&amp;quot; y=&amp;quot;168.99999237060547&amp;quot;/&amp;gt; &amp;lt;/bpmndi:BPMNShape&amp;gt; &amp;lt;bpmndi:BPMNEdge bpmnElement=&amp;quot;sid-2AF8F91C-C21C-46B5-BA5E-8AEB3D1CCFF3&amp;quot; id=&amp;quot;BPMNEdge_sid-2AF8F91C-C21C-46B5-BA5E-8AEB3D1CCFF3&amp;quot;&amp;gt; &amp;lt;omgdi:waypoint x=&amp;quot;400.0&amp;quot; y=&amp;quot;182.99999237060547&amp;quot;/&amp;gt; &amp;lt;omgdi:waypoint x=&amp;quot;590.9999847412109&amp;quot; y=&amp;quot;182.99999237060547&amp;quot;/&amp;gt; &amp;lt;/bpmndi:BPMNEdge&amp;gt; &amp;lt;bpmndi:BPMNEdge bpmnElement=&amp;quot;sid-887B7D01-CB82-4596-8AAA-AEB247003E33&amp;quot; id=&amp;quot;BPMNEdge_sid-887B7D01-CB82-4596-8AAA-AEB247003E33&amp;quot;&amp;gt; &amp;lt;omgdi:waypoint x=&amp;quot;114.99998474121094&amp;quot; y=&amp;quot;182.99999237060547&amp;quot;/&amp;gt; &amp;lt;omgdi:waypoint x=&amp;quot;300.0&amp;quot; y=&amp;quot;182.99999237060547&amp;quot;/&amp;gt; &amp;lt;/bpmndi:BPMNEdge&amp;gt; &amp;lt;/bpmndi:BPMNPlane&amp;gt; &amp;lt;/bpmndi:BPMNDiagram&amp;gt; &amp;lt;/definitions&amp;gt; &lt;/pre&gt; &lt;p&gt;&lt;br /&gt; When you execute this workflow, the result will be a message where the Name is the Title and the value of the message can be assigned directly as a String or through a variable. It is not the objective of this section detailing how to use variables, hence the example use directly the expression string in the form.&lt;/p&gt; &lt;p&gt;&lt;img alt="messageTextExample.jpg" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=messageTextExample.jpg" /&gt;&lt;/p&gt; &lt;p&gt;Figure: Final result for the specific field.&lt;/p&gt; &lt;a name="How_to_introduce_and_modify_basic_fields"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;How to introduce and modify basic fields&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;If you want to change the behaviour of an existing field cover by Vaadin, you don't need to create the custom field and component, since the field exists. Hence, you only need to jumps these steps, the rest of the steps are the same. For example you can review the TextArea and the RadioGroup fields included in the atos-form artifact.&lt;/p&gt; &lt;a name="Type_of_fields"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Type of fields&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;&lt;b&gt;The basic fields are included with the validations:&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;String Input&lt;/li&gt; &lt;li&gt;Numeric Input&lt;/li&gt; &lt;li&gt;Date Input&lt;/li&gt; &lt;li&gt;List of values&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;img alt="BasicFields.jpg" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=BasicFields.jpg" /&gt;&lt;/p&gt; &lt;p&gt;Figure: list of basic fields&lt;/p&gt; &lt;p&gt;&lt;br /&gt; &lt;b&gt;YourBPM includes also the following fields to be included in the user tasks.&lt;/b&gt; All of these types are built following the previous steps (you can see them in the 'atos-forms' artifact):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Text area&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Include the attribute &amp;lt;textarea&amp;gt; in the user task of your BPMN file. The following text area will appear in the form of your user task:&lt;/p&gt; &lt;p&gt;&lt;img alt="TextArea.jpg" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=TextArea.jpg" /&gt;&lt;/p&gt; &lt;p&gt;Figure: text area field&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Upload file&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Include the attribute &amp;lt;upload&amp;gt; in the user task of your BPMN file. The following upload component will appear in the form of your user task:&lt;/p&gt; &lt;p&gt;&lt;img alt="UploadImage.jpg" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=UploadImage.jpg" /&gt;&lt;/p&gt; &lt;p&gt;Figure: upload image field&lt;/p&gt; &lt;ul&gt; &lt;li&gt;RadioGroup&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Include the attribute &amp;lt;radiogroup&amp;gt; in the user task of your BPMN file. The following radio-group component will appear in the form of your user task:&lt;/p&gt; &lt;p&gt;&lt;img alt="RadioGroup.jpg" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=RadioGroup.jpg" /&gt;&lt;/p&gt; &lt;p&gt;Figure: radio-group field&lt;/p&gt; &lt;p&gt;The input is managed through a json message, for example&lt;/p&gt; &lt;pre&gt; { &amp;quot;1&amp;quot;:&amp;quot;Value 1&amp;quot;, &amp;quot;2&amp;quot;:&amp;quot;Value 2&amp;quot; } &lt;/pre&gt; &lt;p&gt;The result will be the selected row in the radio group.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Invoice Input&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Include the attribute &amp;lt;invoiceItems&amp;gt; in the user task of your BPMN file. The following radio-group component will appear in the form of your user task:&lt;/p&gt; &lt;p&gt;&lt;img alt="InvoiceItem1.jpg" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=InvoiceItem1.jpg" /&gt;&lt;/p&gt; &lt;p&gt;Figure: empty list of invoices&lt;/p&gt; &lt;p&gt;&lt;img alt="InvoiceItem2.jpg" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=InvoiceItem2.jpg" /&gt;&lt;/p&gt; &lt;p&gt;Figure: fill the invoice fields&lt;/p&gt; &lt;p&gt;&lt;img alt="InvoiceItem3.jpg" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=InvoiceItem3.jpg" /&gt;&lt;/p&gt; &lt;p&gt;Figure: inclusion of the new invoice row into the list&lt;/p&gt; &lt;p&gt;&lt;br /&gt; To populate the field you only need to create a json message, for example:&lt;/p&gt; &lt;pre&gt; [ { &amp;quot;id&amp;quot;:0, &amp;quot;notes&amp;quot;:&amp;quot;Product one&amp;quot;, &amp;quot;cost&amp;quot;:213.0, &amp;quot;qty&amp;quot;:2,&amp;quot;product_key&amp;quot;:&amp;quot;Product1&amp;quot; }, { &amp;quot;id&amp;quot;:0, &amp;quot;notes&amp;quot;:&amp;quot;Product two&amp;quot;, &amp;quot;cost&amp;quot;:234.0, &amp;quot;qty&amp;quot;:4, &amp;quot;product_key&amp;quot;:&amp;quot;Product 2&amp;quot; } ] &lt;/pre&gt; &lt;p&gt;You can modify all the rows what you want and the result will be a json message with your updating data.&lt;/p&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-04-21T08:55:04Z</dc:date> </entry> <entry> <title>Workflow Engine Component 2.9</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Workflow+Engine+Component" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Workflow+Engine+Component</id> <updated>2017-04-20T13:43:38Z</updated> <published>2017-04-20T13:43:38Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Summary"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Summary&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Component_responsible"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Component responsible&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Architecture_design"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;Architecture design&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Installation_manual"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Installation manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#Development"&gt;&lt;span class="tocnumber"&gt;4.1&lt;/span&gt; &lt;span class="toctext"&gt;Development&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Production"&gt;&lt;span class="tocnumber"&gt;4.2&lt;/span&gt; &lt;span class="toctext"&gt;Production&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Test_Cases"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;Test Cases&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#User_Manual"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;User Manual&lt;/span&gt;&lt;/a&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="#API_specification"&gt;&lt;span class="tocnumber"&gt;6.1&lt;/span&gt; &lt;span class="toctext"&gt;API specification&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#HandBook"&gt;&lt;span class="tocnumber"&gt;6.2&lt;/span&gt; &lt;span class="toctext"&gt;HandBook&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Summary"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Summary&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;It is responsible for managing the deployment, execution and management of the different workflow instances. It will be multi-tenant leading to executing a workflow instance on behalf of one organisation by also taking care of the corresponding workflow and organisation data level. This component will expose:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;A graphical user interface for interacting with the different actors involved in the lifecycle of a workflow&lt;/li&gt; &lt;li&gt;A REST API interface allowing programmatic access to the different types of functionalities offered.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The main functionalities are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Deploy/redeploy a workflow in the workflow-engine, instantiate it and execute it.&lt;/li&gt; &lt;li&gt;Manage and follow the workflow instances, according to the workflow description in BPMN.&lt;/li&gt; &lt;li&gt;Interact with manual tasks of the workflow.&lt;/li&gt; &lt;li&gt;Manage the workflow engine environment.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Moreover, the executable workflows are designed by the integrated Editor Workflow based on the abstract workflows. Their design has to be aligned with the workflow engine, since the standard BPMN2.0 doesn&amp;rsquo;t reach the complete execution definition and it is allowed to extend it in order to cover the whole execution through this workflow definition. As the deployment will be executed on the cloud, it is mandatory to define dynamically the self-contained executable workflows, which are included in the BPaaS bundle, following these standards.&lt;/p&gt; &lt;p&gt;The main roles to interact with the functionalities are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;CloudSocket Customer, who wants to use the purchased BPaaS bundles, which has been deployed automatically in the cloud. The customer can interact via the use of different roles: i) Knowledge Worker is responsible for managing the manual task of the workflows; ii) Process Responsible (technical skills) is in charge of dealing with the workflow engine, managing the workflow instances and following their status.&lt;/li&gt; &lt;li&gt;Broker, who is responsible for the configuration of the Workflow Engine, for performing tasks on behalf of customers (e.g., workflow instances actions), for inspecting/monitoring the status of all workflows deployed and especially the status of respective SLAs.&lt;/li&gt; &lt;li&gt;Platform operator, who may be the broker itself, and is responsible for checking if the Workflow Engine works as expected.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Additionally, there is a role that covers the functionalities for creating the executable workflow, which will be included in the BPaaS bundle, during the design phase. Therefore, this role is not directly related with the execution phase, but the internal component is completely integrated with the whole component.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Workflow Designer, which is responsible to design the executable workflows using the executable workflow editor in order to include the necessary information to transform the abstract workflows (independent of the workflow engine) to the executable workflows (associated to a specific workflow engine).&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;All the actors will interact directly with the graphical user interface and the system will manage automatically the authorization of the appropriated functionalities (see the user guide in the Manual section).&lt;/p&gt; &lt;p&gt;The following table indicates the details of the component.&lt;/p&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Type of ownership&lt;/b&gt;&lt;/td&gt; &lt;td&gt;Extension&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Original tool&lt;/b&gt;&lt;/td&gt; &lt;td&gt;FIWARE and Fed4FIRE project&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Planned OS license&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="http://www.apache.org/licenses/LICENSE-2.0.html"&gt;Apache License Version 2.0&lt;/a&gt;.&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;Reference community&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="externallink" rel="nofollow" href="http://activiti.org/community.html"&gt;Activiti community&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;&lt;br /&gt; &lt;b&gt;Consist of&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Web UI of workflow Engine (Graphical User interface)&lt;/li&gt; &lt;li&gt;Workflow Engine (core functionalities)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Depends on&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Process Data Mediator Engine&lt;/li&gt; &lt;li&gt;IdM Marketplace&lt;/li&gt; &lt;/ul&gt; &lt;a name="Component_responsible"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Component responsible&lt;/span&gt;&lt;/h3&gt; &lt;table border="1" style="color:black; background-color:#ffffcc;" cellpadding="10"&gt; &lt;tr&gt; &lt;th&gt;Developer&lt;/th&gt; &lt;th&gt;Email&lt;/th&gt; &lt;th&gt;Company&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Roman Sosa Gonzalez&lt;/td&gt; &lt;td&gt;roman.sosa@atos.net&lt;/td&gt; &lt;td&gt;Atos&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Joaquin Iranzo&lt;/td&gt; &lt;td&gt;Joaquin.iranzo@atos.net&lt;/td&gt; &lt;td&gt;Atos&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;a name="Architecture_design"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Architecture design&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;&lt;img alt="GeneralArchitectureWorkflowEngine.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=GeneralArchitectureWorkflowEngine.png" /&gt;&lt;/p&gt; &lt;p&gt;Figure: General architecture for Workflow Engine&lt;/p&gt; &lt;p&gt;The general architecture of this component can be viewed by checking the components coloured in yellow, in above figure:&lt;/p&gt; &lt;p&gt;The below figure introduces in more detail the different modules of the Workflow Engine. The components are split into two main parts: i) one part is responsible for exposing the interfaces with the externals actors (other components, BPaaS Customers or Brokers); ii) the other is responsible for managing the business logic and the data layer.&lt;/p&gt; &lt;p&gt;The two layers allow decoupling the components between the presentation layer, which is directly related to the exposed interfaces (Graphical user interfaces and REST API) and the backend, which is responsible to provide all the functionalities and their persistence. Thus, the interface layer will focus on the look and feel or how to expose these interfaces; moreover it will manage the necessary calls to the backend layer, which will execute the actions.&lt;/p&gt; &lt;p&gt;&lt;img alt="WorkflowEngineComponentDiagram.jpg" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=WorkflowEngineComponentDiagram.jpg" /&gt;&lt;/p&gt; &lt;p&gt;Figure - Internal architecture for the Workflow Engine.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Front End layer&lt;/b&gt;:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;REST Workflow module is responsible for exposing all the functionalities of the Workflow Engine through a REST API, allowing other components to interact with the engine programmatically, without human interaction. The main interactions are with the Cloud provider Engine, which is responsible to orchestrate the deployment of the BPaaS bundle in the cloud environment, and the Adaptation Engine, which is responsible to modify the environments and the currently running workflow instance in order to cover the new conditions.&lt;/li&gt; &lt;li&gt;Editor Workflow module is responsible for the editing of the executable workflows at the design phase. A graphical user interface is used for editing, modifying and generating the executable workflows, while the involved actors are the technical designer, who can be contracted by the brokers to take care of the workflow design task. However, the module cannot interact directly with the customers and their companies; it is thus exploitable only by brokers. Nevertheless, this editor is necessary to align the definition of the concrete workflows with the technology adopted in the workflow engine in order to deploy and execute them correctly in the cloud environment.&lt;/li&gt; &lt;li&gt;Explorer Workflow module is responsible for exposing a graphical user interface in order to interact with the human actors, such as brokers and customers. Hence, through this exposed dashboard, the different actors can manage the complete lifecycle of the deployed workflows, allowing interacting with the platform in an easy way, increasing the quality of experience (QoE).&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Back End Layer&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Core Workflow Engine module is responsible for managing all the functionalities of the Workflow Engine. Hence, the complexity of the business logic of all these functionalities is delegated to this module and an interface is exposed to interact with them. It is also responsible to interact with the data layer and to persist the workflow, its instances and the rest of the entities.&lt;/li&gt; &lt;li&gt;Worflow Parser module is responsible for managing the functionalities related to workflow parsing, such as the introduction of the real endpoints of the software components and the automatic generation of the service task tags to invoke WS and RESTFul services.&lt;/li&gt; &lt;li&gt;Bind Proxy is a small module to facilitate the interaction with the database. It is responsible for managing the binding between service tasks and the associated services. It has been introduced to avoid using the Core Workflow Engine module as a proxy, to only connect with the database in order to manage the binding actions. In this manner, using this module, the Workflow Parser is decoupled from the Core Workflow Engine.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Data layer&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Workflow Data Base module is responsible for persisting all the data in order to support all the functionalities. The model definition is based on an entity-relationship schema to represent all the entities, including tenants, roles, workflows, instances, jobs&amp;hellip; It exposes a standard interface to connect with the data base; nevertheless it is not its responsibility to create an Object-relational mapping to interact with the entities such as JPA in java or SQLAlchemy in Python, since that is delegated to the Core_Workflow_Engine and the Bind_Proxy to provide it.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;All the components expose different types of interfaces in order to cover nonfunctional requirements, such as scalability, modularity and replaceability. Nevertheless, some of them are more coupled than others, since they work to provide features together.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The REST Workflow, Explorer Workflow and Core Workflow Engine components are working jointly in order to arrange the workflow execution. Therefore, it is possible to replace these components with implementations such as Camunda or BonitaSoft; and re-implementing the adaptation and extension developed in these components based on Activiti.&lt;/li&gt; &lt;li&gt;The Editor Workflow is partially independent of the base line workflow engine as its main duty is to create the executable workflow to be deployed in the specific engine, which might include concrete extensions on the standard BPMN. In this sense, this component could also be extended in order to work for other workflow engines. In addition, it could also be replaced by another workflow editing component which could be coupled to a specific workflow engine like Activiti or the one which totally replaces the agglomeration of the previously referred components in the previous bullet.&lt;/li&gt; &lt;li&gt;The Parser Worflow Manager and Bind Proxy have isolated functionalities and expose a Restful interface. Hence, it is feasible to substitute them by other components, if they maintain the exposed APIs.&lt;/li&gt; &lt;li&gt;Finally, the Workflow Engine use a persistence framework with support for custom SQL, stored procedures and advanced mappings, this allow to substitute the Workflow Data Base module by other relational databases as long as the new option follows the standard connectors, since this persistence framework creates an abstract layer between the entities and their persistence in the data base.&lt;/li&gt; &lt;/ul&gt; &lt;a name="Installation_manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Installation manual&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The component is developed in java based on Activiti 5.18; several frameworks are used such as Vaadin, Spring and mybatis. A MySQL database is used.&lt;/p&gt; &lt;p&gt;As a build automation tool, the components have used &lt;a class="externallink" rel="nofollow" href="https://maven.apache.org/"&gt;Maven&lt;/a&gt;, which describes how they are built, and their dependencies. This allows building and generating automatically the artifacts for the different environments (development and production) and their configuration for example with Eclipse. Besides, the use of this artifact will facilitate the continuous integration, which will be covered in Task T4.5 CloudSocket Integration and Consolidation.&lt;/p&gt; &lt;p&gt;The installation manual takes advantage of these tools, facilitating the installation at the different environments and describing the necessary steps to install the component and its modules. The following figure indicates the generated artefacts and their dependencies.&lt;/p&gt; &lt;p&gt;&lt;img alt="DeploymentDiagramWorkflowEngine.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=DeploymentDiagramWorkflowEngine.png" /&gt;&lt;/p&gt; &lt;p&gt;Figure - Artefacts of the Workflow Engine&lt;/p&gt; &lt;a name="Development"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Development&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;&lt;b&gt;Requirements&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Oracle JDK 1.7.x&lt;/li&gt; &lt;li&gt;Tomcat 7.x&lt;/li&gt; &lt;li&gt;&lt;a class="externallink" rel="nofollow" href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; tool for building applications.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Installation&lt;/b&gt; Download source code. The workflow engine comprises two projects:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Workflow Parser: &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/workflow-parser"&gt;https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/workflow-parser&lt;/a&gt;. &lt;ul&gt; &lt;li&gt;Components: &lt;ul&gt; &lt;li&gt;parser-service is the war package that exposes the API web (WS/REST)&lt;/li&gt; &lt;li&gt;parser-manager is responsible for managing the deployment and execution adaptations in order to obtain the appropiated BPMN2.0 file&lt;/li&gt; &lt;li&gt;BPMN20Manager is responsible for generating the automatic code, which will be included in the BPMN 2.0 file, to call WS. It will be integrated into the parser-manager component.&lt;/li&gt; &lt;li&gt;bpmn-model is the bpmn model that allows to manage and modify the BPM2.0 files following the standar.&lt;/li&gt; &lt;li&gt;parser-client is the proxy to call the interfaces, exposed in the parser-service component. This can be used by other applications or components in order to call the workflow parser.&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Workflow Engine: &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/workflow-engine"&gt;https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/workflow-engine&lt;/a&gt; &lt;ul&gt; &lt;li&gt;Components Activiti v5.18 (customized/modified): &lt;ul&gt; &lt;li&gt;activiti-webapp-rest2 is the war package that exposes the API REST of Activiti. It has been customized to cover the deployment and execution adaptations actions.&lt;/li&gt; &lt;li&gt;activiti-webapp-explorer2 is the war package that exposes the GUI of Activiti. It has been customized to manage the different functionalitis such as integration Idm, multi-tenant approach, introduction of tokens and groups....&lt;/li&gt; &lt;li&gt;activiti-rest is the component that execute the actions of the activiti-webapp-rest2. It has been modied to cover the actions of the activiti-webapp-rest2 component.&lt;/li&gt; &lt;li&gt;activiti-explorer is the component that execute the actions of the activiti-webapp-explorer2. It has been modied to cover the actions of the activiti-webapp-explorer2.&lt;/li&gt; &lt;li&gt;activiti-engine is the core of the engine. It has been modified to cover our functionalities.&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Rest of components: &lt;ul&gt; &lt;li&gt;atos-compel is responsible for discovering and binding the services (atomic services, software components...) with the service tasks included in the business process. It wraps the BPMN web editor and store the binding into the data base.&lt;/li&gt; &lt;li&gt;atos-bind is responsible for storing the binding and the tokens in the data base. it can be used by other components to access and manage the data of the system.&lt;/li&gt; &lt;li&gt;atos-service-tasks manages the different kind of service tasks such as the RESTproxy (which invokes remote services), monitoring service tasks (which allow to send monitoring data)&lt;/li&gt; &lt;li&gt;atos-form manages the different kind of fields that can be included in the user tasks in the business process.&lt;/li&gt; &lt;li&gt;demo-app is responsible for providing the different atomic services and software components, which have been used in the BPaaS bundles.&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Create the necessary artifacs executing the following instruction for all of components: &lt;pre&gt; ( cd workflow-parser &amp;amp;&amp;amp; mvn install ) ( cd workflow-engine &amp;amp;&amp;amp; bin/bootstrap.sh &amp;amp;&amp;amp; mvn install ) &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Copy the war file generated in the WorkflowEngineService, activiti-webapp-rest2 and emo-app modules into the webapps folder Tomcat. &lt;pre&gt; &amp;lt;modulePath&amp;gt;/target &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Development environment&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Create the eclipse project executing the following instruction for all necessary components: &lt;pre&gt; mvn eclipse:eclipse &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;a name="Production"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;Production&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;&lt;b&gt;Requirements&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;OpenJDK 1.7.x&lt;/li&gt; &lt;li&gt;MySql 5.5.x&lt;/li&gt; &lt;li&gt;Tomcat 7.x&lt;/li&gt; &lt;li&gt;Nginx&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Installation&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Validate that the version of Java is the correct one, if not install the version &lt;pre&gt; #java -version java version &amp;quot;1.7.0_85&amp;quot; &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Install the requeriments &lt;pre&gt; sudo aptitude install mysql-server sudo aptitude install tomcat7 sudo aptitude install nginx &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Configure the schema and user of the Activiti (the password of the root has been introduced during the MySql installation). &lt;pre&gt; mysql -h localhost -u root -p create database activiti_cloudsocket; create user cloudsocket@localhost identified by 'cloudsocket'; grant all privileges on activiti_cloudsocket.* to cloudsocket@localhost; &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Configure the modules of Tomcat (if you want to change the default password). Modify the file &amp;quot;&amp;lt;activiti-webapp-rest2&amp;gt;/WEB-INF/classes/db.properties&amp;quot; and &amp;quot;&amp;lt;activiti-webapp-explorer2&amp;gt;/WEB-INF/classes/db.properties&amp;quot; in order to introduce the new password. &lt;pre&gt; db=mysql jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/activiti_cloudsocket jdbc.username=cloudsocket jdbc.password=cloudsocket &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Configure the Nginx to redirect the 80 --&amp;gt; 8080. Modify the file (/etc/nginx/sites-available) &lt;pre&gt; server { listen 0.0.0.0:80; server_name localhost 134.60.64.132; client_max_body_size 4G; access_log /var/log/nginx/workflow_Engine.access.log; error_log /var/log/nginx/workflow_Engine.error.log; location /demo-app-1.0/ { # an HTTP header important enough to have its own Wikipedia entry: # http://en.wikipedia.org/wiki/X-Forwarded-For proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # enable this if and only if you use HTTPS, this helps Rack # set the proper protocol for doing redirects: # proxy_set_header X-Forwarded-Proto https; # pass the Host: header from the client right along so redirects # can be set properly within the Rack application proxy_set_header Host $http_host; # we don't want nginx trying to do something clever with # redirects, we set the Host: header above already. proxy_redirect off; proxy_pass http://localhost:8080/demo-app-1.0/; } location /activiti-webapp-rest2/ { # an HTTP header important enough to have its own Wikipedia entry: # http://en.wikipedia.org/wiki/X-Forwarded-For proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # enable this if and only if you use HTTPS, this helps Rack # set the proper protocol for doing redirects: # proxy_set_header X-Forwarded-Proto https; # pass the Host: header from the client right along so redirects # can be set properly within the Rack application proxy_set_header Host $http_host; # we don't want nginx trying to do something clever with # redirects, we set the Host: header above already. proxy_redirect off; proxy_pass http://localhost:8080/activiti-webapp-rest2/; } location /activiti-webapp-explorer2/ { # an HTTP header important enough to have its own Wikipedia entry: # http://en.wikipedia.org/wiki/X-Forwarded-For proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # enable this if and only if you use HTTPS, this helps Rack # set the proper protocol for doing redirects: # proxy_set_header X-Forwarded-Proto https; # pass the Host: header from the client right along so redirects # can be set properly within the Rack application proxy_set_header Host $http_host; # we don't want nginx trying to do something clever with # redirects, we set the Host: header above already. proxy_redirect off; proxy_pass http://localhost:8080/activiti-webapp-explorer2/; } } &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Locate the war artifacts at the server: &lt;pre&gt; - WorkflowEngineService - activiti-webapp-rest2 - activiti-webapp-explorer2 - demo-app &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Copy the war to the the tomcat folder (/var/lib/tomcat7/webapps) &lt;pre&gt; sudo cp * /var/lib/tomcat7/webapps &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Test the installation. Open a Navigator and test the following URLs: &lt;pre&gt; http://134.60.64.132/demo-app-1.0/services/ http://134.60.64.132/activiti-webapp-explorer2/ http://134.60.64.132/activiti-webapp-rest2/service/repository/deployments (basic authentication:kermit/kermit) &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;a name="Test_Cases"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Test Cases&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;To execute the unit tests, we need to install the tool curl &lt;a class="externallink" rel="nofollow" href="http://curl.haxx.se/"&gt;http://curl.haxx.se/&lt;/a&gt; Optional: if you want to see the formatted response, the python library can be used. If not, you only need to remove this part: &amp;ldquo;| python -mjson.tool&amp;rdquo; of the command.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;Create a new deployement:&lt;/b&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;It is needed to execute the following command:&lt;/p&gt; &lt;pre&gt; curl -X POST -F &amp;quot;file=@testCloudsocket.bpmn20.xml&amp;quot; -F &amp;quot;tenantId=ATOS&amp;quot; -F &amp;quot;endPointServiceList={\&amp;quot;workFlowId\&amp;quot;:\&amp;quot;wf1\&amp;quot;,\&amp;quot;endPointServices\&amp;quot;:[{\&amp;quot;serviceId\&amp;quot;:\&amp;quot;http://localhost:8080/demo-app-1.0/services/cardDesigner?wsdl\&amp;quot;,\&amp;quot;serviceTaskId\&amp;quot;:\&amp;quot;\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;WS\&amp;quot;,\&amp;quot;ip\&amp;quot;:\&amp;quot;127.0.0.1:8080\&amp;quot;},{\&amp;quot;serviceId\&amp;quot;:\&amp;quot;http://localhost:8080/demo-app-1.0/services/email?wsdl\&amp;quot;,\&amp;quot;serviceTaskId\&amp;quot;:\&amp;quot;\&amp;quot;,\&amp;quot;type\&amp;quot;:\&amp;quot;WS\&amp;quot;,\&amp;quot;ip\&amp;quot;:\&amp;quot;127.0.0.1:8080\&amp;quot;}]}&amp;quot; --user kermit:kermit -H &amp;quot;content-type: multipart/form-data&amp;quot; http:// 134.60.64.132/activiti-webapp-rest2/service/repository/deployments | python -mjson.tool &lt;/pre&gt; &lt;p&gt;Where the attributes are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;File is the bpm2.0 file (testCloudsocket.bpmn20.xml)&lt;/li&gt; &lt;li&gt;TenantId is the tenant of the organization (for the moment it is not used).&lt;/li&gt; &lt;li&gt;endPointServiceList is the list of the actual IP for the two services. &lt;pre&gt; Success response { &amp;quot;category&amp;quot;: null, &amp;quot;deploymentTime&amp;quot;: &amp;quot;2015-10-27T22:00:45.161Z&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;40&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;testCloudsocket.bpmn20.xml&amp;quot;, &amp;quot;tenantId&amp;quot;: &amp;quot;ATOS&amp;quot;, &amp;quot;url&amp;quot;: &amp;quot;http://134.60.64.132/activiti-webapp-rest2/service/repository/deployments/40&amp;quot; } &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;&lt;b&gt;Detail of the deployement&lt;/b&gt; &lt;pre&gt; curl --user kermit:kermit http:// 134.60.64.132/activiti-webapp-rest2/service/repository/deployments/{deploymentId} | python -mjson.tool in our case deploymentId is 40: curl --user kermit:kermit http://134.60.64.132/activiti-webapp-rest2/service/repository/deployments/40 | python -mjson.tool &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The description appears for your deployment.&lt;/p&gt; &lt;pre&gt; { &amp;quot;category&amp;quot;: null, &amp;quot;deploymentTime&amp;quot;: &amp;quot;2015-10-30T15:21:42.711+01:00&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;40&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;testCloudsocket.bpmn20.xml&amp;quot;, &amp;quot;tenantId&amp;quot;: &amp;quot;ATOS&amp;quot;, &amp;quot;url&amp;quot;: &amp;quot;http://127.0.0.1:8080/activiti-rest/service/repository/deployments/40&amp;quot; } &lt;/pre&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;List of resources associated&lt;/b&gt; &lt;pre&gt; curl --user kermit:kermit http://134.60.64.132/activiti-webapp-rest2/service/repository/deployments/{deploymentId}/resources | python -mjson.tool in our case deploymentId is 40: curl --user kermit:kermit http://134.60.64.132/activiti-webapp-rest2/service/repository/deployments/40/resources | python -mjson.tool &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;List of resources appears.&lt;/p&gt; &lt;pre&gt; [ { &amp;quot;contentUrl&amp;quot;: &amp;quot;http://134.60.64.132/activiti-webapp-rest2/service/repository/deployments/40/resourcedata/testCloudsocket.bpmn20.xml&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;testCloudsocket.bpmn20.xml&amp;quot;, &amp;quot;mediaType&amp;quot;: &amp;quot;text/xml&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;processDefinition&amp;quot;, &amp;quot;url&amp;quot;: &amp;quot;http://134.60.64.132/activiti-webapp-rest2/service/repository/deployments/40/resources/testCloudsocket.bpmn20.xml&amp;quot; }, { &amp;quot;contentUrl&amp;quot;: &amp;quot;http://134.60.64.132/activiti-webapp-rest2/service/repository/deployments/40/resourcedata/testCloudsocket.testCloudsocket.png&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;testCloudsocket.testCloudsocket.png&amp;quot;, &amp;quot;mediaType&amp;quot;: &amp;quot;image/png&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;resource&amp;quot;, &amp;quot;url&amp;quot;: &amp;quot;http://134.60.64.132/activiti-webapp-rest2/service/repository/deployments/40/resources/testCloudsocket.testCloudsocket.png&amp;quot; } ] &lt;/pre&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;Get the associated resource&lt;/b&gt; &lt;pre&gt; curl --user kermit:kermit http://134.60.64.132/activiti-webapp-rest2/service/repository/deployments/{deploymentId}/resourcedata/testCloudsocket.bpmn20.xml &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;In our case deploymentId is the id 40:&lt;/p&gt; &lt;pre&gt; curl --user kermit:kermit http://134.60.64.132/activiti-webapp-rest2/service/repository/deployments/40/resourcedata/testCloudsocket.bpmn20.xml &lt;/pre&gt; &lt;p&gt;The BPMN file associated to our deployment:&lt;/p&gt; &lt;pre&gt; &amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt; &amp;lt;definitions xmlns=&amp;quot;http://www.omg.org/spec/BPMN/20100524/MODEL&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:activiti=&amp;quot;http://activiti.org/bpmn&amp;quot; xmlns:bpmndi=&amp;quot;http://www.omg.org/spec/BPMN/20100524/DI&amp;quot; xmlns:omgdc=&amp;quot;http://www.omg.org/spec/DD/20100524/DC&amp;quot; xmlns:omgdi=&amp;quot;http://www.omg.org/spec/DD/20100524/DI&amp;quot; typeLanguage=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; expressionLanguage=&amp;quot;http://www.w3.org/1999/XPath&amp;quot; targetNamespace=&amp;quot;http://www.activiti.org/processdef&amp;quot;&amp;gt; &amp;lt;import namespace=&amp;quot;http://demo.seiplab.atosresearch.eu/&amp;quot; location=&amp;quot;http://http://127.0.0.1:8080/demo-app-1.0/services/cardDesigner?wsdl&amp;quot; importType=&amp;quot;http://schemas.xmlsoap.org/wsdl/&amp;quot;/&amp;gt; &amp;lt;import namespace=&amp;quot;http://demo.seiplab.atosresearch.eu/&amp;quot; location=&amp;quot;http://http://127.0.0.1:8080/demo-app-1.0/services/email?wsdl&amp;quot; importType=&amp;quot;http://schemas.xmlsoap.org/wsdl/&amp;quot;/&amp;gt; &amp;lt;process id=&amp;quot;testCloudsocket&amp;quot; name=&amp;quot;testCloudsocket&amp;quot; isExecutable=&amp;quot;true&amp;quot;&amp;gt; &amp;lt;userTask id=&amp;quot;sid-9956FEED-377C-4C6D-81F5-1DF14EE36D56&amp;quot; name=&amp;quot;test&amp;quot; activiti:candidateGroups=&amp;quot;sales&amp;quot;/&amp;gt; &amp;lt;startEvent id=&amp;quot;sid-AD365612-18DE-48F1-971F-944E51AB8804&amp;quot;/&amp;gt; &amp;lt;endEvent id=&amp;quot;sid-F9B53F7F-5822-4653-BA91-CA88B3A026D3&amp;quot;/&amp;gt; &amp;lt;sequenceFlow id=&amp;quot;sid-685E0C22-D2AD-4DF4-96C6-A435792C214A&amp;quot; sourceRef=&amp;quot;sid-AD365612-18DE-48F1-971F-944E51AB8804&amp;quot; targetRef=&amp;quot;sid-9956FEED-377C-4C6D-81F5-1DF14EE36D56&amp;quot;/&amp;gt; &amp;lt;sequenceFlow id=&amp;quot;sid-541CE92A-8C33-4041-9359-693F38333D2F&amp;quot; sourceRef=&amp;quot;sid-9956FEED-377C-4C6D-81F5-1DF14EE36D56&amp;quot; targetRef=&amp;quot;sid-F9B53F7F-5822-4653-BA91-CA88B3A026D3&amp;quot;/&amp;gt; &amp;lt;/process&amp;gt; &amp;lt;bpmndi:BPMNDiagram id=&amp;quot;BPMNDiagram_testCloudsocket&amp;quot;&amp;gt; &amp;lt;bpmndi:BPMNPlane bpmnElement=&amp;quot;testCloudsocket&amp;quot; id=&amp;quot;BPMNPlane_testCloudsocket&amp;quot;&amp;gt; &amp;lt;bpmndi:BPMNShape bpmnElement=&amp;quot;sid-9956FEED-377C-4C6D-81F5-1DF14EE36D56&amp;quot; id=&amp;quot;BPMNShape_sid-9956FEED-377C-4C6D-81F5-1DF14EE36D56&amp;quot;&amp;gt; &amp;lt;omgdc:Bounds height=&amp;quot;80.0&amp;quot; width=&amp;quot;100.0&amp;quot; x=&amp;quot;315.0&amp;quot; y=&amp;quot;163.0&amp;quot;/&amp;gt; &amp;lt;/bpmndi:BPMNShape&amp;gt; &amp;lt;bpmndi:BPMNShape bpmnElement=&amp;quot;sid-AD365612-18DE-48F1-971F-944E51AB8804&amp;quot; id=&amp;quot;BPMNShape_sid-AD365612-18DE-48F1-971F-944E51AB8804&amp;quot;&amp;gt; &amp;lt;omgdc:Bounds height=&amp;quot;30.0&amp;quot; width=&amp;quot;30.0&amp;quot; x=&amp;quot;136.45001220703125&amp;quot; y=&amp;quot;184.0&amp;quot;/&amp;gt; &amp;lt;/bpmndi:BPMNShape&amp;gt; &amp;lt;bpmndi:BPMNShape bpmnElement=&amp;quot;sid-F9B53F7F-5822-4653-BA91-CA88B3A026D3&amp;quot; id=&amp;quot;BPMNShape_sid-F9B53F7F-5822-4653-BA91-CA88B3A026D3&amp;quot;&amp;gt; &amp;lt;omgdc:Bounds height=&amp;quot;28.0&amp;quot; width=&amp;quot;28.0&amp;quot; x=&amp;quot;575.4500122070312&amp;quot; y=&amp;quot;189.0&amp;quot;/&amp;gt; &amp;lt;/bpmndi:BPMNShape&amp;gt; &amp;lt;bpmndi:BPMNEdge bpmnElement=&amp;quot;sid-541CE92A-8C33-4041-9359-693F38333D2F&amp;quot; id=&amp;quot;BPMNEdge_sid-541CE92A-8C33-4041-9359-693F38333D2F&amp;quot;&amp;gt; &amp;lt;omgdi:waypoint x=&amp;quot;415.0&amp;quot; y=&amp;quot;203.0&amp;quot;/&amp;gt; &amp;lt;omgdi:waypoint x=&amp;quot;575.4500122070312&amp;quot; y=&amp;quot;203.0&amp;quot;/&amp;gt; &amp;lt;/bpmndi:BPMNEdge&amp;gt; &amp;lt;bpmndi:BPMNEdge bpmnElement=&amp;quot;sid-685E0C22-D2AD-4DF4-96C6-A435792C214A&amp;quot; id=&amp;quot;BPMNEdge_sid-685E0C22-D2AD-4DF4-96C6-A435792C214A&amp;quot;&amp;gt; &amp;lt;omgdi:waypoint x=&amp;quot;166.44738152787627&amp;quot; y=&amp;quot;199.2809153861509&amp;quot;/&amp;gt; &amp;lt;omgdi:waypoint x=&amp;quot;315.0&amp;quot; y=&amp;quot;202.06345112885748&amp;quot;/&amp;gt; &amp;lt;/bpmndi:BPMNEdge&amp;gt; &amp;lt;/bpmndi:BPMNPlane&amp;gt; &amp;lt;/bpmndi:BPMNDiagram&amp;gt; &amp;lt;/definitions&amp;gt; &lt;/pre&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;Delete the deploment&lt;/b&gt; &lt;pre&gt; curl -X DELETE --user kermit:kermit http://127.0.0.1:8080/activiti-rest/service/repository/deployments/40 &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;a name="User_Manual"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;User Manual&lt;/span&gt;&lt;/h3&gt; &lt;a name="API_specification"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;API specification&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;&lt;a href="/wiki/Special:Node:330801/API_specification" title="API specification"&gt;API specification&lt;/a&gt;&lt;/p&gt; &lt;a name="HandBook"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;HandBook&lt;/span&gt;&lt;/h4&gt; &lt;p&gt;&lt;a href="/wiki/Special:Node:330801/Handbook_WFE" title="Handbook WFE"&gt;Handbook WFE&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="/wiki/Special:Node:330801/Developer_manual" title="Developer manual"&gt;Developer manual&lt;/a&gt;&lt;/p&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-04-20T13:43:38Z</dc:date> </entry> <entry> <title>API specification 1.5</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/API+specification" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/API+specification</id> <updated>2017-03-08T14:51:03Z</updated> <published>2017-03-08T14:51:03Z</published> <summary type="html">&lt;p&gt;&lt;b&gt;API specification&lt;/b&gt;&lt;/p&gt; &lt;p&gt;We have extended the Activiti API, so you can find more information in the following link &lt;a class="externallink" rel="nofollow" href="http://www.activiti.org/userguide/?_ga=1.200191853.2128620455.1412161972#_rest_api"&gt;Activiti REST API&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt; &lt;b&gt;Deployment Phase&lt;/b&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;Create a new deployment (dinamic service tasks):&lt;/b&gt; &lt;pre&gt; POST repository/deployments &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The request body should contain data of type multipart/form-data. There should be exactly one file in the request, any additional files will be ignored. The deployment name is the name of the file-field passed in. If multiple resources need to be deployed in a single deployment, compress the resources in a zip and make sure the file-name ends with .bar or .zip.&lt;/p&gt; &lt;p&gt;Two additional parameters (form-field) can be passed in the request body:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;tenantId: it is the id of the tenant that will be associated to the deploy business process.&lt;/li&gt; &lt;li&gt;endPointServiceList: It is the list of the actual URL (IP/host_name and the port) of the associated services. The parameter has to have the following structure:&lt;/li&gt; &lt;/ul&gt; &lt;dl&gt; &lt;dd&gt;&lt;b&gt;EndPointServiceBundle&lt;/b&gt;: contain all the necessary information to modify the bpmn with the actual service IPs &lt;ul&gt; &lt;li&gt;workFlowId(literal): Identify the workflowId (set as &amp;quot;id&amp;quot; attribute on process element)&lt;/li&gt; &lt;li&gt;workFlowName(literal): Set a workflow name (set as &amp;quot;name&amp;quot; attribute in process element)&lt;/li&gt; &lt;li&gt;endPointServices (EndPointServices[]): list of the actual IPs of services, it is described by the EndPointServices entity.&lt;/li&gt; &lt;/ul&gt; &lt;/dd&gt; &lt;dd&gt;&lt;b&gt;EndPointServices&lt;/b&gt;: Include the details to identify the services and contains the real IP. &lt;ul&gt; &lt;li&gt;serviceId (literal): identification of the services.&lt;/li&gt; &lt;li&gt;type (literal): Only accepted two values: WS (Web services) and REST.&lt;/li&gt; &lt;li&gt;serviceTaskId (literal): Indicate the identifier of the service task, associated to this serviceId. It is optional since there are some situation where the description of the services are not associated directly to the service task.&lt;/li&gt; &lt;li&gt;Ip (literal): It indicates the IP/Name of the host plus the port, following the pattern &amp;lt;ip/host_name&amp;gt;:&amp;lt;port&amp;gt;. If the port is 80 o 443 it is not necessary to include them in this attribute.&lt;/li&gt; &lt;/ul&gt; &lt;/dd&gt; &lt;/dl&gt; &lt;p&gt;Example of the json file:&lt;/p&gt; &lt;pre&gt; { &amp;quot;workFlowId&amp;quot;:&amp;quot;wf1&amp;quot;, &amp;quot;workFlowName&amp;quot;: &amp;quot;a name&amp;quot;, &amp;quot;endPointServices&amp;quot;:[ { &amp;quot;serviceId&amp;quot;:&amp;quot;http://localhost:8080/demo-app-1.0/services/cardDesigner?wsdl&amp;quot;, &amp;quot;serviceTaskId&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;WS&amp;quot;, &amp;quot;ip&amp;quot;:&amp;quot;127.0.0.1:8080&amp;quot; }, { &amp;quot;serviceId&amp;quot;:&amp;quot;http://localhost:8080/demo-app-1.0/services/email?wsdl&amp;quot;, &amp;quot;serviceTaskId&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;WS&amp;quot;, &amp;quot;ip&amp;quot;:&amp;quot;127.0.0.1:8080&amp;quot; } ] } &lt;/pre&gt; &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: Change the ip attribute with the available Web Service definition (running WSDL description), if not the WorkflowEngine doesn&amp;rsquo;t allow to deploy the BPMN file. Response codes:&lt;/p&gt; &lt;pre&gt; *201 Indicates the deployment was created. *400 Indicates there was no content present in the request body or the content mime-type is not supported for deployment. The status-description contains additional information. &lt;/pre&gt; &lt;p&gt;Success response body:&lt;/p&gt; &lt;pre&gt; { &amp;quot;category&amp;quot;: null, &amp;quot;deploymentTime&amp;quot;: &amp;quot;2015-10-30T15:21:42.711+01:00&amp;quot;, &amp;quot;id&amp;quot;: &amp;quot;40&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;withEmail.bpmn20.xml&amp;quot;, &amp;quot;tenantId&amp;quot;: &amp;quot;ATOS&amp;quot;, &amp;quot;url&amp;quot;: &amp;quot;http://127.0.0.1:8080/activiti-rest/service/repository/deployments/40&amp;quot; } &lt;/pre&gt; &lt;p&gt;&lt;br /&gt; &lt;b&gt;Execution Phase&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;List of instances&lt;/b&gt; &lt;pre&gt; GET service/runtime/process-instances?deploymentId=&amp;lt;deployemtId&amp;gt; &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;This action obtains all the process instances associated to one deployment.&lt;/p&gt; &lt;p&gt;The following parameters need to be indicated:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;deployemtId: the identifier of the deployment in order to obtain its instances.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Response codes:&lt;/p&gt; &lt;pre&gt; *200 Ok. *400 Indicates there was no content present in the request body or the content mime-type is not supported for deployment. The status-description contains additional information. &lt;/pre&gt; &lt;p&gt;The response message contains the list of instances with the UrL parameters, in this case all the instances for the specific deployment (deployemtId)&lt;/p&gt; &lt;p&gt;Example of the response, list of instances:&lt;/p&gt; &lt;pre&gt; { &amp;quot;data&amp;quot;: [ { &amp;quot;activityId&amp;quot;: &amp;quot;sid-2B0D606E-2AF8-4EF6-AFF0-E137471C6990&amp;quot;, &amp;quot;businessKey&amp;quot;: null, &amp;quot;completed&amp;quot;: false, &amp;quot;deploymentId&amp;quot;: &amp;quot;152501&amp;quot;, &amp;quot;ended&amp;quot;: false, &amp;quot;id&amp;quot;: &amp;quot;152505&amp;quot;, &amp;quot;processDefinitionId&amp;quot;: &amp;quot;CloudSocketSendingInvoicesFinal_withTokenActiviti:1:152504&amp;quot;, &amp;quot;processDefinitionUrl&amp;quot;: &amp;quot;http://localhost:8080/activiti-webapp-rest2/service/repository/process-definitions/CloudSocketSendingInvoicesFinal_withTokenActiviti:1:152504&amp;quot;, &amp;quot;suspended&amp;quot;: false, &amp;quot;tenantId&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;url&amp;quot;: &amp;quot;http://localhost:8080/activiti-webapp-rest2/service/runtime/process-instances/152505&amp;quot;, &amp;quot;variables&amp;quot;: [] }, { &amp;quot;activityId&amp;quot;: &amp;quot;sid-2B0D606E-2AF8-4EF6-AFF0-E137471C6990&amp;quot;, &amp;quot;businessKey&amp;quot;: null, &amp;quot;completed&amp;quot;: false, &amp;quot;deploymentId&amp;quot;: &amp;quot;152501&amp;quot;, &amp;quot;ended&amp;quot;: false, &amp;quot;id&amp;quot;: &amp;quot;152515&amp;quot;, &amp;quot;processDefinitionId&amp;quot;: &amp;quot;CloudSocketSendingInvoicesFinal_withTokenActiviti:1:152504&amp;quot;, &amp;quot;processDefinitionUrl&amp;quot;: &amp;quot;http://localhost:8080/activiti-webapp-rest2/service/repository/process-definitions/CloudSocketSendingInvoicesFinal_withTokenActiviti:1:152504&amp;quot;, &amp;quot;suspended&amp;quot;: false, &amp;quot;tenantId&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;url&amp;quot;: &amp;quot;http://localhost:8080/activiti-webapp-rest2/service/runtime/process-instances/152515&amp;quot;, &amp;quot;variables&amp;quot;: [] } ], &amp;quot;order&amp;quot;: &amp;quot;asc&amp;quot;, &amp;quot;size&amp;quot;: 2, &amp;quot;sort&amp;quot;: &amp;quot;id&amp;quot;, &amp;quot;start&amp;quot;: 0, &amp;quot;total&amp;quot;: 2 } &lt;/pre&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;Adaptation for one process instance&lt;/b&gt; &lt;pre&gt; POST service/runtime/process-instances/&amp;lt;instanceId&amp;gt;/adaptation &lt;/pre&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;This action allows to modify de endpoints of the service tasks for the instance indicated, for example, if the adaptation engine realizes that something happens through the Cloud Provider Engine could call the WF engine to modify the conditions The following actions are included in order to configure the new environment:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Suspend the instance.&lt;/li&gt; &lt;li&gt;Base on this instance recover the associated deployment and obtain the original BPMN file.&lt;/li&gt; &lt;li&gt;Base on this original BPMN, the system parses the new endpoints (detailed in a json message), besides, we can change the id and name of the new workflow definition (introducing the appropriated attributes in the json ).&lt;/li&gt; &lt;li&gt;Create a new deployment with the new BPMN applying the new conditions and change the name of the process definition accordingly with the id of the new workflow.&lt;/li&gt; &lt;li&gt;Obtain the new process description (associating to his new deployment)&lt;/li&gt; &lt;li&gt;Update the instance with the new process description.&lt;/li&gt; &lt;li&gt;Active the instance again.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following parameters need to be indicated:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;InstanceId: this id of the instance. It is indicated in the URL when the call is created.&lt;/li&gt; &lt;li&gt;endPointServiceList: It is the list of the new URLs (IP/host_name and the port) of the associated services. The parameter has to have the following structure:&lt;/li&gt; &lt;/ul&gt; &lt;dl&gt; &lt;dd&gt;&lt;b&gt;EndPointServiceBundle&lt;/b&gt;: contain all the necessary information to modify the bpmn with the actual service IPs &lt;ul&gt; &lt;li&gt;workFlowId(literal): Identify the new workflowId after the adaptation. If it is not indicated, the system maintain the previous id + &amp;ldquo;_adaptation&amp;rdquo;&lt;/li&gt; &lt;li&gt;workFlowName(literal): Set the new workflow name (set as &amp;quot;name&amp;quot; attribute in process element) after the adaptation. If it is not indicated, the system maintain the previous name + &amp;ldquo;_adaptation&amp;rdquo;&lt;/li&gt; &lt;li&gt;endPointServices (EndPointServices[]): list of the actual IPs of services, it is described by the EndPointServices entity.&lt;/li&gt; &lt;/ul&gt; &lt;/dd&gt; &lt;dd&gt;&lt;b&gt;EndPointServices&lt;/b&gt;: Include the details to identify the services and contains the real IP. &lt;ul&gt; &lt;li&gt;serviceId (literal): identification of the services.&lt;/li&gt; &lt;li&gt;type (literal): Only accepted two values: WS (Web services) and REST.&lt;/li&gt; &lt;li&gt;serviceTaskId (literal): Indicate the identifier of the service task, associated to this serviceId. It is optional since there are some situation where the description of the services are not associated directly to the service task.&lt;/li&gt; &lt;li&gt;Ip (literal): It indicates the IP/Name of the host plus the port, following the pattern &amp;lt;ip/host_name&amp;gt;:&amp;lt;port&amp;gt;. If the port is 80 o 443 it is not necessary to include them in this attribute.&lt;/li&gt; &lt;/ul&gt; &lt;/dd&gt; &lt;/dl&gt; &lt;p&gt;Example of the json file:&lt;/p&gt; &lt;pre&gt; {&amp;quot;workFlowId&amp;quot;:&amp;quot;WP3_test_Final_AfterAdaptation&amp;quot;, &amp;quot;workFlowName&amp;quot;:&amp;quot; WP3_test_Final_AfterAdaptation_Name&amp;quot;, &amp;quot;endPointServices&amp;quot;:[ { &amp;quot;serviceId&amp;quot;:&amp;quot;http://localhost:8080/demo-app-1.0/services/cardDesigner?wsdl&amp;quot;, &amp;quot;serviceTaskId&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;WS&amp;quot;, &amp;quot;ip&amp;quot;:&amp;quot;127.0.0.1:8080&amp;quot; }, { &amp;quot;serviceId&amp;quot;:&amp;quot;http://localhost:8080/demo-app-1.0/services/email?wsdl&amp;quot;, &amp;quot;serviceTaskId&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;type&amp;quot;:&amp;quot;WS&amp;quot;, &amp;quot;ip&amp;quot;:&amp;quot;127.0.0.1:8080&amp;quot; } ] } &lt;/pre&gt; &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Change the ip attribute with the available Web Service definition (running WSDL description), if not the WorkflowEngine doesn&amp;rsquo;t allow to deploy the BPMN file.&lt;/li&gt; &lt;li&gt;The attributes workFlowId and workFlowName can be empty, in this case the name will be the same.&lt;/li&gt; &lt;li&gt;TenantId is not necessary since, we will use the same tenantId that the original deployment has.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Response codes:&lt;/p&gt; &lt;pre&gt; *201 Indicates the adaptation for this instance was created. *400 Indicates there was no content present in the request body or the content mime-type is not supported for deployment. The status-description contains additional information. &lt;/pre&gt; &lt;p&gt;Success response body:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&amp;quot;activityId&amp;quot;: it indicates the task where the instance is stopped (we are validating that the new process definition contains this sid),&lt;/li&gt; &lt;li&gt;&amp;quot;businessKey&amp;quot;: (To be validated),&lt;/li&gt; &lt;li&gt;&amp;quot;completed&amp;quot;: it indicates if the instance has completed,&lt;/li&gt; &lt;li&gt;&amp;quot;ended&amp;quot;: it indicates if the instance has ended,&lt;/li&gt; &lt;li&gt;&amp;quot;id&amp;quot;: id of the instance, of course it is the same that we have at the beginning (InstanceId in the URL call),&lt;/li&gt; &lt;li&gt;&amp;quot;processDefinitionId&amp;quot;: New process definition with the new endpoints, id and name,&lt;/li&gt; &lt;li&gt;&amp;quot;processDefinitionUrl&amp;quot;: url to obtain the process definition,&lt;/li&gt; &lt;li&gt;&amp;quot;suspended&amp;quot;: if the instance is suspended,&lt;/li&gt; &lt;li&gt;&amp;quot;tenantId&amp;quot;: the tenant id, we will maintain the original one,&lt;/li&gt; &lt;li&gt;&amp;quot;url&amp;quot;: url to obtain the instance,&lt;/li&gt; &lt;li&gt;&amp;quot;variables&amp;quot;: the variables associated to this instance.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Example of the response:&lt;/p&gt; &lt;pre&gt; { &amp;quot;activityId&amp;quot;: &amp;quot;sid-FD0DD857-8763-4E46-8ED4-530FFAF19B27&amp;quot;, &amp;quot;businessKey&amp;quot;: null, &amp;quot;completed&amp;quot;: false, &amp;quot;ended&amp;quot;: false, &amp;quot;id&amp;quot;: &amp;quot;82501&amp;quot;, &amp;quot;processDefinitionId&amp;quot;: &amp;quot;WP3_test_Final_AfterAdaptation:1:85004&amp;quot;, &amp;quot;processDefinitionUrl&amp;quot;: &amp;quot;http://localhost:8080/activiti-webapp-rest2/service/repository/process-definitions/WP3_test_Final_AfterAdaptation:1:85004&amp;quot;, &amp;quot;suspended&amp;quot;: false, &amp;quot;tenantId&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;url&amp;quot;: &amp;quot;http://localhost:8080/activiti-webapp-rest2/service/runtime/process-instances/82501&amp;quot;, &amp;quot;variables&amp;quot;: [] } &lt;/pre&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-03-08T14:51:03Z</dc:date> </entry> <entry> <title>Handbook WFE 1.0</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Handbook+WFE" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Handbook+WFE</id> <updated>2017-03-08T12:26:05Z</updated> <published>2017-03-08T12:26:05Z</published> <summary type="html">&lt;p&gt;TO be completed&lt;/p&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-03-08T12:26:05Z</dc:date> </entry> <entry> <title>Synergic Cross-Layer Monitoring Framework 1.1</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Synergic+Cross-Layer+Monitoring+Framework" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Synergic+Cross-Layer+Monitoring+Framework</id> <updated>2017-02-14T15:31:40Z</updated> <published>2017-02-14T15:31:40Z</published> <summary type="html">&lt;h2 id="section-Synergic+Cross-Layer+Monitoring+Framework-Research+Problem"&gt; Research Problem &lt;a class="hashlink" href="#section-Synergic+Cross-Layer+Monitoring+Framework-Research+Problem"&gt;#&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Various monitoring frameworks have been proposed and offered which usually cover only one or two&lt;br/&gt;levels of abstraction. Moreover, such frameworks usually rely on level-independent mechanisms&lt;br/&gt;which are able to support the individual assessment over the respective metrics. The latter&lt;br/&gt;leads to the issue of measurability gaps: as adjacent levels are not able to cooperate,&lt;br/&gt;then it is not possible to produce measurements of a high-level metric from measurements&lt;br/&gt;of a lower-level metric. This issue leads to the fact that most of the monitoring frameworks&lt;br/&gt;are able to support a rather limited and fixed set of metrics. Related to this issue is&lt;br/&gt;the problem of metric computability: in particular, the frameworks are not able, based on the&lt;br/&gt;high-level but complete description of a metric, to produce its measurements. They rather&lt;br/&gt;stay on a quite technical mapping of the fixed description of the limited set of metrics&lt;br/&gt;supported to the corresponding sensing or aggregation code needed for the metric measurement.   &lt;/p&gt;&lt;p&gt;The above inabilities of the current monitoring frameworks highlight the need for introducing&lt;br/&gt;a cross-layer monitoring framework which is able to measure metrics over different levels as&lt;br/&gt;well as cover measurability gaps by being able to address the measurement of any kind of metric. &lt;br/&gt;Such a framework should also rely on a flexible and complete high-level description of a metric&lt;br/&gt;which is independent from any technical specificities. &lt;/p&gt;&lt;h2 id="section-Synergic+Cross-Layer+Monitoring+Framework-Solution"&gt; Solution &lt;a class="hashlink" href="#section-Synergic+Cross-Layer+Monitoring+Framework-Solution"&gt;#&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;FORTH and University of ULM (UULM) have developed two separate monitoring frameworks which cover different &lt;br/&gt;levels of abstraction. The monitoring framework of FORTH covers mainly the workflow and service level,&lt;br/&gt;while the monitoring of UULM covers mainly the infrastructure and platform levels. As such, it&lt;br/&gt;is apparent that the integration of these frameworks can result in the production of a synergic&lt;br/&gt;framework which is able to cover the measurement of metrics at all possible levels. To this end, &lt;br/&gt;a synergic framework has been designed and is currently developed which is able to capitalize over&lt;br/&gt;the individual capabilities of the aforementioned monitoring frameworks. Each individual framework&lt;br/&gt;is seen as a service which offers monitoring and evaluation capabilities. The cross-layer aggregation&lt;br/&gt;of metric measurements between the two individual frameworks is facilitated by a publish-subscribe&lt;br/&gt;mechanism: this means that one framework subscribes to those lower-level measurements that are needed in order to&lt;br/&gt;aggregate a measurement for a higher-level. The combined framework also offers another publish-subscribe&lt;br/&gt;mechanism in order to enable interested components, like an Adaptation Engine, to retrieve the SLO&lt;br/&gt;evaluations produced and enact, in this case, respective adaptation actions.  &lt;/p&gt;&lt;p&gt;Other interesting features of the combined framework which map to common features of the individual &lt;br/&gt;frameworks are the following: recovery capability in case a monitoring component fails, data &lt;br/&gt;redundancy to avoid important monitoring data loss as well as capability to monitor both domain-independent&lt;br/&gt;and domain-specific metrics. &lt;/p&gt;&lt;h2 id="section-Synergic+Cross-Layer+Monitoring+Framework-Architecture"&gt; Architecture &lt;a class="hashlink" href="#section-Synergic+Cross-Layer+Monitoring+Framework-Architecture"&gt;#&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The architecture of the combined/synergic monitoring framework can be seen in the following figure. As&lt;br/&gt;expected, the respective individual frameworks are included and they communicate via a publish-subscribe&lt;br/&gt;mechanism. In addition, this mechanism is used in order to propagate measurements to the Evaluator&lt;br/&gt;component which includes a CEP engine responsible for evaluating conditions over the propagated measurements.&lt;br/&gt;The events produced are further propagated to interested components, such as Adaptation Engines. &lt;br/&gt;The measurements can also be inspected in a programmatic or UI-based manner by two other components&lt;br/&gt;which are part of the Collosseum cloud orchestration engine. The Collosseum API enables the&lt;br/&gt;programmatic retrieval of measurements that are stored in the Evaluator while the Collosseum UI enables the&lt;br/&gt;production of graphs over these measurements. Both components can rely on the measurements propagated&lt;br/&gt;by the individual monitoring frameworks but in principle they could also require the further aggregation&lt;br/&gt;of the stored measurements which is natively supported by the encompassing CEP Engine. &lt;/p&gt;&lt;p&gt;&lt;img src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=mon_arch.png" /&gt; &lt;/p&gt;&lt;p&gt;This innovation item will be made available at &lt;a href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/cross_layer_monitoring"&gt;Gitlab&lt;/a&gt;. &lt;/p&gt;&lt;h2 id="section-Synergic+Cross-Layer+Monitoring+Framework-References:"&gt; References: &lt;a class="hashlink" href="#section-Synergic+Cross-Layer+Monitoring+Framework-References:"&gt;#&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=""&gt;D3.3 - BPaaS Allocation and Execution Environment Blueprints&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=""&gt;D3.4 - BPaaS Allocation and Execution Environment Prototypes&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-02-14T15:31:40Z</dc:date> </entry> <entry> <title>Synergic Cross-Layer Adaptation Framework 1.1</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Synergic+Cross-Layer+Adaptation+Framework" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Synergic+Cross-Layer+Adaptation+Framework</id> <updated>2017-02-14T14:53:16Z</updated> <published>2017-02-14T14:53:16Z</published> <summary type="html">&lt;h2 id="section-Synergic+Cross-Layer+Adaptation+Framework-Research+Problem"&gt; Research Problem &lt;a class="hashlink" href="#section-Synergic+Cross-Layer+Adaptation+Framework-Research+Problem"&gt;#&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;BPaaS adaptation needs to be performed across different levels of abstraction. This is required &lt;br/&gt;in order to avoid having different adaptation mechanisms being triggered&lt;br/&gt;independently such that the effects of one mechanism can be undone by the other, thus resulting in&lt;br/&gt;vicious adaptation cycles. Moreover, different levels need to be covered as one problematic &lt;br/&gt;situation could be impossible to be addressed by just one level. For instance, the migration of&lt;br/&gt;a software component from one cloud to another might also require adopting the workflow level in &lt;br/&gt;order to perform a respective replacement of the service endpoint in the workflow description,&lt;br/&gt;usually done in the context of service replacement. &lt;/p&gt;&lt;h2 id="section-Synergic+Cross-Layer+Adaptation+Framework-Solution "&gt; Solution  &lt;a class="hashlink" href="#section-Synergic+Cross-Layer+Adaptation+Framework-Solution "&gt;#&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The cross-layer BPaaS adaptation solution comprises the integration of different adaptation &lt;br/&gt;frameworks that have been developed by two academic partners of the CloudSocket project, namely&lt;br/&gt;FORTH and University of ULM. By joining forces, current adaptation implementation gaps at&lt;br/&gt;different levels are covered in the form of services which include methods mapping to the level-specific&lt;br/&gt;adaptation actions. In addition, the respective individual features offered by&lt;br/&gt;each framework can be capitalised and exploited to make them available for the combined framework.&lt;br/&gt;As such, this solution looks ideal for realising or replacing the functionality of the&lt;br/&gt;Adaptation Engine in the current CloudSocket implementation.    &lt;/p&gt;&lt;h2 id="section-Synergic+Cross-Layer+Adaptation+Framework-Architecture"&gt; Architecture &lt;a class="hashlink" href="#section-Synergic+Cross-Layer+Adaptation+Framework-Architecture"&gt;#&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The architecture of the combined / synergic framework is depicted in the following figure. &lt;br/&gt;As it can be seen, this framework comprises the following components: (a) the Transformer is responsible for mapping adaptation rules, which are&lt;br/&gt;generated by the BPaaS Evaluation Environment, into two forms: one which is&lt;br/&gt;suitable for storage in the Rule Base and another which is suitable for storage in the Adaptation&lt;br/&gt;Engine; (b) the Rule Base is responsible for storing the adaptation rules provided by the&lt;br/&gt;Transformer and discovering the one which is the most suitable to confront the current&lt;br/&gt;problematic situation. The latter discovery is supported via the use of monitoring facts &lt;br/&gt;communicated by the (BPaaS) Monitoring Framework. In case that an adaptation rule should be&lt;br/&gt;triggered, then the Adaptation Engine is informed in order to enact the respective adaptation;&lt;br/&gt;(c) the Adaptation UI is a UI enabling the expert to modify the rules automatically generated&lt;br/&gt;by the BPaaS Evaluation Environment or to insert new rules to cover new adaptation situations; &lt;br/&gt;(d) the Adaptation Engine is a normal workflow engine which is able to enact the adaptation&lt;br/&gt;workflows needed while it is also responsible for storing the adaptation actions that have been&lt;br/&gt;performed in the Adaptation DB; (e) the workflows executed by the Adaptation Engine map to&lt;br/&gt;method calls of level-specific services: the service and workflow level is covered by the&lt;br/&gt;cross-layer adaptation framework of FORTH while the infrastructure and platform level is&lt;br/&gt;covered by the adaptation framework of UULM. As already indicated, the methods of these &lt;br/&gt;services map to particular level-specific adaptation actions that are offered for &lt;br/&gt;execution; (f) finally, the Adaptation Service enables the retrieval of adaptation history&lt;br/&gt;information from the Adaptation DB, mostly for the analysis purposes of the BPaaS Evaluation&lt;br/&gt;Environment, while it also enables the programmatic execution of adaptation workflows, in case&lt;br/&gt;where manual intervention is needed, thus mapping to the case that the current situation is &lt;br/&gt;not covered by the current set of adaptation rules modelled.  &lt;/p&gt;&lt;p&gt;&lt;img src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=ad_arch.png" /&gt; &lt;/p&gt;&lt;p&gt;The source code will be available at the &lt;a href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/cross_layer_adaptation"&gt;Gitlab&lt;/a&gt;. &lt;/p&gt;&lt;h2 id="section-Synergic+Cross-Layer+Adaptation+Framework-References:"&gt; References: &lt;a class="hashlink" href="#section-Synergic+Cross-Layer+Adaptation+Framework-References:"&gt;#&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=""&gt;D3.3 BPaaS Allocation and Execution Environment Blueprints&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=""&gt;D3.4 BPaaS Allocation and Execution Environment Prototypes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=""&gt;AXE Adaptation Framework &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-02-14T14:53:16Z</dc:date> </entry> <entry> <title>PaaS Orchestration and Adaptation 1.7</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/PaaS+Orchestration+and+Adaptation" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/PaaS+Orchestration+and+Adaptation</id> <updated>2017-02-07T12:22:03Z</updated> <published>2017-02-07T12:22:03Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Problem_Description"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Problem Description&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Solution_Approach"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Solution Approach&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Architecture"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;Architecture&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Usage"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Usage&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Video_Presentation"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;Video Presentation&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#References"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;References&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Problem_Description"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Problem Description&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;PaaS abstraction is still an open and on-going topic in current research. It can drastically decrease costs, by e.g. sharing infrastructure of public PaaS providers to host an application. Therefore, the integration of a PaaS abstraction into the Cloud Provider Engine is of major interest for CloudSocket. See Deliverable D3.3 for a research on current Cloud Orchestration Tools and their state towards PaaS services and provider integration.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;a name="Solution_Approach"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Solution Approach&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;Our solution for this is two-fold: (i) enhancing the application and component instance life-cycle by PaaS-specific activities, and (ii) integrating and developing the PaaS Unified Library (PUL) into the Cloud Provider Engine, which is powered by Colosseum.&lt;/p&gt; &lt;p&gt;&lt;img alt="paas0.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=paas0.png" /&gt;&lt;/p&gt; &lt;a name="Architecture"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Architecture&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;The communication to the cloud provider is ensured by the PaaS abstraction layer &amp;ldquo;Dagger&amp;rdquo;, which is the higher-level pendant to Sword, the IaaS abstraction layer. This layer unifies the API calls to different Cloud providers.&lt;/p&gt; &lt;p&gt;&lt;img alt="paas1.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=paas1.png" /&gt;&lt;/p&gt; &lt;a name="Usage"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Usage&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;&lt;a class="externallink" rel="nofollow" href="http://134.60.64.166/cloud-provider-engine-ui/#/login"&gt;http://134.60.64.166/cloud-provider-engine-ui/#/login&lt;/a&gt;&lt;/p&gt; &lt;a name="Video_Presentation"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Video Presentation&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;A video is available on &lt;a class="externallink" rel="nofollow" href="https://www.youtube.com/watch?v=aGtQ210wih8"&gt;YouTube&lt;/a&gt;.&lt;/p&gt; &lt;a name="References"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;References&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;For more details on this, please check the respective repositories:&lt;/p&gt; &lt;p&gt;&lt;a class="externallink" rel="nofollow" href="https://github.com/cloudiator/colosseum/tree/cs-paas-prototype"&gt;Research branch of Cloudiator/Colosseum&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/adaptation-management"&gt;Adaptation Management component repository&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Also please refer to the wiki pages:&lt;/p&gt; &lt;p&gt;&lt;a href="/wiki/Special:Node:330801/Adaptation_Management" title="Adaptation Management"&gt;Adaptation Management&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="/wiki/Special:Node:330801/Unified_PaaS_component" title="Unified PaaS component"&gt;Unified PaaS component&lt;/a&gt;&lt;/p&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-02-07T12:22:03Z</dc:date> </entry> <entry> <title>Adaptation Management 1.4</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Adaptation+Management" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/Adaptation+Management</id> <updated>2017-02-07T11:35:06Z</updated> <published>2017-02-07T11:35:06Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Description"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Description&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Architecture"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Architecture&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#References"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;References&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Link"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Link&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Description"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Description&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;This component manages and processes adaptations plans. Those are the executable equivalent to the CAMEL definitions of Adaptation Rules and Adaptation Tasks.&lt;/p&gt; &lt;p&gt;&lt;img alt="am0.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=am0.png" /&gt; &lt;img alt="am1.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=am1.png" /&gt;&lt;/p&gt; &lt;a name="Architecture"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Architecture&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;The current Adaptation Management component consists of a REST-interface connected to a server that stores the adaptation plans. A plan is a represented as connected steps of a workflow.&lt;/p&gt; &lt;p&gt;[Figure REST interface / example]&lt;/p&gt; &lt;p&gt;[Figure communication AM, AM-C, AM-Test]&lt;/p&gt; &lt;a name="References"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;References&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;Deliverable D3.3 Deliverable D3.4&lt;/p&gt; &lt;a name="Link"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Link&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;&lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/adaptation-management"&gt;https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/adaptation-management&lt;/a&gt; &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/adaptation-management-test"&gt;https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/adaptation-management-test&lt;/a&gt; &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/adaptation-management-client"&gt;https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/adaptation-management-client&lt;/a&gt;&lt;/p&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-02-07T11:35:06Z</dc:date> </entry> <entry> <title>AXE Adaptation Framework 1.0</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/AXE+Adaptation+Framework" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/AXE+Adaptation+Framework</id> <updated>2017-02-07T08:37:28Z</updated> <published>2017-02-07T08:37:28Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Research_Problem"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Research Problem&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Solution_Approach"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Solution Approach&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Architecture"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;Architecture&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#References"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;References&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Link"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;Link&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Research_Problem"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Research Problem&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;Current Cloud Orchestration Tools have either too simplistic or too verbose methods of adaptation descriptions. Commercial tools have mainly simple approaches of adaptation, such as container scaling, and research-driven tools suffer of too loosely described methods that are hardly usable for the average customer. An example for the latter is the BPMN integration into TOSCA to describe workflow, for which the user has to implement the classes on their own.&lt;/p&gt; &lt;a name="Solution_Approach"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Solution Approach&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;We aim for an integrated component, that holds the CAMEL adaptation plans, which targets our requirements as described in D3.3. We are sure that we achieve a more useable approach than generic BPMN workflows, as our approach is very specific to the cloud. The Axe adaptation approach furthermore targets to be integrated as loosely coupled component that can be added to the Cloud Provider Engine / Cloudiator without changing internals.&lt;/p&gt; &lt;a name="Architecture"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Architecture&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;[Picture of Adaptation Management, Axe [MS] and how they communicate] The Adaptation Management component was integrated with the Axe component of the Cloudiator framework in a loosely coupled way. The figure above shows the integration into the components. As any other external component it uses the REST interface of Colosseum and changes the entities as described in the adaptation plans.&lt;/p&gt; &lt;a name="References"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;References&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;Deliverable D3.3 Deliverable D3.4&lt;/p&gt; &lt;a name="Link"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Link&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;Adaptation Management&lt;/p&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-02-07T08:37:28Z</dc:date> </entry> <entry> <title>OWL-Q Parser 2.0</title> <link rel="alternate" href="https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/OWL-Q+Parser" /> <author> <name>Wilfrid Utz</name> </author> <id>https://site.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/330801/OWL-Q+Parser</id> <updated>2017-02-03T18:36:35Z</updated> <published>2017-02-03T18:36:35Z</published> <summary type="html">&lt;table id="toc"&gt; &lt;tr&gt; &lt;td&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#Research_Problem"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Research Problem&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#Solution_Approach"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Solution Approach&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="#References"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;References&lt;/span&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;a name="Research_Problem"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Research Problem&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;Due to the heterogeneity, both structural and semantic, in QoS term description which is inherent in the service and cloud world, there is a need for introducing a semantic language which is able to cover the non-functional service description. As such, the use of such language will enable reaching better accuracy levels in service discovery and composition. Apart from non-functional service profiles and requests, this language should be able to specify SLAs in the way that extends the current state-of-the-art. This means that it should be complete enough in order to cover all information required for supporting the management of all service lifecycle activities.&lt;/p&gt; &lt;p&gt;The required language should be able to also specify KPIs as well as link them to goals in order to support BPaaS evaluation as well as goal analysis enabling broker to inspect whether their strategic, tactical and operational goals are satisfied. The current set of languages employed for this purposes suffer from the following drawbacks: (a) they are not rich or complete enough to cover the respective domain; (b) they are mapped to a quite technical level which is not suitable for business experts; (c) they are not able to exploit different information sources, even external to the respective BPaaS (management) system; (d) in some cases, they are not linked to goals.&lt;/p&gt; &lt;a name="Solution_Approach"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;Solution Approach&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;OWL-Q is a language which has been considered one of the most prominent non-functional service specification languages by survey papers in service quality description. This is due to its expressivity, richness and completeness (in terms of domain coverage) as well as to the fact that it relies on semantics and ontologies in particular. OWL-Q extends the W3C OWL standard and has been designed into several facets, each one focusing on different measurability aspects, including attribute, metric, unit (of measurement), and value type. It is also assorted by: (a) semantic rules specified in the SWRL language (W3C Submission) which enable the validation of OWL-Q models as well as the derivation of new knowledge that can take even the form of matches between quality terms. An overview of OWL-Q can be seen in the following two figures, where the first figure covers the 5 facets and the second the last one.&lt;/p&gt; &lt;p&gt;&lt;img alt="owlq_core.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=owlq_core.png" /&gt;&lt;/p&gt; &lt;p&gt;&lt;img alt="owlq_spec.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=owlq_spec.png" /&gt;&lt;/p&gt; &lt;p&gt;OWL-Q has been recently extended in order to also specify SLAs as well as cover the previously referred research gap in SLA description. In a nutshell, the OWL-Q SLA extension, named as Q-SLA, has the following capabilities: (a) it can specify both SLA and SLA templates; (b) it captures directly the notion of a Service Level (SL) to be delivered by a service which maps to a logical combination of Service Level Objectives (SLOs). The latter are simple constraints over quality terms; (c) it enables the transitioning from one SL to another in order to allow for flexibility in SLA management. In particular, such a SL transitioning can be beneficial for a signatory party as it enables the on-demand modification of the SL to be delivered without the need of performing a critical action, such as SLA re-negotiation. Such a modification might be required when specific party requirements are modified, e.g., due to increase in workload due to an increase of the party clientelle; (d) it associates an SLO to various important concepts, like qualifying conditions, dictating when the SLO should hold, as well as penalties and rewards to be supplied when the respective SLO is violated or surpassed, respectively; (e) it is able to specify service price models and connect then to the SLO penalties and rewards; (f) it enables the hierarchical specification of SLAs which is highly needed in the case of BPaaS services, which are cross-level agglomeration of cloud services; (g) finally it allows the definition of critical situations for settlement along with the respective actions that need to take place, such as SLA re-negotiation or cancelling. As Q-SLA builds on top of the OWL-Q specification facet, an overview of this extension is depicted in the following figure which uses different colours to characterise concepts which are original or new with respect to the OWL-Q language.&lt;/p&gt; &lt;p&gt;&lt;img alt="q-sla.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=q-sla.png" /&gt;&lt;/p&gt; &lt;p&gt;By again focusing on the respective research gap identified previously, another OWL-Q extension was developed in order to cover the modelling of KPIs and goals as well as their linkage. This extension is depicted in the following figure where different colours (red vs. other) are being used to denote extension or original OWL-Q concepts. In summary, the following features characterise this OWL-Q extension: (a) it specifies KPIs as extensions to simple constraints which are enhanced with the description of additional thresholds (warning apart from violation ones); (b) it enables issuing queries over databases or calling APIs and using the respective result as an input argument to a KPI metric formula; (c) it enables specifying direct relationships between KPIs (child-parent) in order to enable KPI drill-down to discover the root causes of a high-level KPI violation; (d) it covers the modelling of manual measurements as humans are usually another source of information apart from the automatic ones; (e) it allows the modelling of KPI evaluations which can assist in the checking of respective trends in BPaaS performance; (f) it covers the specification of goal hierarchies as well as the linking of goals to KPIs via goal contributions.&lt;/p&gt; &lt;p&gt;&lt;img alt="KPI2.png" class="wikiimg" src="/es_ES/c/wiki/get_page_attachment?p_l_id=335868&amp;nodeId=330801&amp;title=&amp;fileName=KPI2.png" /&gt;&lt;/p&gt; &lt;p&gt;Both OWL-Q as well as its extensions are supported by a JAVA programmatic API which enables the parsing as well as the serialisation of OWL-Q models. This API can be used to construct non-functional service matchmaking and selection algorithms as well as customised OWL-Q editors. For the time being, the latter type of editor does not yet exist but is planned to be developed. In case the interested reader and possible adopter of OWL-Q desires to manually edit an OWL-Q model, then he/she can use well-known ontology editors, like Protege, for now.&lt;/p&gt; &lt;p&gt;The source code is publicly available at &lt;a class="externallink" rel="nofollow" href="https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/owlq_parser"&gt;GitLab&lt;/a&gt;.&lt;/p&gt; &lt;a name="References"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span&gt;References&lt;/span&gt;&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;&lt;a class="externallink" rel="nofollow" href="https://www.cloudsocket.eu/documents/50743/50813/CloudSocket-D3.3-BPaaS+Allocation+Execution+Environment+Blueprints-v1.0.pdf/25cfc6d2-8ce9-42bf-96a8-54791a24e020"&gt;D3.3 - BPaaS Allocation and Execution Environment Blueprints&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a class="externallink" rel="nofollow" href="https://www.cloudsocket.eu/documents/251273/333738/CloudSocket_D3.4_BPaaS-Allocation-Execution-Environment-Prototypes-v1.0_FINAL.pdf/f6a8abce-a141-4817-84da-f7c10fa67a9e"&gt;D3.4 - BPaaS Allocation and Execution Environment Prototypes&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a class="externallink" rel="nofollow" href="https://www.cloudsocket.eu/documents/251273/333738/CloudSocket_D3.5_BPaaS-Monitoring-Evaluation-Blueprints-v1.0_20161223.pdf/1889a743-9458-4fd9-8b27-88ba5efca9c0"&gt;D3.5 - BPaaS Monitoring and Evaluation Blueprints&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;</summary> <dc:creator>Wilfrid Utz</dc:creator> <dc:date>2017-02-03T18:36:35Z</dc:date> </entry> </feed> 