<?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://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603" /> <subtitle /> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603</id> <updated>2026-05-15T00:31:36Z</updated> <dc:date>2026-05-15T00:31:36Z</dc:date> <entry> <title>Evaluation Environment Components 2.1</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Evaluation+Environment+Components" /> <author> <name>Kyriakos Kritikos</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/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:20603/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:20603/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:20603/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:20603/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:20603/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:20603/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:20603/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:20603/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:20603/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:20603/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:20603/Process_Mining_Engine" title="Process Mining Engine"&gt;Process Mining Engine&lt;/a&gt;) as well as the &lt;a href="/wiki/Special:Node:20603/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:20603/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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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:20603/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:20603/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:20603/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:20603/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:20603/Deployment_Discovery_Engine" title="Deployment Discovery Engine"&gt;Deployment Discovery Engine&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt;</summary> <dc:creator>Kyriakos Kritikos</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://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Conceptual+Analytics+Engine" /> <author> <name>Kyriakos Kritikos</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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>Kyriakos Kritikos</dc:creator> <dc:date>2017-05-25T13:13:59Z</dc:date> </entry> <entry> <title>Monitoring Engine (InfluxDB Prototype) 1.0</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Monitoring+Engine+%28InfluxDB+Prototype%29" /> <author> <name>Daniel Seybold</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/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>Daniel Seybold</dc:creator> <dc:date>2017-05-22T08:16:44Z</dc:date> </entry> <entry> <title>Workflow Engine Component 2.9</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Workflow+Engine+Component" /> <author> <name>Joaquin Iranzo Yuste</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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:20603/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:20603/Handbook_WFE" title="Handbook WFE"&gt;Handbook WFE&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="/wiki/Special:Node:20603/Developer_manual" title="Developer manual"&gt;Developer manual&lt;/a&gt;&lt;/p&gt;</summary> <dc:creator>Joaquin Iranzo Yuste</dc:creator> <dc:date>2017-04-20T13:43:38Z</dc:date> </entry> <entry> <title>Synergic Cross-Layer Monitoring Framework 1.1</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Synergic+Cross-Layer+Monitoring+Framework" /> <author> <name>Kyriakos Kritikos</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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="https://www.cloudsocket.eu/documents/10182/20690/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 href="https://www.cloudsocket.eu/documents/10182/20690/CloudSocket_D3.4_BPaaS-Allocation-Execution-Environment-Prototypes-v1.0_FINAL.pdf/4fa6e83c-4313-493d-98f4-a5effdecd115"&gt;D3.4 - BPaaS Allocation and Execution Environment Prototypes&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</summary> <dc:creator>Kyriakos Kritikos</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://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Synergic+Cross-Layer+Adaptation+Framework" /> <author> <name>Kyriakos Kritikos</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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="https://www.cloudsocket.eu/documents/10182/20690/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 href="https://www.cloudsocket.eu/documents/10182/20690/CloudSocket_D3.4_BPaaS-Allocation-Execution-Environment-Prototypes-v1.0_FINAL.pdf/4fa6e83c-4313-493d-98f4-a5effdecd115"&gt;D3.4 BPaaS Allocation and Execution Environment Prototypes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://www.cloudsocket.eu/group/guest/info-axe-adaptation-framework"&gt;AXE Adaptation Framework &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</summary> <dc:creator>Kyriakos Kritikos</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://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/PaaS+Orchestration+and+Adaptation" /> <author> <name>Frank Griesinger</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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:20603/Adaptation_Management" title="Adaptation Management"&gt;Adaptation Management&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="/wiki/Special:Node:20603/Unified_PaaS_component" title="Unified PaaS component"&gt;Unified PaaS component&lt;/a&gt;&lt;/p&gt;</summary> <dc:creator>Frank Griesinger</dc:creator> <dc:date>2017-02-07T12:22:03Z</dc:date> </entry> <entry> <title>Adaptation Management 1.4</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Adaptation+Management" /> <author> <name>Frank Griesinger</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&amp;title=&amp;fileName=am0.png" /&gt; &lt;img alt="am1.png" class="wikiimg" src="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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>Frank Griesinger</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://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/AXE+Adaptation+Framework" /> <author> <name>Frank Griesinger</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/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>Frank Griesinger</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://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/OWL-Q+Parser" /> <author> <name>Kyriakos Kritikos</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&amp;title=&amp;fileName=owlq_core.png" /&gt;&lt;/p&gt; &lt;p&gt;&lt;img alt="owlq_spec.png" class="wikiimg" src="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&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/10182/20690/CloudSocket_D3.4_BPaaS-Allocation-Execution-Environment-Prototypes-v1.0_FINAL.pdf/4fa6e83c-4313-493d-98f4-a5effdecd115"&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/10182/20690/CloudSocket_D3.5_BPaaS-Monitoring-Evaluation-Blueprints-v1.0_20161223.pdf/7b4af73f-c2d1-46e2-8073-1cedbeaf9196"&gt;D3.5 - BPaaS Monitoring and Evaluation Blueprints&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;</summary> <dc:creator>Kyriakos Kritikos</dc:creator> <dc:date>2017-02-03T18:36:35Z</dc:date> </entry> <entry> <title>Smart Service Discovery and Composition Blueprint 2.0</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Smart+Service+Discovery+and+Composition+Blueprint" /> <author> <name>Kyriakos Kritikos</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Smart+Service+Discovery+and+Composition+Blueprint</id> <updated>2017-02-03T17:37:28Z</updated> <published>2017-02-03T17: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;/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;The &lt;b&gt;Smart Service Discovery and Composition&lt;/b&gt; tool enables the automation of BPaaS allocation which is currently manually performed by the BPaaS broker. The BPaaS broker is currently faced with a two faced problem: (a) how to discover those services which are able to either realise the functionality of the BPaaS workflow service tasks or support the execution of the internal software components of these tasks; (b) how to select the best alternative from the service candidates of each task such that the user requirements at both the global and local level are optimised.&lt;/p&gt; &lt;p&gt;Concerning the first problem, the current state-of-the-art focuses on providing solutions on just one aspect, either the functional or the non-functional one. In many cases, the respective techniques do not exploit the service semantics. In addition, the alignment of QoS terms is usually not considered in non-functional service matchmaking. These two issues lead to low precision and recall in the service discovery process. Moreover, the execution time and the scalability of the respective discovery algorithms are usually not satisfactory due to the non-exploitation of smart techniques which attempt to cleverly organise the service advertisement space.&lt;/p&gt; &lt;p&gt;As far as the second problem is concerned, we need first to explicate that the service selection problem in BPaaS allocation is usually harder with respect to the selection of SaaS or IaaS services. This is due to the fact that both IaaS and SaaS selection are inter-dependent on each other. This means that the selection of an IaaS service can have an effect on the QoS at the SaaS level which can then influence the service selection at this latter level. As such, there is a need for an approach which is able to select both IaaS and SaaS services in conjunction by still taking into account all types of user requirements. Such an approach should also cater for the case where there are choices to be made even for the same service task in terms of selecting either an external SaaS to realise its functionality or an IaaS to support the execution of an internal software component (either owned or outsourced by the broker) that realises the functionality of this task.&lt;/p&gt; &lt;p&gt;Secondly, by focusing on individual level service selection, the proposed approaches usually exhibit various issues which include the following: (a) the dependencies between the different QoS terms are not considered; (b) pessimistic or average approach over service graph and available solution space is employed; (c) just a single value and not ranges of QoS values are considered to cater for the suitable service description in dynamic environments; (d) no solution is returned for over-constrained user requirements.&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;The &lt;b&gt;Smart Service Discovery and Composition&lt;/b&gt; tool enables both the semantic discovery of cloud services at different levels of abstraction as well as the concurrent selection of both SaaS &amp;amp; IaaS services for service-based workflow concretisation according to the broker functional and non-functional requirements.&lt;/p&gt; &lt;p&gt;The tool actually comprises two main modules dedicated to cloud service discovery and selection, respectively. As such, the respective feature presentation is done per each main module of this tool.&lt;/p&gt; &lt;p&gt;Concerning service discovery, the main features of the blueprint can be summarised as follows:&lt;/p&gt; &lt;pre&gt; - Supports both functional and non-functional semantic service discovery to cover all possible aspects in service description. The functional aspect is covered by OWL-S while the non-functional one by OWL-Q. - Smart service discovery is offered which enables boosting the service matchmaking time. Smartness is realised at two levels: (a) the transactional combination of aspect-specific matchmakers according to different composition semantics (currently parallel composition maps to the fastest implementation); (b) at the individual, aspect-specific level, each service matchmaker utilises smart structures in order to better organise the service advertisement space and accelerate the service matchmaking. - The tool enables not only the matchmaking but also the management (update, insertion, deletion) of the functional and non-functional service specifications. - A Java and REST API are offered to enable the service discovery and service specification management. &lt;/pre&gt; &lt;p&gt;As far as service selection is concerned, the respective module exhibits the following features:&lt;/p&gt; &lt;pre&gt; - concurrent selection of both IaaS and SaaS services to deliver purely optimal selection solutions for the service-based BPaaS workflow. - catering also for different realisation alternatives for a SaaS service: (a) either an external SaaS service can be exploited or (b) an internal one which also requires being hosted in a public or private cloud. In the latter case, the internal service code would be either purchased or has been developed internally by the broker organisation. - consideration of a great variety of non-functional requirements, including performance and reliability ones (over, e.g., response time, throughput, availability and reliability), security ones at both a coarse (in terms of security controls) and a fine-grained level (in terms of security SLOs) and cost. - capability to map low-level non-functional capabilities to higher-level ones in the form of dependency functions to cover any dependency gap within the respective optimisation problem. - capability to handle both linear and non-linear constraints as well as both real and integer-based variables (mapping to the coverage of the previous functions as well as aggregation ones over non-functional metrics (from component/service to application/workflow level)). - in case that a specific time deadline has to be provided, the respective solver can be configured to take it into consideration, thus being able to more rapidly produce solutions with a potential penalty over solution optimality. - parts of the problem can be fixed according to knowledge derived by a Knowledge Base by applying rules over the BPaaS execution history. &lt;/pre&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;This architecture of this tool, depicted in the following figure, includes three main levels: UI, business logic and database, while it certainly embraces service-orientation. It comprises the following components at the highest level:&lt;/p&gt; &lt;pre&gt; - The UI component offers the respective visualisation and editing means to enable the initialisation of service discovery and workflow concretisation interactions. At the background, it performs REST calls over the next component, the REST SDS service. - The REST SDS (Service Discovery and Selection) service encapsulates the whole functionality of the blueprint and enables its programmatic access via REST function calls. This functionality is offered via two different modules which focus on the two main parts of service discovery and selection. - The Service Discovery Module enables performing functional and non-functional service discovery via the supply of a combined OWL-S and OWL-Q request. - The Service Selection Module actually realises the service-based workflow concretisation functionality. As service discovery is a prerequisite for service-based workflow concretisation, this module is actually able to invoke the Service Discovery Module in order to obtain all possible (service) alternatives for each BPaaS workflow task. &lt;/pre&gt; &lt;p&gt;&lt;img alt="sdd.png" class="wikiimg" src="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&amp;title=&amp;fileName=sdd.png" /&gt;&lt;/p&gt; &lt;p&gt;This high-level architecture is further elaborated by concentrating on the internal architecture of the latter two modules. The latter architecture is also able to unveil the third level which was not apparent in the high-level architecture.&lt;/p&gt; &lt;p&gt;The architecture of the Service Discovery Module is depicted in the following figure. As it can be seen, the Specification Processor is the component which takes the user/broker input and attempts to validate it both syntactically, semantically as well as in a constraint-based manner. Once user input is validated, its non-functional part is also aligned according to a specific non-functional alignment algorithm operating over a (non-functional) term store. Both the aligned non-functional specification and the functional one are passed to the Compositor which then issues them to the respective aspect-specific matchmakers, which are named as Functional Matchmaking Module and NonFunctional Matchmaking Module. Depending on the type of functionality requested, different actions are actually performed. In case of service registration / updating / deletion, the corresponding matchmaker performs the required update and then informs the Compositor for its main result. For service registration and deletion, transactionality is guaranteed by the latter component. This means that if for some reason, an aspect-specific registration / deletion fails, then the other aspect-specific registration is also rolled back to maintain a consistent state in the whole system. To assist in transactionality enforcement, a Combined Registry can be consulted and managed by the Compositor which enables storing the mappings between functional and non-functional specifications of services.&lt;/p&gt; &lt;p&gt;&lt;img alt="sdm.png" class="wikiimg" src="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&amp;title=&amp;fileName=sdm.png" /&gt;&lt;/p&gt; &lt;p&gt;In case of service matchmaking, the Compositor realises the service discovery's composition logic by being able to execute different orchestration algorithms, such as sequential and parallel ones. In any case, the facilities of the respective matchmaking modules are exploited in order to support the required aspect-specific discovery functionality. Once both aspect-specific discovery results are obtained, then these are relayed back from the Compositor to the Specification Processor.&lt;/p&gt; &lt;p&gt;The Functional Matchmaking Module is a slight modification of the service matchmaker that has been developed in the Alive European project. Apart from being semantic, this matchmaker employs a smart structure and respective dynamic encoding scheme for domain ontologies that enables discovering concept ancestors or descendants in O(1) time, thus greatly speeding up the functional service matchmaking time where such ontology-based functions are highly needed and used. For simplification reasons, the internal architecture of this module can be seen as a combination of two main components: (a) the functional matchmaking algorithm and (b) the Functional Store as the storage medium for the functional specification of services.&lt;/p&gt; &lt;p&gt;The Non-Functional Matchmaking Module is an agglomeration of different non-functional matchmaking algorithms which are able to exploit two different techniques to perform the matchmaking: (a) constraint programming / solving and (b) ontology subsumption. The respective internal architecture of this module can be seen in the following figure. As it can be seen, it comprises 6 main components. The Broker is responsible for orchestrating the appropriate actions towards conducting the service matchmaking. It actually realises internally the service matchmaking logic and exploits the facilities of other components in order to realise part of the needed functionality. In particular, in case of constraint-based service matchmaking, the respective service request needs to be transformed into a constraint (satisfaction) problem (CSP) via the Transformer. This CSP is then exploited in order to realise a corresponding matchmaking metric which also takes into account the CSP model of the corresponding non-functional service specification by exploiting the facilities of the Constraint Solver. In case of ontology-based service matchmaking, an Ontology Reasoner is exploited in order to infer the subsumption hierarchy between a pair of service request and offer or between the service request and all the non-functional offers, depending on the respective ontology-based non-functional service matchmaking algorithm to be exploited.&lt;/p&gt; &lt;p&gt;The Service Selection Module follows a simplified architecture, depicted in the following figure, which comprises three main components: (a) the Service Selection Controller is responsible for the orchestration of the components involved in the service-based workflow concretisation. This component first invokes the Input Processor in order to construct the appropriate input for the actual optimisation problem construction. This means that based on the respective semantically-annotated service-based BPaaS workflow, the Input Processor performs service discovery for all the tasks involved according to both task-based functional and non-functional broker requirements provided in the form of annotations. This also means that this component takes into account the BPaaS CAMEL model in order to discover those IaaS offerings which satisfy the respective requirements posed for the BPaaS internal service components. Once all input has been gathered and extended, the Service Selection Controller invokes the Optimisation Problem Constructor with it in order to transform it into a constraint optimisation problem. The later problem is finally sent by the Service Selection Controller to the Constraint Solver for solving.&lt;/p&gt; &lt;p&gt;&lt;img alt="ssm.png" class="wikiimg" src="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&amp;title=&amp;fileName=ssm.png" /&gt;&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/service_discovery_composition"&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/10182/20690/CloudSocket_D3.4_BPaaS-Allocation-Execution-Environment-Prototypes-v1.0_FINAL.pdf/4fa6e83c-4313-493d-98f4-a5effdecd115"&gt;D3.4 - BPaaS Allocation and Execution Environment Prototypes&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;</summary> <dc:creator>Kyriakos Kritikos</dc:creator> <dc:date>2017-02-03T17:37:28Z</dc:date> </entry> <entry> <title>DMN-to-CAMEL Mapper 2.1</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/DMN-to-CAMEL+Mapper" /> <author> <name>Daniel Seybold</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/DMN-to-CAMEL+Mapper</id> <updated>2017-02-02T08:38:40Z</updated> <published>2017-02-02T08:38:40Z</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;/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;The &lt;b&gt;DMN-to-CAMEL-Mapper&lt;/b&gt; prototype reduces the technical complexity of the software component allocation by mapping high-level business requirements to the low-level cloud-specific description.&lt;/p&gt; &lt;p&gt;As business experts still require technical assistance for consuming cloud services and allocating the software components, the DMN-to-CAMEL-Mapper aims to create a way to semi-automatically handle the software component allocation and configuration based on high-level parameters. In this respect the &lt;b&gt;Decision Model and Notation (DMN)&lt;/b&gt; is applied.&lt;/p&gt; &lt;p&gt;DMN is an industry standard for modeling and executing decisions that are determined by business rules. The DMN standard provides a human-readable common notation for modelling and automating decisions. We choose &lt;b&gt;decision tables (DTs)&lt;/b&gt; to represent decisions as these are well known to business experts.&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;The DMN-to-CAMEL approach enables the modelling of cloud applications by using non-technical business values relating to business requirements, which will be mapped to the technical CAMEL model.&lt;/p&gt; &lt;p&gt;In terms of a running example, the DMN-to-CAMEL-Mapper can be used for creating different kind of deployment models for the ChristmasCardDesigner service. An example scenario, which can be solved with the prototype, is the following: The CAMEL deployment model fragment should be generated based on the desired cloud provider and the customer level bronze, silver and gold, where the business values are mapped to the respective virtual machine flavours. Therefore, the required DMN tables need to defined, which can be edited via the web-based editors offered by &lt;a class="externallink" rel="nofollow" href="https://www.cloudsocket.eu/BPAASDesigner/login.view"&gt;ADOxx&lt;/a&gt; or &lt;a class="externallink" rel="nofollow" href="https://camunda.org/dmn/simulator/"&gt;Camunda DMN Editor&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt; Defined DMN tables are registered at the DMN-to-CAMEL-Mapper and are executed via the provided REST API. The result of an exemplary call to get the deployment CAMEL fragment for the parameters &lt;i&gt;cloud provider = UULM&lt;/i&gt; and customer &lt;i&gt;level = gold&lt;/i&gt; can executed with the &lt;a class="externallink" rel="nofollow" href="http://134.60.64.155:8989/index.html"&gt;online instance&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;br /&gt; A more complex example with connected DMN tables could be used to determine the placement of the ChristmasCardDesigner software component based on the following business values: &lt;i&gt;software state&lt;/i&gt;, &lt;i&gt;customer level&lt;/i&gt;, &lt;i&gt;privacy&lt;/i&gt;, and &lt;i&gt;scalability&lt;/i&gt;. A first table can determine if the software component should be deployed on IaaS if the software state is final while PaaS is selected when the software state is development as PaaS supports the easy integration of continuous delivery of new software versions. Based on the decision connected tables can select the actual cloud provider, either a IaaS or a PaaS provider, based on the customer level and privacy values. Finally, is also possible to derive adaptation actions based on the scalability values, e.g. expected amount of users. In the end, a CAMEL model is returned, comprising the model fragment for the selected cloud provider and a model fragment with adaptation actions.&lt;/p&gt; &lt;p&gt;&lt;br /&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;A high-level overview of the DMN-to-CAMEL-Mapper architecture is provided in following figure. To execute a mapping, the prototype provides a REST interface as well as a &lt;b&gt;web-based UI&lt;/b&gt;. Due to the use of the &lt;b&gt;Swagger REST API&lt;/b&gt; description, it is possible to auto-generate also clients for all common programming languages that eases the integration in existing systems.&lt;/p&gt; &lt;p&gt;&lt;img alt="dmn-camel-architecture.png" class="wikiimg" src="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&amp;title=&amp;fileName=dmn-camel-architecture.png" /&gt;&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/dmn-to-camel-mapper"&gt;GitLab&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Try out the first version of the prototype by yourself:&lt;/b&gt; &lt;a class="externallink" rel="nofollow" href="http://134.60.64.155:8989/index.html"&gt;DMN-to-CAMEL-Mapper service&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/10182/20690/CloudSocket_D3.4_BPaaS-Allocation-Execution-Environment-Prototypes-v1.0_FINAL.pdf/4fa6e83c-4313-493d-98f4-a5effdecd115"&gt;D3.4 - BPaaS Allocation and Execution Environment Prototypes&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Griesinger, Frank; Seybold, Daniel; Domaschka, J&amp;ouml;rg; Kritikos, Kyriakos und Woitsch, Robert,A DMN-based Approach for Dynamic Deployment Modelling of Cloud Applications, ESOCC 2016&lt;/li&gt; &lt;/ul&gt;</summary> <dc:creator>Daniel Seybold</dc:creator> <dc:date>2017-02-02T08:38:40Z</dc:date> </entry> <entry> <title>Service Replacement 1.0</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Service+Replacement" /> <author> <name>Frank Griesinger</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Service+Replacement</id> <updated>2016-12-24T04:24:33Z</updated> <published>2016-12-24T04:24:33Z</published> <summary type="html">&lt;p&gt;&lt;b&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ASCII&amp;quot;?&amp;gt; &amp;lt;camel:CamelModel &lt;pre&gt; xmi:version=&amp;quot;2.0&amp;quot; xmlns:xmi=&amp;quot;http://www.omg.org/XMI&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:adaptation=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/adaptation&amp;quot; xmlns:camel=&amp;quot;http://www.cloudsocket.eu/2016/05/camel&amp;quot; xmlns:deployment=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/deployment&amp;quot; xmlns:metric=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/metric&amp;quot; xmlns:provider=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/provider&amp;quot; xmlns:requirement=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/requirement&amp;quot; xmlns:type=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/type&amp;quot; xmlns:unit=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/unit&amp;quot; xsi:schemaLocation=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/adaptation camel.ecore#//adaptation http://www.cloudsocket.eu/2016/05/camel camel.ecore http://www.cloudsocket.eu/2016/05/camel/deployment camel.ecore#//deployment http://www.cloudsocket.eu/2016/05/camel/metric camel.ecore#//metric http://www.cloudsocket.eu/2016/05/camel/provider camel.ecore#//provider http://www.cloudsocket.eu/2016/05/camel/requirement camel.ecore#//requirement http://www.cloudsocket.eu/2016/05/camel/type camel.ecore#//type http://www.cloudsocket.eu/2016/05/camel/unit camel.ecore#//unit&amp;quot; name=&amp;quot;ChristmasCardSendingModel&amp;quot;&amp;gt; &amp;lt;applications name=&amp;quot;ChristmasCardSending&amp;quot; version=&amp;quot;1.0&amp;quot; owner=&amp;quot;//@organisationModels.0/@organisation&amp;quot;/&amp;gt; &amp;lt;deploymentModels name=&amp;quot;ChristmasCardSendingDeployment&amp;quot; globalVMRequirementSet=&amp;quot;//@deploymentModels.0/@vmRequirementSets.1&amp;quot;&amp;gt; &amp;lt;internalComponents xsi:type=&amp;quot;deployment:InternalServiceComponent&amp;quot; name=&amp;quot;CardDesigner&amp;quot; type=&amp;quot;SERVLET&amp;quot; serviceType=&amp;quot;REST&amp;quot;&amp;gt; &amp;lt;configurations xsi:type=&amp;quot;deployment:ScriptConfiguration&amp;quot; name=&amp;quot;CardDesignerConfiguration&amp;quot; downloadCommand=&amp;quot;'sudo apt-get install -y curl'&amp;quot; installCommand=&amp;quot;'curl -o demoapp_install_ubuntu.sh https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/prototype_v1_files/raw/master/demoapp_install_ubuntu.sh &amp;amp;&amp;amp; chmod +x demoapp_install_ubuntu.sh &amp;amp;&amp;amp; ./demoapp_install_ubuntu.sh'&amp;quot; startCommand=&amp;quot;'/apache-tomcat-7.0.65/bin/catalina.sh run'&amp;quot; os=&amp;quot;Ubuntu&amp;quot;/&amp;gt; &amp;lt;requiredHost name=&amp;quot;CardDesignerRequiredHost&amp;quot;/&amp;gt; &amp;lt;workflowTaskIDs&amp;gt;sid-1C5E88D8-C7E3-4FAC-85E5-FAD80099C28B&amp;lt;/workflowTaskIDs&amp;gt; &amp;lt;workflowTaskIDs&amp;gt;sid-D891CCD3-40B6-4555-9C84-81BECCDCB1C2&amp;lt;/workflowTaskIDs&amp;gt; &amp;lt;workflowTaskIDs&amp;gt;sid-B99151C2-9914-4E71-9540-9DFE38334B7B&amp;lt;/workflowTaskIDs&amp;gt; &amp;lt;/internalComponents&amp;gt; &amp;lt;internalComponents xsi:type=&amp;quot;deployment:InternalServiceComponent&amp;quot; name=&amp;quot;EmailService&amp;quot; type=&amp;quot;SERVLET&amp;quot;&amp;gt; &amp;lt;requiredHost name=&amp;quot;EmailServiceRequiredHost&amp;quot;/&amp;gt; &amp;lt;workflowTaskIDs&amp;gt;sid-A952A4DD-CED9-440F-82FC-A6DE0568780A&amp;lt;/workflowTaskIDs&amp;gt; &amp;lt;/internalComponents&amp;gt; &amp;lt;internalComponentInstances xsi:type=&amp;quot;deployment:InternalServiceComponentInstance&amp;quot; name=&amp;quot;CardDesignerInstance&amp;quot; type=&amp;quot;//@deploymentModels.0/@internalComponents.0&amp;quot; endpoint=&amp;quot;http://localhost:8080/demo-app-1.0/services/cardDesigner&amp;quot;&amp;gt; &amp;lt;requiredHostInstance name=&amp;quot;CardDesignerInstanceRequiredHost&amp;quot; type=&amp;quot;//@deploymentModels.0/@internalComponents.0/@requiredHost&amp;quot;/&amp;gt; &amp;lt;/internalComponentInstances&amp;gt; &amp;lt;internalComponentInstances xsi:type=&amp;quot;deployment:InternalServiceComponentInstance&amp;quot; name=&amp;quot;EmailServiceInstance&amp;quot; type=&amp;quot;//@deploymentModels.0/@internalComponents.1&amp;quot; endpoint=&amp;quot;http://localhost:8080/service/wsdl/ZimbraService.wsdl&amp;quot;&amp;gt; &amp;lt;requiredHostInstance name=&amp;quot;EmailInstanceRequiredHost&amp;quot; type=&amp;quot;//@deploymentModels.0/@internalComponents.1/@requiredHost&amp;quot;/&amp;gt; &amp;lt;/internalComponentInstances&amp;gt; &amp;lt;vms name=&amp;quot;CardDesignerVM&amp;quot; vmRequirementSet=&amp;quot;//@deploymentModels.0/@vmRequirementSets.0&amp;quot;&amp;gt; &amp;lt;providedHosts name=&amp;quot;CardDesignerVMProvidedHost&amp;quot;/&amp;gt; &amp;lt;/vms&amp;gt; &amp;lt;vms name=&amp;quot;EmailServiceVM&amp;quot;&amp;gt; &amp;lt;providedHosts name=&amp;quot;EmailServiceProvidedHost&amp;quot;/&amp;gt; &amp;lt;/vms&amp;gt; &amp;lt;vmInstances name=&amp;quot;CardDesignerVMInstance&amp;quot; type=&amp;quot;//@deploymentModels.0/@vms.0&amp;quot; vmType=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; vmTypeValue=&amp;quot;//@providerModels.0/@constraints.12/@attributeConstraints.0/@fromValue&amp;quot;&amp;gt; &amp;lt;providedHostInstances name=&amp;quot;CardDesignerVMInstanceProvidedHost&amp;quot; type=&amp;quot;//@deploymentModels.0/@vms.0/@providedHosts.0&amp;quot;/&amp;gt; &amp;lt;/vmInstances&amp;gt; &amp;lt;vmInstances name=&amp;quot;EmailServicePrivateVMInstance&amp;quot; type=&amp;quot;//@deploymentModels.0/@vms.1&amp;quot; vmType=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; vmTypeValue=&amp;quot;//@typeModels.0/@dataTypes.10/@values.1&amp;quot;&amp;gt; &amp;lt;providedHostInstances name=&amp;quot;EmailServicePrivateVMInstanceProvidedHost&amp;quot; type=&amp;quot;//@deploymentModels.0/@vms.1/@providedHosts.0&amp;quot;/&amp;gt; &amp;lt;/vmInstances&amp;gt; &amp;lt;hostings name=&amp;quot;CardDesignerToVM&amp;quot; providedHost=&amp;quot;//@deploymentModels.0/@vms.0/@providedHosts.0&amp;quot; requiredHost=&amp;quot;//@deploymentModels.0/@internalComponents.0/@requiredHost&amp;quot;/&amp;gt; &amp;lt;hostings name=&amp;quot;EmailServiceToVM&amp;quot; providedHost=&amp;quot;//@deploymentModels.0/@vms.1/@providedHosts.0&amp;quot; requiredHost=&amp;quot;//@deploymentModels.0/@internalComponents.1/@requiredHost&amp;quot;/&amp;gt; &amp;lt;hostingInstances name=&amp;quot;CardDesignerInstanceToVMInstance&amp;quot; type=&amp;quot;//@deploymentModels.0/@hostings.0&amp;quot; providedHostInstance=&amp;quot;//@deploymentModels.0/@vmInstances.0/@providedHostInstances.0&amp;quot; requiredHostInstance=&amp;quot;//@deploymentModels.0/@internalComponentInstances.0/@requiredHostInstance&amp;quot;/&amp;gt; &amp;lt;hostingInstances name=&amp;quot;EmailServiceInstanceToVMInstance&amp;quot; type=&amp;quot;//@deploymentModels.0/@hostings.1&amp;quot; providedHostInstance=&amp;quot;//@deploymentModels.0/@vmInstances.1/@providedHostInstances.0&amp;quot; requiredHostInstance=&amp;quot;//@deploymentModels.0/@internalComponentInstances.1/@requiredHostInstance&amp;quot;/&amp;gt; &amp;lt;vmRequirementSets name=&amp;quot;CardDesignerVMRequirementSet&amp;quot; quantitativeHardwareRequirement=&amp;quot;//@requirementModels.0/@requirements.3&amp;quot;/&amp;gt; &amp;lt;vmRequirementSets name=&amp;quot;GlobalVMRequirementSet&amp;quot; locationRequirement=&amp;quot;//@requirementModels.0/@requirements.4&amp;quot; osOrImageRequirement=&amp;quot;//@requirementModels.0/@requirements.2&amp;quot;/&amp;gt; &amp;lt;vmRequirementSets name=&amp;quot;EmailServiceVMRequirementSet&amp;quot; quantitativeHardwareRequirement=&amp;quot;//@requirementModels.0/@requirements.5&amp;quot;/&amp;gt; &amp;lt;/deploymentModels&amp;gt; &amp;lt;locationModels name=&amp;quot;ChristmasCardSendingLocation&amp;quot;&amp;gt; &amp;lt;regions id=&amp;quot;EU&amp;quot; name=&amp;quot;Europe&amp;quot;/&amp;gt; &amp;lt;/locationModels&amp;gt; &amp;lt;metricModels name=&amp;quot;ChristmasCardSendingMetric&amp;quot;&amp;gt; &amp;lt;contexts xsi:type=&amp;quot;metric:RawMetricContext&amp;quot; name=&amp;quot;RawResponseTimeContext&amp;quot; component=&amp;quot;//@deploymentModels.0/@internalComponents.1&amp;quot; application=&amp;quot;//@applications.0&amp;quot; metric=&amp;quot;//@metricModels.0/@metrics.0&amp;quot; sensor=&amp;quot;//@metricModels.0/@sensors.0&amp;quot;/&amp;gt; &amp;lt;metrics xsi:type=&amp;quot;metric:RawMetric&amp;quot; name=&amp;quot;RawResponseTime&amp;quot; unit=&amp;quot;//@unitModels.0/@units.0&amp;quot; property=&amp;quot;//@metricModels.0/@properties.0&amp;quot;/&amp;gt; &amp;lt;conditions xsi:type=&amp;quot;metric:MetricCondition&amp;quot; name=&amp;quot;RTLeqSixty&amp;quot; comparisonOperator=&amp;quot;LESS_EQUAL_THAN&amp;quot; threshold=&amp;quot;60.0&amp;quot; metricContext=&amp;quot;//@metricModels.0/@contexts.0&amp;quot;/&amp;gt; &amp;lt;properties name=&amp;quot;ResponseTime&amp;quot; type=&amp;quot;MEASURABLE&amp;quot;/&amp;gt; &amp;lt;sensors name=&amp;quot;ResponseTimeSensor&amp;quot;/&amp;gt; &amp;lt;/metricModels&amp;gt; &amp;lt;organisationModels name=&amp;quot;BrokerOrganisation&amp;quot;&amp;gt; &amp;lt;organisation name=&amp;quot;Broker&amp;quot; email=&amp;quot;info@broker.com&amp;quot;/&amp;gt; &amp;lt;/organisationModels&amp;gt; &amp;lt;providerModels name=&amp;quot;OmistackProvider&amp;quot;&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.SMALL_Constraint_Mapping&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.2&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.small&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;2048&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.3&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.small&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.5&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.small&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;20&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.8&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.small&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/2&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.LARGE_Constraint_Mapping&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.2&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.large&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;8192&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.3&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.large&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.5&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.large&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;80&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.8&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.large&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/4&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97_Constraint_Mapping_OS_CREDENTIALS&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.1&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;Ubuntu Server 14.04.2 AMD64 LTS&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.6&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;UNIX&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.7&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;AMD64&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.10&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;ubuntu&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938_Constraint_Mapping_OS_CREDENTIALS&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.1&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;Windows2012R2_PW_No_Firewall_0.2&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.6&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;WINDOWS&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.7&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;AMD64&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.10&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;Administrator&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.11&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;Admin1&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.TINY_Constraint_Mapping&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.2&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.tiny&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;512&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.3&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.tiny&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.5&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.tiny&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.8&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.tiny&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/1&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.MEDIUM_Constraint_Mapping&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.2&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.medium&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;4096&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.3&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.medium&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.5&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.medium&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;40&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.8&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.medium&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/3&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.XLARGE_Constraint_Mapping&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.2&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.xlarge&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;16384&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.3&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.xlarge&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;8&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.5&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.xlarge&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;160&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.8&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.xlarge&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/5&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.SMALL_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints name=&amp;quot;&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.small&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.LARGE_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints name=&amp;quot;&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.large&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.TINY_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints name=&amp;quot;&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.tiny&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.MEDIUM_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints name=&amp;quot;&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.medium&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.XLARGE_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints name=&amp;quot;&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.xlarge&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;rootFeature name=&amp;quot;Omistack&amp;quot;&amp;gt; &amp;lt;attributes name=&amp;quot;DeploymentModel&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.4&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;Private&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;attributes name=&amp;quot;ServiceModel&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.4&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;IaaS&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;attributes name=&amp;quot;Availability&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.4&amp;quot; unitType=&amp;quot;PERCENTAGE&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;95&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;attributes name=&amp;quot;Driver&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.4&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;openstack-nova&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;attributes name=&amp;quot;EndPoint&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.4&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;http://omistack-beta.e-technik.uni-ulm.de:5000/v2.0&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;attributes name=&amp;quot;Name&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.4&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;omistack&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;subFeatures name=&amp;quot;VM&amp;quot;&amp;gt; &amp;lt;attributes name=&amp;quot;VMType&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.10&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;VMOS&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.1&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;VMMemory&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.6&amp;quot; unitType=&amp;quot;MEGABYTES&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;VMCores&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.11&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;CostPerHour&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.3&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;VMStorage&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.5&amp;quot; unitType=&amp;quot;GIGABYTES&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;OSVendorType&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.7&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;OSArchitecture&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.8&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;VMTypeCloudProviderId&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.0&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;VMImageId&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.2&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;DefaultLoginName&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.12&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;DefaultLoginPassword&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.13&amp;quot;/&amp;gt; &amp;lt;featureCardinality cardinalityMin=&amp;quot;1&amp;quot; cardinalityMax=&amp;quot;8&amp;quot;/&amp;gt; &amp;lt;/subFeatures&amp;gt; &amp;lt;subFeatures name=&amp;quot;Location&amp;quot;&amp;gt; &amp;lt;attributes name=&amp;quot;LocationId&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.9&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;Longitude&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:FloatsValue&amp;quot; value=&amp;quot;9.96291&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;attributes name=&amp;quot;Latitude&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:FloatsValue&amp;quot; value=&amp;quot;48.42599&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;subFeatures name=&amp;quot;EU&amp;quot;&amp;gt; &amp;lt;subFeatures name=&amp;quot;Germany&amp;quot;&amp;gt; &amp;lt;subFeatures name=&amp;quot;Ulm&amp;quot;&amp;gt; &amp;lt;featureCardinality cardinalityMin=&amp;quot;1&amp;quot; cardinalityMax=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/subFeatures&amp;gt; &amp;lt;featureCardinality cardinalityMin=&amp;quot;1&amp;quot; cardinalityMax=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/subFeatures&amp;gt; &amp;lt;featureCardinality cardinalityMin=&amp;quot;1&amp;quot; cardinalityMax=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/subFeatures&amp;gt; &amp;lt;featureCardinality cardinalityMin=&amp;quot;1&amp;quot; cardinalityMax=&amp;quot;1&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/subFeatures&amp;gt; &amp;lt;featureCardinality cardinalityMin=&amp;quot;1&amp;quot; cardinalityMax=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/rootFeature&amp;gt; &amp;lt;/providerModels&amp;gt; &amp;lt;requirementModels name=&amp;quot;ChristmasCardSendingRequirement&amp;quot;&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:InternalComponentRequirement&amp;quot; name=&amp;quot;TomcatBetweenSevenAndEight&amp;quot; minVersion=&amp;quot;7.0&amp;quot; minVersionIncluded=&amp;quot;true&amp;quot; maxVersion=&amp;quot;8.0&amp;quot; maxVersionIncluded=&amp;quot;true&amp;quot;/&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:PaaSRequirement&amp;quot; name=&amp;quot;CardDesignerPaaSRequirement&amp;quot;&amp;gt; &amp;lt;pricingTypes&amp;gt;METERED&amp;lt;/pricingTypes&amp;gt; &amp;lt;statusTypes&amp;gt;PRODUCTION&amp;lt;/statusTypes&amp;gt; &amp;lt;runtimeTypes&amp;gt;JAVA&amp;lt;/runtimeTypes&amp;gt; &amp;lt;/requirements&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:OSRequirement&amp;quot; name=&amp;quot;UbuntuRequirement&amp;quot; os=&amp;quot;ubuntu&amp;quot;/&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:QuantitativeHardwareRequirement&amp;quot; name=&amp;quot;CardDesignerHWRequirement&amp;quot; minCPU=&amp;quot;1.0&amp;quot; minCores=&amp;quot;2&amp;quot; minRAM=&amp;quot;4096&amp;quot; minStorage=&amp;quot;20&amp;quot;/&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:LocationRequirement&amp;quot; name=&amp;quot;EuropeLocationRequirement&amp;quot; locations=&amp;quot;//@locationModels.0/@regions.0&amp;quot;/&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:QuantitativeHardwareRequirement&amp;quot; name=&amp;quot;EmailServiceHWRequirement&amp;quot; minCPU=&amp;quot;1.0&amp;quot; minCores=&amp;quot;4&amp;quot; minRAM=&amp;quot;8192&amp;quot; minStorage=&amp;quot;40&amp;quot;/&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:ServiceLevelObjective&amp;quot; name=&amp;quot;RTLeqSixtySLO&amp;quot; customServiceLevel=&amp;quot;//@metricModels.0/@conditions.0&amp;quot;/&amp;gt; &amp;lt;/requirementModels&amp;gt; &amp;lt;adaptationModels name=&amp;quot;ChristmasCardSendingAdaptation&amp;quot;&amp;gt; &amp;lt;rules name=&amp;quot;Replace&amp;quot; event=&amp;quot;//@adaptationModels.0/@events.0&amp;quot; task=&amp;quot;//@adaptationModels.0/@tasks.0&amp;quot; entity=&amp;quot;//@organisationModels.0/@organisation&amp;quot;/&amp;gt; &amp;lt;events xsi:type=&amp;quot;adaptation:NonFunctionalEvent&amp;quot; name=&amp;quot;ViolRTCondition&amp;quot; metricCondition=&amp;quot;//@metricModels.0/@conditions.0&amp;quot; isViolation=&amp;quot;true&amp;quot;/&amp;gt; &amp;lt;tasks xsi:type=&amp;quot;adaptation:ServiceReplacement&amp;quot; name=&amp;quot;ReplaceEmailService&amp;quot; previousService=&amp;quot;//@deploymentModels.0/@internalComponents.1&amp;quot;/&amp;gt; &amp;lt;/adaptationModels&amp;gt; &amp;lt;typeModels name=&amp;quot;OmistackType&amp;quot;&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;VMTypeCloudProviderIdEnum&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/2&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/4&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/1&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/3&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/5&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;VMOsEnum&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;Ubuntu Server 14.04.2 AMD64 LTS&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;Windows2012R2_PW_No_Firewall_0.2&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;VMImageIdEnum&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Range&amp;quot; name=&amp;quot;CostRange&amp;quot; primitiveType=&amp;quot;DoubleType&amp;quot;&amp;gt; &amp;lt;lowerLimit included=&amp;quot;true&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:DoublePrecisionValue&amp;quot; value=&amp;quot;0.054&amp;quot;/&amp;gt; &amp;lt;/lowerLimit&amp;gt; &amp;lt;upperLimit included=&amp;quot;true&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:DoublePrecisionValue&amp;quot; value=&amp;quot;0.095&amp;quot;/&amp;gt; &amp;lt;/upperLimit&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:StringValueType&amp;quot; name=&amp;quot;StringValueType&amp;quot; primitiveType=&amp;quot;StringType&amp;quot;/&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:List&amp;quot; name=&amp;quot;StorageList&amp;quot;&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;20&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;80&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;40&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;160&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:List&amp;quot; name=&amp;quot;MemoryList&amp;quot;&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;2048&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;8192&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;512&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;4096&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;16384&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;OSVendorType&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;WINDOWS&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;UNIX&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;OSArchitectureType&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;AMD64&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;LocationIdType&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;VMTypeEnumeration&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;m1.small&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;m1.large&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;m1.tiny&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;m1.medium&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;m1.xlarge&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:List&amp;quot; name=&amp;quot;CoresList&amp;quot;&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;8&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:List&amp;quot; name=&amp;quot;LoginNameList&amp;quot; primitiveType=&amp;quot;StringType&amp;quot;&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;Administrator&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;ubuntu&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:List&amp;quot; name=&amp;quot;LoginPasswordList&amp;quot; primitiveType=&amp;quot;StringType&amp;quot;&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;Admin1&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;/typeModels&amp;gt; &amp;lt;unitModels name=&amp;quot;ChristmasCardSendingUnit&amp;quot;&amp;gt; &amp;lt;units xsi:type=&amp;quot;unit:TimeIntervalUnit&amp;quot; name=&amp;quot;Seconds&amp;quot; unit=&amp;quot;SECONDS&amp;quot;/&amp;gt; &amp;lt;units xsi:type=&amp;quot;unit:TransactionUnit&amp;quot; name=&amp;quot;CapacityUnit&amp;quot; unit=&amp;quot;TRANSACTIONS&amp;quot;/&amp;gt; &amp;lt;/unitModels&amp;gt; &lt;/pre&gt; &amp;lt;/camel:CamelModel&amp;gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;/b&gt;&lt;/p&gt;</summary> <dc:creator>Frank Griesinger</dc:creator> <dc:date>2016-12-24T04:24:33Z</dc:date> </entry> <entry> <title>Cloud Bursting 1.0</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Cloud+Bursting" /> <author> <name>Frank Griesinger</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Cloud+Bursting</id> <updated>2016-12-24T04:23:53Z</updated> <published>2016-12-24T04:23:53Z</published> <summary type="html">&lt;p&gt;&lt;b&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ASCII&amp;quot;?&amp;gt; &amp;lt;camel:CamelModel &lt;pre&gt; xmi:version=&amp;quot;2.0&amp;quot; xmlns:xmi=&amp;quot;http://www.omg.org/XMI&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:adaptation=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/adaptation&amp;quot; xmlns:camel=&amp;quot;http://www.cloudsocket.eu/2016/05/camel&amp;quot; xmlns:deployment=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/deployment&amp;quot; xmlns:metric=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/metric&amp;quot; xmlns:provider=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/provider&amp;quot; xmlns:requirement=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/requirement&amp;quot; xmlns:type=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/type&amp;quot; xmlns:unit=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/unit&amp;quot; xsi:schemaLocation=&amp;quot;http://www.cloudsocket.eu/2016/05/camel/adaptation camel.ecore#//adaptation http://www.cloudsocket.eu/2016/05/camel camel.ecore http://www.cloudsocket.eu/2016/05/camel/deployment camel.ecore#//deployment http://www.cloudsocket.eu/2016/05/camel/metric camel.ecore#//metric http://www.cloudsocket.eu/2016/05/camel/provider camel.ecore#//provider http://www.cloudsocket.eu/2016/05/camel/requirement camel.ecore#//requirement http://www.cloudsocket.eu/2016/05/camel/type camel.ecore#//type http://www.cloudsocket.eu/2016/05/camel/unit camel.ecore#//unit&amp;quot; name=&amp;quot;ChristmasCardSendingModel&amp;quot;&amp;gt; &amp;lt;applications name=&amp;quot;ChristmasCardSending&amp;quot; version=&amp;quot;1.0&amp;quot; owner=&amp;quot;//@organisationModels.0/@organisation&amp;quot;/&amp;gt; &amp;lt;deploymentModels name=&amp;quot;ChristmasCardSendingDeployment&amp;quot; globalVMRequirementSet=&amp;quot;//@deploymentModels.0/@vmRequirementSets.1&amp;quot;&amp;gt; &amp;lt;internalComponents xsi:type=&amp;quot;deployment:InternalServiceComponent&amp;quot; name=&amp;quot;CardDesigner&amp;quot; type=&amp;quot;SERVLET&amp;quot; serviceType=&amp;quot;REST&amp;quot;&amp;gt; &amp;lt;configurations xsi:type=&amp;quot;deployment:ScriptConfiguration&amp;quot; name=&amp;quot;CardDesignerConfiguration&amp;quot; downloadCommand=&amp;quot;'sudo apt-get install -y curl'&amp;quot; installCommand=&amp;quot;'curl -o demoapp_install_ubuntu.sh https://omi-gitlab.e-technik.uni-ulm.de/cloudsocket/prototype_v1_files/raw/master/demoapp_install_ubuntu.sh &amp;amp;&amp;amp; chmod +x demoapp_install_ubuntu.sh &amp;amp;&amp;amp; ./demoapp_install_ubuntu.sh'&amp;quot; startCommand=&amp;quot;'/apache-tomcat-7.0.65/bin/catalina.sh run'&amp;quot; os=&amp;quot;Ubuntu&amp;quot;/&amp;gt; &amp;lt;requiredHost name=&amp;quot;CardDesignerRequiredHost&amp;quot;/&amp;gt; &amp;lt;workflowTaskIDs&amp;gt;sid-1C5E88D8-C7E3-4FAC-85E5-FAD80099C28B&amp;lt;/workflowTaskIDs&amp;gt; &amp;lt;workflowTaskIDs&amp;gt;sid-D891CCD3-40B6-4555-9C84-81BECCDCB1C2&amp;lt;/workflowTaskIDs&amp;gt; &amp;lt;workflowTaskIDs&amp;gt;sid-B99151C2-9914-4E71-9540-9DFE38334B7B&amp;lt;/workflowTaskIDs&amp;gt; &amp;lt;/internalComponents&amp;gt; &amp;lt;internalComponents xsi:type=&amp;quot;deployment:InternalServiceComponent&amp;quot; name=&amp;quot;EmailService&amp;quot; type=&amp;quot;SERVLET&amp;quot;&amp;gt; &amp;lt;requiredHost name=&amp;quot;EmailServiceRequiredHost&amp;quot;/&amp;gt; &amp;lt;workflowTaskIDs&amp;gt;sid-A952A4DD-CED9-440F-82FC-A6DE0568780A&amp;lt;/workflowTaskIDs&amp;gt; &amp;lt;/internalComponents&amp;gt; &amp;lt;internalComponentInstances xsi:type=&amp;quot;deployment:InternalServiceComponentInstance&amp;quot; name=&amp;quot;CardDesignerInstance&amp;quot; type=&amp;quot;//@deploymentModels.0/@internalComponents.0&amp;quot; endpoint=&amp;quot;http://localhost:8080/demo-app-1.0/services/cardDesigner&amp;quot;&amp;gt; &amp;lt;requiredHostInstance name=&amp;quot;CardDesignerInstanceRequiredHost&amp;quot; type=&amp;quot;//@deploymentModels.0/@internalComponents.0/@requiredHost&amp;quot;/&amp;gt; &amp;lt;/internalComponentInstances&amp;gt; &amp;lt;internalComponentInstances xsi:type=&amp;quot;deployment:InternalServiceComponentInstance&amp;quot; name=&amp;quot;EmailServiceInstance&amp;quot; type=&amp;quot;//@deploymentModels.0/@internalComponents.1&amp;quot; endpoint=&amp;quot;http://localhost:8080/service/wsdl/ZimbraService.wsdl&amp;quot;&amp;gt; &amp;lt;requiredHostInstance name=&amp;quot;EmailInstanceRequiredHost&amp;quot; type=&amp;quot;//@deploymentModels.0/@internalComponents.1/@requiredHost&amp;quot;/&amp;gt; &amp;lt;/internalComponentInstances&amp;gt; &amp;lt;vms name=&amp;quot;CardDesignerVM&amp;quot; vmRequirementSet=&amp;quot;//@deploymentModels.0/@vmRequirementSets.0&amp;quot;&amp;gt; &amp;lt;providedHosts name=&amp;quot;CardDesignerVMProvidedHost&amp;quot;/&amp;gt; &amp;lt;/vms&amp;gt; &amp;lt;vms name=&amp;quot;EmailServiceVM&amp;quot;&amp;gt; &amp;lt;providedHosts name=&amp;quot;EmailServiceProvidedHost&amp;quot;/&amp;gt; &amp;lt;/vms&amp;gt; &amp;lt;vms name=&amp;quot;EmailServicePublicVM&amp;quot; vmRequirementSet=&amp;quot;//@deploymentModels.0/@vmRequirementSets.3&amp;quot;&amp;gt; &amp;lt;providedHosts name=&amp;quot;EmailServicePublicVMProvidedHost&amp;quot;/&amp;gt; &amp;lt;/vms&amp;gt; &amp;lt;vmInstances name=&amp;quot;CardDesignerVMInstance&amp;quot; type=&amp;quot;//@deploymentModels.0/@vms.0&amp;quot; vmType=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; vmTypeValue=&amp;quot;//@typeModels.0/@dataTypes.10/@values.3&amp;quot;&amp;gt; &amp;lt;providedHostInstances name=&amp;quot;CardDesignerVMInstanceProvidedHost&amp;quot; type=&amp;quot;//@deploymentModels.0/@vms.0/@providedHosts.0&amp;quot;/&amp;gt; &amp;lt;/vmInstances&amp;gt; &amp;lt;vmInstances name=&amp;quot;EmailServicePrivateVMInstance&amp;quot; type=&amp;quot;//@deploymentModels.0/@vms.1&amp;quot; vmType=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; vmTypeValue=&amp;quot;//@typeModels.0/@dataTypes.10/@values.1&amp;quot;&amp;gt; &amp;lt;providedHostInstances name=&amp;quot;EmailServicePrivateVMInstanceProvidedHost&amp;quot; type=&amp;quot;//@deploymentModels.0/@vms.1/@providedHosts.0&amp;quot;/&amp;gt; &amp;lt;/vmInstances&amp;gt; &amp;lt;hostings name=&amp;quot;CardDesignerToVM&amp;quot; providedHost=&amp;quot;//@deploymentModels.0/@vms.0/@providedHosts.0&amp;quot; requiredHost=&amp;quot;//@deploymentModels.0/@internalComponents.0/@requiredHost&amp;quot;/&amp;gt; &amp;lt;hostings name=&amp;quot;EmailServiceToVM&amp;quot; providedHost=&amp;quot;//@deploymentModels.0/@vms.1/@providedHosts.0&amp;quot; requiredHost=&amp;quot;//@deploymentModels.0/@internalComponents.1/@requiredHost&amp;quot;/&amp;gt; &amp;lt;hostingInstances name=&amp;quot;CardDesignerInstanceToVMInstance&amp;quot; type=&amp;quot;//@deploymentModels.0/@hostings.0&amp;quot; providedHostInstance=&amp;quot;//@deploymentModels.0/@vmInstances.0/@providedHostInstances.0&amp;quot; requiredHostInstance=&amp;quot;//@deploymentModels.0/@internalComponentInstances.0/@requiredHostInstance&amp;quot;/&amp;gt; &amp;lt;hostingInstances name=&amp;quot;EmailServiceInstanceToVMInstance&amp;quot; type=&amp;quot;//@deploymentModels.0/@hostings.1&amp;quot; providedHostInstance=&amp;quot;//@deploymentModels.0/@vmInstances.1/@providedHostInstances.0&amp;quot; requiredHostInstance=&amp;quot;//@deploymentModels.0/@internalComponentInstances.1/@requiredHostInstance&amp;quot;/&amp;gt; &amp;lt;vmRequirementSets name=&amp;quot;CardDesignerVMRequirementSet&amp;quot; quantitativeHardwareRequirement=&amp;quot;//@requirementModels.0/@requirements.3&amp;quot;/&amp;gt; &amp;lt;vmRequirementSets name=&amp;quot;GlobalVMRequirementSet&amp;quot; locationRequirement=&amp;quot;//@requirementModels.0/@requirements.4&amp;quot; osOrImageRequirement=&amp;quot;//@requirementModels.0/@requirements.2&amp;quot;/&amp;gt; &amp;lt;vmRequirementSets name=&amp;quot;EmailServiceVMRequirementSet&amp;quot; quantitativeHardwareRequirement=&amp;quot;//@requirementModels.0/@requirements.5&amp;quot;/&amp;gt; &amp;lt;vmRequirementSets name=&amp;quot;EmailServicePublicVMRequirementSet&amp;quot; providerRequirement=&amp;quot;//@requirementModels.0/@requirements.6&amp;quot; quantitativeHardwareRequirement=&amp;quot;//@requirementModels.0/@requirements.5&amp;quot;/&amp;gt; &amp;lt;/deploymentModels&amp;gt; &amp;lt;locationModels name=&amp;quot;ChristmasCardSendingLocation&amp;quot;&amp;gt; &amp;lt;regions id=&amp;quot;EU&amp;quot; name=&amp;quot;Europe&amp;quot;/&amp;gt; &amp;lt;/locationModels&amp;gt; &amp;lt;metricModels name=&amp;quot;ChristmasCardSendingMetric&amp;quot;&amp;gt; &amp;lt;contexts xsi:type=&amp;quot;metric:RawMetricContext&amp;quot; name=&amp;quot;RawResponseTimeContext&amp;quot; component=&amp;quot;//@deploymentModels.0/@internalComponents.1&amp;quot; application=&amp;quot;//@applications.0&amp;quot; metric=&amp;quot;//@metricModels.0/@metrics.0&amp;quot; sensor=&amp;quot;//@metricModels.0/@sensors.0&amp;quot;/&amp;gt; &amp;lt;contexts xsi:type=&amp;quot;metric:RawMetricContext&amp;quot; name=&amp;quot;CapacityContext&amp;quot; application=&amp;quot;//@applications.0&amp;quot; metric=&amp;quot;//@metricModels.0/@metrics.1&amp;quot; sensor=&amp;quot;//@metricModels.0/@sensors.1&amp;quot;/&amp;gt; &amp;lt;metrics xsi:type=&amp;quot;metric:RawMetric&amp;quot; name=&amp;quot;RawResponseTime&amp;quot; unit=&amp;quot;//@unitModels.0/@units.0&amp;quot; property=&amp;quot;//@metricModels.0/@properties.0&amp;quot;/&amp;gt; &amp;lt;metrics xsi:type=&amp;quot;metric:RawMetric&amp;quot; name=&amp;quot;CapacityMetric&amp;quot; unit=&amp;quot;//@unitModels.0/@units.1&amp;quot; layer=&amp;quot;IaaS&amp;quot; property=&amp;quot;//@metricModels.0/@properties.1&amp;quot;/&amp;gt; &amp;lt;conditions xsi:type=&amp;quot;metric:MetricCondition&amp;quot; name=&amp;quot;RTLeqTwenty&amp;quot; comparisonOperator=&amp;quot;LESS_EQUAL_THAN&amp;quot; threshold=&amp;quot;20.0&amp;quot; metricContext=&amp;quot;//@metricModels.0/@contexts.0&amp;quot;/&amp;gt; &amp;lt;conditions xsi:type=&amp;quot;metric:MetricCondition&amp;quot; name=&amp;quot;CapacityEqZero&amp;quot; comparisonOperator=&amp;quot;EQUAL&amp;quot; metricContext=&amp;quot;//@metricModels.0/@contexts.1&amp;quot;/&amp;gt; &amp;lt;properties name=&amp;quot;ResponseTime&amp;quot; type=&amp;quot;MEASURABLE&amp;quot;/&amp;gt; &amp;lt;properties name=&amp;quot;Capacity&amp;quot; type=&amp;quot;MEASURABLE&amp;quot;/&amp;gt; &amp;lt;sensors name=&amp;quot;ResponseTimeSensor&amp;quot;/&amp;gt; &amp;lt;sensors name=&amp;quot;CapacitySensor&amp;quot;/&amp;gt; &amp;lt;/metricModels&amp;gt; &amp;lt;organisationModels name=&amp;quot;BrokerOrganisation&amp;quot;&amp;gt; &amp;lt;organisation name=&amp;quot;Broker&amp;quot; email=&amp;quot;info@broker.com&amp;quot;/&amp;gt; &amp;lt;/organisationModels&amp;gt; &amp;lt;providerModels name=&amp;quot;OmistackProvider&amp;quot;&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.SMALL_Constraint_Mapping&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.2&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.small&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;2048&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.3&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.small&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.5&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.small&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;20&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.8&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.small&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/2&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.LARGE_Constraint_Mapping&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.2&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.large&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;8192&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.3&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.large&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.5&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.large&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;80&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.8&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.large&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/4&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97_Constraint_Mapping_OS_CREDENTIALS&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.1&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;Ubuntu Server 14.04.2 AMD64 LTS&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.6&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;UNIX&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.7&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;AMD64&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.10&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;ubuntu&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938_Constraint_Mapping_OS_CREDENTIALS&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.1&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;Windows2012R2_PW_No_Firewall_0.2&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.6&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;WINDOWS&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.7&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;AMD64&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.10&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;Administrator&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.11&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;Admin1&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.9&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.TINY_Constraint_Mapping&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.2&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.tiny&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;512&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.3&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.tiny&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.5&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.tiny&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.8&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.tiny&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/1&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.MEDIUM_Constraint_Mapping&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.2&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.medium&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;4096&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.3&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.medium&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.5&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.medium&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;40&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.8&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.medium&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/3&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.XLARGE_Constraint_Mapping&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot;&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.2&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.xlarge&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;16384&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.3&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.xlarge&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;8&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.5&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.xlarge&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;160&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;attributeConstraints from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.8&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.xlarge&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne/5&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.SMALL_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints name=&amp;quot;&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.small&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.LARGE_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints name=&amp;quot;&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.large&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.TINY_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints name=&amp;quot;&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.tiny&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.MEDIUM_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints name=&amp;quot;&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.medium&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;constraints xsi:type=&amp;quot;provider:Implies&amp;quot; name=&amp;quot;M1.XLARGE_Constraint_Mapping_LOCATION&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1&amp;quot;&amp;gt; &amp;lt;attributeConstraints name=&amp;quot;&amp;quot; from=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.0/@attributes.0&amp;quot; to=&amp;quot;//@providerModels.0/@rootFeature/@subFeatures.1/@attributes.0&amp;quot;&amp;gt; &amp;lt;fromValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;m1.xlarge&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;toValue xsi:type=&amp;quot;type:EnumerateValue&amp;quot; name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/attributeConstraints&amp;gt; &amp;lt;/constraints&amp;gt; &amp;lt;rootFeature name=&amp;quot;Omistack&amp;quot;&amp;gt; &amp;lt;attributes name=&amp;quot;DeploymentModel&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.4&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;Private&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;attributes name=&amp;quot;ServiceModel&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.4&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;IaaS&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;attributes name=&amp;quot;Availability&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.4&amp;quot; unitType=&amp;quot;PERCENTAGE&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;95&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;attributes name=&amp;quot;Driver&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.4&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;openstack-nova&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;attributes name=&amp;quot;EndPoint&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.4&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;http://omistack-beta.e-technik.uni-ulm.de:5000/v2.0&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;attributes name=&amp;quot;Name&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.4&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;omistack&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;subFeatures name=&amp;quot;VM&amp;quot;&amp;gt; &amp;lt;attributes name=&amp;quot;VMType&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.10&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;VMOS&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.1&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;VMMemory&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.6&amp;quot; unitType=&amp;quot;MEGABYTES&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;VMCores&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.11&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;CostPerHour&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.3&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;VMStorage&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.5&amp;quot; unitType=&amp;quot;GIGABYTES&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;OSVendorType&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.7&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;OSArchitecture&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.8&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;VMTypeCloudProviderId&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.0&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;VMImageId&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.2&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;DefaultLoginName&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.12&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;DefaultLoginPassword&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.13&amp;quot;/&amp;gt; &amp;lt;featureCardinality cardinalityMin=&amp;quot;1&amp;quot; cardinalityMax=&amp;quot;8&amp;quot;/&amp;gt; &amp;lt;/subFeatures&amp;gt; &amp;lt;subFeatures name=&amp;quot;Location&amp;quot;&amp;gt; &amp;lt;attributes name=&amp;quot;LocationId&amp;quot; valueType=&amp;quot;//@typeModels.0/@dataTypes.9&amp;quot;/&amp;gt; &amp;lt;attributes name=&amp;quot;Longitude&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:FloatsValue&amp;quot; value=&amp;quot;9.96291&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;attributes name=&amp;quot;Latitude&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:FloatsValue&amp;quot; value=&amp;quot;48.42599&amp;quot;/&amp;gt; &amp;lt;/attributes&amp;gt; &amp;lt;subFeatures name=&amp;quot;EU&amp;quot;&amp;gt; &amp;lt;subFeatures name=&amp;quot;Germany&amp;quot;&amp;gt; &amp;lt;subFeatures name=&amp;quot;Ulm&amp;quot;&amp;gt; &amp;lt;featureCardinality cardinalityMin=&amp;quot;1&amp;quot; cardinalityMax=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/subFeatures&amp;gt; &amp;lt;featureCardinality cardinalityMin=&amp;quot;1&amp;quot; cardinalityMax=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/subFeatures&amp;gt; &amp;lt;featureCardinality cardinalityMin=&amp;quot;1&amp;quot; cardinalityMax=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/subFeatures&amp;gt; &amp;lt;featureCardinality cardinalityMin=&amp;quot;1&amp;quot; cardinalityMax=&amp;quot;1&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/subFeatures&amp;gt; &amp;lt;featureCardinality cardinalityMin=&amp;quot;1&amp;quot; cardinalityMax=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/rootFeature&amp;gt; &amp;lt;/providerModels&amp;gt; &amp;lt;requirementModels name=&amp;quot;ChristmasCardSendingRequirement&amp;quot;&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:InternalComponentRequirement&amp;quot; name=&amp;quot;TomcatBetweenSevenAndEight&amp;quot; minVersion=&amp;quot;7.0&amp;quot; minVersionIncluded=&amp;quot;true&amp;quot; maxVersion=&amp;quot;8.0&amp;quot; maxVersionIncluded=&amp;quot;true&amp;quot;/&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:PaaSRequirement&amp;quot; name=&amp;quot;CardDesignerPaaSRequirement&amp;quot;&amp;gt; &amp;lt;pricingTypes&amp;gt;METERED&amp;lt;/pricingTypes&amp;gt; &amp;lt;statusTypes&amp;gt;PRODUCTION&amp;lt;/statusTypes&amp;gt; &amp;lt;runtimeTypes&amp;gt;JAVA&amp;lt;/runtimeTypes&amp;gt; &amp;lt;/requirements&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:OSRequirement&amp;quot; name=&amp;quot;UbuntuRequirement&amp;quot; os=&amp;quot;ubuntu&amp;quot;/&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:QuantitativeHardwareRequirement&amp;quot; name=&amp;quot;CardDesignerHWRequirement&amp;quot; minCPU=&amp;quot;1.0&amp;quot; minCores=&amp;quot;2&amp;quot; minRAM=&amp;quot;4096&amp;quot; minStorage=&amp;quot;20&amp;quot;/&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:LocationRequirement&amp;quot; name=&amp;quot;EuropeLocationRequirement&amp;quot; locations=&amp;quot;//@locationModels.0/@regions.0&amp;quot;/&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:QuantitativeHardwareRequirement&amp;quot; name=&amp;quot;EmailServiceHWRequirement&amp;quot; minCPU=&amp;quot;1.0&amp;quot; minCores=&amp;quot;4&amp;quot; minRAM=&amp;quot;8192&amp;quot; minStorage=&amp;quot;40&amp;quot;/&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:ProviderRequirement&amp;quot; name=&amp;quot;PublicProvider&amp;quot;/&amp;gt; &amp;lt;requirements xsi:type=&amp;quot;requirement:ServiceLevelObjective&amp;quot; name=&amp;quot;RTLeqTwentySLO&amp;quot; customServiceLevel=&amp;quot;//@metricModels.0/@conditions.0&amp;quot;/&amp;gt; &amp;lt;/requirementModels&amp;gt; &amp;lt;adaptationModels name=&amp;quot;ChristmasCardSendingAdaptation&amp;quot;&amp;gt; &amp;lt;rules name=&amp;quot;BURST&amp;quot; event=&amp;quot;//@adaptationModels.0/@events.2&amp;quot; task=&amp;quot;//@adaptationModels.0/@tasks.0&amp;quot; entity=&amp;quot;//@organisationModels.0/@organisation&amp;quot;/&amp;gt; &amp;lt;events xsi:type=&amp;quot;adaptation:NonFunctionalEvent&amp;quot; name=&amp;quot;ViolRTCondition&amp;quot; metricCondition=&amp;quot;//@metricModels.0/@conditions.0&amp;quot; isViolation=&amp;quot;true&amp;quot;/&amp;gt; &amp;lt;events xsi:type=&amp;quot;adaptation:NonFunctionalEvent&amp;quot; name=&amp;quot;ViolCapacityCondition&amp;quot; metricCondition=&amp;quot;//@metricModels.0/@conditions.1&amp;quot; isViolation=&amp;quot;true&amp;quot;/&amp;gt; &amp;lt;events xsi:type=&amp;quot;adaptation:BinaryEventPattern&amp;quot; name=&amp;quot;BurstEventPattern&amp;quot; leftEvent=&amp;quot;//@adaptationModels.0/@events.0&amp;quot; rightEvent=&amp;quot;//@adaptationModels.0/@events.1&amp;quot;/&amp;gt; &amp;lt;tasks xsi:type=&amp;quot;adaptation:ComponentDeployment&amp;quot; name=&amp;quot;EmailServiceOnPublicCloud&amp;quot; components=&amp;quot;//@deploymentModels.0/@internalComponents.1&amp;quot; vm=&amp;quot;//@deploymentModels.0/@vms.2&amp;quot;/&amp;gt; &amp;lt;/adaptationModels&amp;gt; &amp;lt;typeModels name=&amp;quot;OmistackType&amp;quot;&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;VMTypeCloudProviderIdEnum&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/2&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/4&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/1&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/3&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/5&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;VMOsEnum&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;Ubuntu Server 14.04.2 AMD64 LTS&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;Windows2012R2_PW_No_Firewall_0.2&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;VMImageIdEnum&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/11a845d0-7ed3-48c8-a36a-9a76a2fe4938&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;RegionOne/9c154d9a-fab9-4507-a3d7-21b72d31de97&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Range&amp;quot; name=&amp;quot;CostRange&amp;quot; primitiveType=&amp;quot;DoubleType&amp;quot;&amp;gt; &amp;lt;lowerLimit included=&amp;quot;true&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:DoublePrecisionValue&amp;quot; value=&amp;quot;0.054&amp;quot;/&amp;gt; &amp;lt;/lowerLimit&amp;gt; &amp;lt;upperLimit included=&amp;quot;true&amp;quot;&amp;gt; &amp;lt;value xsi:type=&amp;quot;type:DoublePrecisionValue&amp;quot; value=&amp;quot;0.095&amp;quot;/&amp;gt; &amp;lt;/upperLimit&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:StringValueType&amp;quot; name=&amp;quot;StringValueType&amp;quot; primitiveType=&amp;quot;StringType&amp;quot;/&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:List&amp;quot; name=&amp;quot;StorageList&amp;quot;&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;20&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;80&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;40&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;160&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:List&amp;quot; name=&amp;quot;MemoryList&amp;quot;&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;2048&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;8192&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;512&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;4096&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;16384&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;OSVendorType&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;WINDOWS&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;UNIX&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;OSArchitectureType&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;AMD64&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;LocationIdType&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;RegionOne&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:Enumeration&amp;quot; name=&amp;quot;VMTypeEnumeration&amp;quot;&amp;gt; &amp;lt;values name=&amp;quot;m1.small&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;m1.large&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;m1.tiny&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;m1.medium&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt; &amp;lt;values name=&amp;quot;m1.xlarge&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:List&amp;quot; name=&amp;quot;CoresList&amp;quot;&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:IntegerValue&amp;quot; value=&amp;quot;8&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:List&amp;quot; name=&amp;quot;LoginNameList&amp;quot; primitiveType=&amp;quot;StringType&amp;quot;&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;Administrator&amp;quot;/&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;ubuntu&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;dataTypes xsi:type=&amp;quot;type:List&amp;quot; name=&amp;quot;LoginPasswordList&amp;quot; primitiveType=&amp;quot;StringType&amp;quot;&amp;gt; &amp;lt;values xsi:type=&amp;quot;type:StringsValue&amp;quot; value=&amp;quot;Admin1&amp;quot;/&amp;gt; &amp;lt;/dataTypes&amp;gt; &amp;lt;/typeModels&amp;gt; &amp;lt;unitModels name=&amp;quot;ChristmasCardSendingUnit&amp;quot;&amp;gt; &amp;lt;units xsi:type=&amp;quot;unit:TimeIntervalUnit&amp;quot; name=&amp;quot;Seconds&amp;quot; unit=&amp;quot;SECONDS&amp;quot;/&amp;gt; &amp;lt;units xsi:type=&amp;quot;unit:TransactionUnit&amp;quot; name=&amp;quot;CapacityUnit&amp;quot; unit=&amp;quot;TRANSACTIONS&amp;quot;/&amp;gt; &amp;lt;/unitModels&amp;gt; &lt;/pre&gt; &amp;lt;/camel:CamelModel&amp;gt;&lt;/b&gt;&lt;/p&gt;</summary> <dc:creator>Frank Griesinger</dc:creator> <dc:date>2016-12-24T04:23:53Z</dc:date> </entry> <entry> <title>PaaS Deployment 1.0</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/PaaS+Deployment" /> <author> <name>Frank Griesinger</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/PaaS+Deployment</id> <updated>2016-12-24T01:45:01Z</updated> <published>2016-12-24T01:45:01Z</published> <summary type="html">&lt;p&gt;&amp;lt;?xml version=&lt;em&gt;&amp;#034;1.0&amp;#034;&lt;/em&gt; encoding=&lt;em&gt;&amp;#034;ASCII&amp;#034;&lt;/em&gt;?&amp;gt; &lt;/p&gt;&lt;p&gt;&amp;lt;camel:CamelModel &lt;/p&gt;&lt;p&gt;    xmi:version=&lt;em&gt;&amp;#034;2.0&amp;#034;&lt;/em&gt;    xmlns:xmi=&lt;em&gt;&amp;#034;http://www.omg.org/XMI&amp;#034;&lt;/em&gt;    xmlns:xsi=&lt;em&gt;&amp;#034;http://www.w3.org/2001/XMLSchema-instance&amp;#034;&lt;/em&gt;    xmlns:camel=&lt;em&gt;&amp;#034;http://www.cloudsocket.eu/2016/05/camel&amp;#034;&lt;/em&gt;    xmlns:deployment=&lt;em&gt;&amp;#034;http://www.cloudsocket.eu/2016/05/camel/deployment&amp;#034;&lt;/em&gt;    xmlns:provider=&lt;em&gt;&amp;#034;http://www.cloudsocket.eu/2016/05/camel/provider&amp;#034;&lt;/em&gt;    xmlns:requirement=&lt;em&gt;&amp;#034;http://www.cloudsocket.eu/2016/05/camel/requirement&amp;#034;&lt;/em&gt;    xmlns:type=&lt;em&gt;&amp;#034;http://www.cloudsocket.eu/2016/05/camel/type&amp;#034;&lt;/em&gt;    xsi:schemaLocation=&lt;em&gt;&amp;#034;http://www.cloudsocket.eu/2016/05/camel camel.ecore http://www.cloudsocket.eu/2016/05/camel/deployment camel.ecore#&lt;/em&gt;deployment http://www.cloudsocket.eu/2016/05/camel/provider camel.ecore#&lt;em&gt;provider http://www.cloudsocket.eu/2016/05/camel/requirement camel.ecore#&lt;/em&gt;requirement http://www.cloudsocket.eu/2016/05/camel/type camel.ecore#&lt;em&gt;type&amp;#034;&lt;/em&gt;    name=&lt;em&gt;&amp;#034;ChristmasCardSendingModel&amp;#034;&lt;/em&gt;&amp;gt;  &amp;lt;applications      name=&lt;em&gt;&amp;#034;ChristmasCardSending&amp;#034;&lt;/em&gt;      version=&lt;em&gt;&amp;#034;1.0&amp;#034;&lt;/em&gt;      owner=&lt;em&gt;&amp;#034;&lt;/em&gt;@organisationModels.0/@organisation&amp;#034;&lt;em&gt;/&amp;gt;  &amp;lt;deploymentModels      name=&lt;/em&gt;&amp;#034;ChristmasCardSendingDeployment&amp;#034;&lt;em&gt;&amp;gt;    &amp;lt;internalComponents        xsi:type=&lt;/em&gt;&amp;#034;deployment:InternalServiceComponent&amp;#034;&lt;em&gt;        name=&lt;/em&gt;&amp;#034;CardDesigner&amp;#034;&lt;em&gt;        type=&lt;/em&gt;&amp;#034;SERVLET&amp;#034;&lt;em&gt;        serviceType=&lt;/em&gt;&amp;#034;REST&amp;#034;&lt;em&gt;&amp;gt;      &amp;lt;configurations          xsi:type=&lt;/em&gt;&amp;#034;deployment:PaaSConfiguration&amp;#034;&lt;em&gt;          name=&lt;/em&gt;&amp;#034;CardDesignerPaaSConfiguration&amp;#034;&lt;em&gt;          api=&lt;/em&gt;&amp;#034;PUL&amp;#034;&lt;em&gt;          version=&lt;/em&gt;&amp;#034;1.0&amp;#034;&lt;em&gt;          endpoint=&lt;/em&gt;&amp;#034;&amp;#034;&lt;em&gt;/&amp;gt;      &amp;lt;requiredHost          name=&lt;/em&gt;&amp;#034;CardDesignerRequiredHost&amp;#034;&lt;em&gt;/&amp;gt;      &amp;lt;workflowTaskIDs&amp;gt;sid-1C5E88D8-C7E3-4FAC-85E5-FAD80099C28B&amp;lt;/workflowTaskIDs&amp;gt;      &amp;lt;workflowTaskIDs&amp;gt;sid-D891CCD3-40B6-4555-9C84-81BECCDCB1C2&amp;lt;/workflowTaskIDs&amp;gt;      &amp;lt;workflowTaskIDs&amp;gt;sid-B99151C2-9914-4E71-9540-9DFE38334B7B&amp;lt;/workflowTaskIDs&amp;gt;    &amp;lt;/internalComponents&amp;gt;    &amp;lt;internalComponents        name=&lt;/em&gt;&amp;#034;tomcat&amp;#034;&lt;em&gt;        type=&lt;/em&gt;&amp;#034;SERVLET_CONTAINER&amp;#034;&lt;em&gt;        internalComponentRequirement=&lt;/em&gt;&amp;#034;&lt;em&gt;@requirementModels.0/@requirements.0&amp;#034;&lt;/em&gt;&amp;gt;      &amp;lt;providedHosts          name=&lt;em&gt;&amp;#034;TomcatProvidedHost&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;requiredHost          name=&lt;em&gt;&amp;#034;TomcatRequiredHost&amp;#034;&lt;/em&gt;/&amp;gt;    &amp;lt;/internalComponents&amp;gt;    &amp;lt;internalComponentInstances        xsi:type=&lt;em&gt;&amp;#034;deployment:InternalServiceComponentInstance&amp;#034;&lt;/em&gt;        name=&lt;em&gt;&amp;#034;CardDesignerInstance&amp;#034;&lt;/em&gt;        type=&lt;em&gt;&amp;#034;&lt;/em&gt;@deploymentModels.0/@internalComponents.0&amp;#034;&lt;em&gt;        endpoint=&lt;/em&gt;&amp;#034;http://localhost:8080/demo-app-1.0/services/cardDesigner&amp;#034;&lt;em&gt;&amp;gt;      &amp;lt;requiredHostInstance          name=&lt;/em&gt;&amp;#034;CardDesignerInstanceRequiredHost&amp;#034;&lt;em&gt;          type=&lt;/em&gt;&amp;#034;&lt;em&gt;@deploymentModels.0/@internalComponents.0/@requiredHost&amp;#034;&lt;/em&gt;/&amp;gt;    &amp;lt;/internalComponentInstances&amp;gt;    &amp;lt;internalComponentInstances        name=&lt;em&gt;&amp;#034;TomcatInstance&amp;#034;&lt;/em&gt;        type=&lt;em&gt;&amp;#034;&lt;/em&gt;@deploymentModels.0/@internalComponents.1&amp;#034;&lt;em&gt;&amp;gt;      &amp;lt;providedHostInstances          name=&lt;/em&gt;&amp;#034;TomcatInstanceProvidedHost&amp;#034;&lt;em&gt;          type=&lt;/em&gt;&amp;#034;&lt;em&gt;@deploymentModels.0/@internalComponents.1/@providedHosts.0&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;requiredHostInstance          name=&lt;em&gt;&amp;#034;TomcatInstanceRequiredHost&amp;#034;&lt;/em&gt;          type=&lt;em&gt;&amp;#034;&lt;/em&gt;@deploymentModels.0/@internalComponents.1/@requiredHost&amp;#034;&lt;em&gt;/&amp;gt;    &amp;lt;/internalComponentInstances&amp;gt;    &amp;lt;hostings        name=&lt;/em&gt;&amp;#034;TomcatToCardDesigner&amp;#034;&lt;em&gt;        providedHost=&lt;/em&gt;&amp;#034;&lt;em&gt;@deploymentModels.0/@internalComponents.1/@providedHosts.0&amp;#034;&lt;/em&gt;        requiredHost=&lt;em&gt;&amp;#034;&lt;/em&gt;@deploymentModels.0/@internalComponents.0/@requiredHost&amp;#034;&lt;em&gt;/&amp;gt;    &amp;lt;hostings        name=&lt;/em&gt;&amp;#034;PaaSToTomcat&amp;#034;&lt;em&gt;        providedHost=&lt;/em&gt;&amp;#034;&lt;em&gt;@deploymentModels.0/@paas.0/@providedHosts.0&amp;#034;&lt;/em&gt;        requiredHost=&lt;em&gt;&amp;#034;&lt;/em&gt;@deploymentModels.0/@internalComponents.1/@requiredHost&amp;#034;&lt;em&gt;/&amp;gt;    &amp;lt;hostingInstances        name=&lt;/em&gt;&amp;#034;PaaSInstanceToTomcatInstance&amp;#034;&lt;em&gt;        type=&lt;/em&gt;&amp;#034;&lt;em&gt;@deploymentModels.0/@hostings.1&amp;#034;&lt;/em&gt;        providedHostInstance=&lt;em&gt;&amp;#034;&lt;/em&gt;@deploymentModels.0/@paasInstances.0/@providedHostInstances.0&amp;#034;&lt;em&gt;        requiredHostInstance=&lt;/em&gt;&amp;#034;&lt;em&gt;@deploymentModels.0/@internalComponentInstances.1/@requiredHostInstance&amp;#034;&lt;/em&gt;/&amp;gt;    &amp;lt;hostingInstances        name=&lt;em&gt;&amp;#034;TomcatInstanceToCardDesignerInstance&amp;#034;&lt;/em&gt;        type=&lt;em&gt;&amp;#034;&lt;/em&gt;@deploymentModels.0/@hostings.0&amp;#034;&lt;em&gt;        providedHostInstance=&lt;/em&gt;&amp;#034;&lt;em&gt;@deploymentModels.0/@internalComponentInstances.1/@providedHostInstances.0&amp;#034;&lt;/em&gt;        requiredHostInstance=&lt;em&gt;&amp;#034;&lt;/em&gt;@deploymentModels.0/@internalComponentInstances.0/@requiredHostInstance&amp;#034;&lt;em&gt;/&amp;gt;    &amp;lt;vmRequirementSets        name=&lt;/em&gt;&amp;#034;CardDesignerPaaSVMRequirementSet&amp;#034;&lt;em&gt;        locationRequirement=&lt;/em&gt;&amp;#034;&lt;em&gt;@requirementModels.0/@requirements.5&amp;#034;&lt;/em&gt;        providerRequirement=&lt;em&gt;&amp;#034;&lt;/em&gt;@requirementModels.0/@requirements.3&amp;#034;&lt;em&gt;        quantitativeHardwareRequirement=&lt;/em&gt;&amp;#034;&lt;em&gt;@requirementModels.0/@requirements.4&amp;#034;&lt;/em&gt;        osOrImageRequirement=&lt;em&gt;&amp;#034;&lt;/em&gt;@requirementModels.0/@requirements.2&amp;#034;&lt;em&gt;/&amp;gt;    &amp;lt;saas name=&lt;/em&gt;&amp;#034;EmailService&amp;#034;&lt;em&gt;        registryID=&lt;/em&gt;&amp;#034;&amp;#034;&lt;em&gt;&amp;gt;      &amp;lt;workflowTaskIDs&amp;gt;sid-A952A4DD-CED9-440F-82FC-A6DE0568780A&amp;lt;/workflowTaskIDs&amp;gt;    &amp;lt;/saas&amp;gt;    &amp;lt;saasInstances        name=&lt;/em&gt;&amp;#034;EmailServiceInstance&amp;#034;&lt;em&gt;        type=&lt;/em&gt;&amp;#034;&lt;em&gt;@deploymentModels.0/@saas.0&amp;#034;&lt;/em&gt;        serviceType=&lt;em&gt;&amp;#034;REST&amp;#034;&lt;/em&gt;&amp;gt;      &amp;lt;endpoints&amp;gt;https://api.sendgrid.com/api/mail.send.json&amp;lt;/endpoints&amp;gt;    &amp;lt;/saasInstances&amp;gt;    &amp;lt;paas name=&lt;em&gt;&amp;#034;CardDesignerPaaS&amp;#034;&lt;/em&gt;        paasRequirementSet=&lt;em&gt;&amp;#034;&lt;/em&gt;@deploymentModels.0/@paasRequirementSets.0&amp;#034;&lt;em&gt;&amp;gt;      &amp;lt;providedHosts          name=&lt;/em&gt;&amp;#034;CardDesignerPaaSHost&amp;#034;&lt;em&gt;/&amp;gt;    &amp;lt;/paas&amp;gt;    &amp;lt;paasInstances        name=&lt;/em&gt;&amp;#034;AtosPaaSInstance&amp;#034;&lt;em&gt;        type=&lt;/em&gt;&amp;#034;&lt;em&gt;@deploymentModels.0/@paas.0&amp;#034;&lt;/em&gt;        paasFeature=&lt;em&gt;&amp;#034;&lt;/em&gt;@providerModels.0/@rootFeature/@subFeatures.0&amp;#034;&lt;em&gt;&amp;gt;      &amp;lt;providedHostInstances          name=&lt;/em&gt;&amp;#034;AtosPaaSProvidedHost&amp;#034;&lt;em&gt;          type=&lt;/em&gt;&amp;#034;&lt;em&gt;@deploymentModels.0/@paas.0/@providedHosts.0&amp;#034;&lt;/em&gt;/&amp;gt;    &amp;lt;/paasInstances&amp;gt;    &amp;lt;paasRequirementSets        name=&lt;em&gt;&amp;#034;CardDesignerPaaSRequirementSet&amp;#034;&lt;/em&gt;        vmRequirementSet=&lt;em&gt;&amp;#034;&lt;/em&gt;@deploymentModels.0/@vmRequirementSets.0&amp;#034;&lt;em&gt;        paasRequirement=&lt;/em&gt;&amp;#034;&lt;em&gt;@requirementModels.0/@requirements.1&amp;#034;&lt;/em&gt;/&amp;gt;  &amp;lt;/deploymentModels&amp;gt;  &amp;lt;locationModels      name=&lt;em&gt;&amp;#034;ChristmasCardSendingLocation&amp;#034;&lt;/em&gt;&amp;gt;    &amp;lt;regions        id=&lt;em&gt;&amp;#034;EU&amp;#034;&lt;/em&gt;        name=&lt;em&gt;&amp;#034;Europe&amp;#034;&lt;/em&gt;/&amp;gt;  &amp;lt;/locationModels&amp;gt;  &amp;lt;organisationModels      name=&lt;em&gt;&amp;#034;BrokerOrganisation&amp;#034;&lt;/em&gt;&amp;gt;    &amp;lt;organisation        name=&lt;em&gt;&amp;#034;Broker&amp;#034;&lt;/em&gt;        email=&lt;em&gt;&amp;#034;info@broker.com&amp;#034;&lt;/em&gt;/&amp;gt;  &amp;lt;/organisationModels&amp;gt;  &amp;lt;providerModels      name=&lt;em&gt;&amp;#034;ATOSCloudFoundry&amp;#034;&lt;/em&gt;&amp;gt;    &amp;lt;rootFeature        name=&lt;em&gt;&amp;#034;ATOSCloud&amp;#034;&lt;/em&gt;&amp;gt;      &amp;lt;attributes          name=&lt;em&gt;&amp;#034;DeploymentModel&amp;#034;&lt;/em&gt;          valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.0&amp;#034;&lt;em&gt;/&amp;gt;      &amp;lt;attributes          name=&lt;/em&gt;&amp;#034;ServiceModel&amp;#034;&lt;em&gt;&amp;gt;        &amp;lt;value            xsi:type=&lt;/em&gt;&amp;#034;type:StringsValue&amp;#034;&lt;em&gt;            value=&lt;/em&gt;&amp;#034;PaaS&amp;#034;&lt;em&gt;/&amp;gt;      &amp;lt;/attributes&amp;gt;      &amp;lt;attributes          name=&lt;/em&gt;&amp;#034;Availability&amp;#034;&lt;em&gt;          valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.1&amp;#034;&lt;/em&gt;          unitType=&lt;em&gt;&amp;#034;PERCENTAGE&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;subFeatures          name=&lt;em&gt;&amp;#034;PaaS&amp;#034;&lt;/em&gt;&amp;gt;        &amp;lt;attributes            name=&lt;em&gt;&amp;#034;Pricing&amp;#034;&lt;/em&gt;            valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.6&amp;#034;&lt;em&gt;/&amp;gt;        &amp;lt;attributes            name=&lt;/em&gt;&amp;#034;Scaling&amp;#034;&lt;em&gt;            valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.7&amp;#034;&lt;/em&gt;/&amp;gt;        &amp;lt;attributes            name=&lt;em&gt;&amp;#034;Location&amp;#034;&lt;/em&gt;            valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.8&amp;#034;&lt;em&gt;/&amp;gt;        &amp;lt;subFeatures            xsi:type=&lt;/em&gt;&amp;#034;provider:Alternative&amp;#034;&lt;em&gt;            name=&lt;/em&gt;&amp;#034;AddOns&amp;#034;&lt;em&gt;&amp;gt;          &amp;lt;featureCardinality              cardinalityMax=&lt;/em&gt;&amp;#034;-1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;CanopyComposeServiceBroker&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;addOnType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.5&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;BROKER&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;DatabaseAdminApp&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;subFeatures                name=&lt;em&gt;&amp;#034;DatabaseAdminApp&amp;#034;&lt;/em&gt;&amp;gt;              &amp;lt;attributes                  name=&lt;em&gt;&amp;#034;version&amp;#034;&lt;/em&gt;                  valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;em&gt;/&amp;gt;              &amp;lt;featureCardinality                  cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/subFeatures&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Datadog&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;addOnType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.5&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;MONITORING&amp;#034;&lt;em&gt;                  value=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Dynatrace&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;addOnType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.5&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;ANALYTICS&amp;#034;&lt;em&gt;                  value=&lt;/em&gt;&amp;#034;2&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Nagios&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;addOnType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.5&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;MONITORING&amp;#034;&lt;em&gt;                  value=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;NewRelic&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;addOnType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.5&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;MONITORING&amp;#034;&lt;em&gt;                  value=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Pingdom&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;addOnType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.5&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;MONITORING&amp;#034;&lt;em&gt;                  value=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;        &amp;lt;/subFeatures&amp;gt;        &amp;lt;subFeatures            xsi:type=&lt;/em&gt;&amp;#034;provider:Alternative&amp;#034;&lt;em&gt;            name=&lt;/em&gt;&amp;#034;Services&amp;#034;&lt;em&gt;&amp;gt;          &amp;lt;featureCardinality              cardinalityMax=&lt;/em&gt;&amp;#034;-1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Neo4j&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;serviceType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.4&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;DB&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Abacus&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;serviceType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.4&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;METERING&amp;#034;&lt;em&gt;                  value=&lt;/em&gt;&amp;#034;3&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Cassandra&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;serviceType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.4&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;DB&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;CouchDB&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;serviceType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.4&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;DB&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Dingo-postgresql&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;serviceType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.4&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;DB&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;ElasticSearch&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;serviceType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.4&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;SEARCH&amp;#034;&lt;em&gt;                  value=&lt;/em&gt;&amp;#034;2&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Mongodb&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;serviceType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.4&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;DB&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Mysql&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;serviceType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.4&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;DB&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Postgresql&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;serviceType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.4&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;DB&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;RabbitMQ&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;serviceType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.4&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;MESSAGE_QUEUE&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Redis&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;serviceType&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.4&amp;#034;&lt;em&gt;&amp;gt;              &amp;lt;value                  xsi:type=&lt;/em&gt;&amp;#034;type:EnumerateValue&amp;#034;&lt;em&gt;                  name=&lt;/em&gt;&amp;#034;DB&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;/attributes&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;        &amp;lt;/subFeatures&amp;gt;        &amp;lt;subFeatures            xsi:type=&lt;/em&gt;&amp;#034;provider:Alternative&amp;#034;&lt;em&gt;            name=&lt;/em&gt;&amp;#034;Middleware&amp;#034;&lt;em&gt;&amp;gt;          &amp;lt;featureCardinality              cardinalityMax=&lt;/em&gt;&amp;#034;-1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;JBoss&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;em&gt;&amp;#034;Tomcat&amp;#034;&lt;/em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;version&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Tomee&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;        &amp;lt;/subFeatures&amp;gt;        &amp;lt;subFeatures            xsi:type=&lt;em&gt;&amp;#034;provider:Alternative&amp;#034;&lt;/em&gt;            name=&lt;em&gt;&amp;#034;Runtimes&amp;#034;&lt;/em&gt;&amp;gt;          &amp;lt;featureCardinality              cardinalityMax=&lt;em&gt;&amp;#034;-1&amp;#034;&lt;/em&gt;/&amp;gt;          &amp;lt;variants              name=&lt;em&gt;&amp;#034;Java&amp;#034;&lt;/em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;version&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Clojure&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;em&gt;&amp;#034;DotNet&amp;#034;&lt;/em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;version&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Go&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;em&gt;&amp;#034;Groovy&amp;#034;&lt;/em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;version&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Node&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;em&gt;&amp;#034;PhP&amp;#034;&lt;/em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;version&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Python&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;em&gt;&amp;#034;Ruby&amp;#034;&lt;/em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;version&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Scala&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;em&gt;&amp;#034;Swift&amp;#034;&lt;/em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;version&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;        &amp;lt;/subFeatures&amp;gt;        &amp;lt;subFeatures            xsi:type=&lt;/em&gt;&amp;#034;provider:Alternative&amp;#034;&lt;em&gt;            name=&lt;/em&gt;&amp;#034;Frameworks&amp;#034;&lt;em&gt;&amp;gt;          &amp;lt;featureCardinality              cardinalityMax=&lt;/em&gt;&amp;#034;-1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Django&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;em&gt;&amp;#034;Grails&amp;#034;&lt;/em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;version&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Hhvm&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;em&gt;&amp;#034;Play&amp;#034;&lt;/em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;version&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Rack&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;em&gt;&amp;#034;Sails&amp;#034;&lt;/em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;version&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;/em&gt;&amp;#034;Sinatra&amp;#034;&lt;em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;/em&gt;&amp;#034;version&amp;#034;&lt;em&gt;                valueType=&lt;/em&gt;&amp;#034;&lt;em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;/em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;          &amp;lt;variants              name=&lt;em&gt;&amp;#034;Spring&amp;#034;&lt;/em&gt;&amp;gt;            &amp;lt;attributes                name=&lt;em&gt;&amp;#034;version&amp;#034;&lt;/em&gt;                valueType=&lt;em&gt;&amp;#034;&lt;/em&gt;@typeModels.0/@dataTypes.3&amp;#034;&lt;em&gt;/&amp;gt;            &amp;lt;featureCardinality                cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;          &amp;lt;/variants&amp;gt;        &amp;lt;/subFeatures&amp;gt;        &amp;lt;featureCardinality            cardinalityMin=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;            cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;      &amp;lt;/subFeatures&amp;gt;      &amp;lt;featureCardinality          cardinalityMin=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;          cardinalityMax=&lt;/em&gt;&amp;#034;1&amp;#034;&lt;em&gt;/&amp;gt;    &amp;lt;/rootFeature&amp;gt;  &amp;lt;/providerModels&amp;gt;  &amp;lt;requirementModels      name=&lt;/em&gt;&amp;#034;ChristmasCardSendingRequirement&amp;#034;&lt;em&gt;&amp;gt;    &amp;lt;requirements        xsi:type=&lt;/em&gt;&amp;#034;requirement:InternalComponentRequirement&amp;#034;&lt;em&gt;        name=&lt;/em&gt;&amp;#034;TomcatBetweenSevenAndEight&amp;#034;&lt;em&gt;        minVersion=&lt;/em&gt;&amp;#034;7.0&amp;#034;&lt;em&gt;        minVersionIncluded=&lt;/em&gt;&amp;#034;true&amp;#034;&lt;em&gt;        maxVersion=&lt;/em&gt;&amp;#034;8.0&amp;#034;&lt;em&gt;        maxVersionIncluded=&lt;/em&gt;&amp;#034;true&amp;#034;&lt;em&gt;/&amp;gt;    &amp;lt;requirements        xsi:type=&lt;/em&gt;&amp;#034;requirement:PaaSRequirement&amp;#034;&lt;em&gt;        name=&lt;/em&gt;&amp;#034;CardDesignerPaaSRequirement&amp;#034;&lt;em&gt;&amp;gt;      &amp;lt;pricingTypes&amp;gt;METERED&amp;lt;/pricingTypes&amp;gt;      &amp;lt;statusTypes&amp;gt;PRODUCTION&amp;lt;/statusTypes&amp;gt;      &amp;lt;runtimeTypes&amp;gt;JAVA&amp;lt;/runtimeTypes&amp;gt;    &amp;lt;/requirements&amp;gt;    &amp;lt;requirements        xsi:type=&lt;/em&gt;&amp;#034;requirement:OSRequirement&amp;#034;&lt;em&gt;        name=&lt;/em&gt;&amp;#034;UbuntuRequirement&amp;#034;&lt;em&gt;        os=&lt;/em&gt;&amp;#034;ubuntu&amp;#034;&lt;em&gt;/&amp;gt;    &amp;lt;requirements        xsi:type=&lt;/em&gt;&amp;#034;requirement:ProviderRequirement&amp;#034;&lt;em&gt;        name=&lt;/em&gt;&amp;#034;PublicProviderRequirement&amp;#034;&lt;em&gt;/&amp;gt;    &amp;lt;requirements        xsi:type=&lt;/em&gt;&amp;#034;requirement:QuantitativeHardwareRequirement&amp;#034;&lt;em&gt;        name=&lt;/em&gt;&amp;#034;CardDesignerHWRequirement&amp;#034;&lt;em&gt;        minCPU=&lt;/em&gt;&amp;#034;1.0&amp;#034;&lt;em&gt;        minCores=&lt;/em&gt;&amp;#034;2&amp;#034;&lt;em&gt;        minRAM=&lt;/em&gt;&amp;#034;4096&amp;#034;&lt;em&gt;        minStorage=&lt;/em&gt;&amp;#034;20&amp;#034;&lt;em&gt;/&amp;gt;    &amp;lt;requirements        xsi:type=&lt;/em&gt;&amp;#034;requirement:LocationRequirement&amp;#034;&lt;em&gt;        name=&lt;/em&gt;&amp;#034;EuropeLocationRequirement&amp;#034;&lt;em&gt;        locations=&lt;/em&gt;&amp;#034;&lt;em&gt;@locationModels.0/@regions.0&amp;#034;&lt;/em&gt;/&amp;gt;  &amp;lt;/requirementModels&amp;gt;  &amp;lt;typeModels      name=&lt;em&gt;&amp;#034;ChristmasCardSendingType&amp;#034;&lt;/em&gt;&amp;gt;    &amp;lt;dataTypes        xsi:type=&lt;em&gt;&amp;#034;type:Enumeration&amp;#034;&lt;/em&gt;        name=&lt;em&gt;&amp;#034;DeploymentModel&amp;#034;&lt;/em&gt;&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;PUBLIC&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;PRIVATE&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;    &amp;lt;/dataTypes&amp;gt;    &amp;lt;dataTypes        xsi:type=&lt;em&gt;&amp;#034;type:Range&amp;#034;&lt;/em&gt;        name=&lt;em&gt;&amp;#034;AvailabilityRange&amp;#034;&lt;/em&gt;        primitiveType=&lt;em&gt;&amp;#034;DoubleType&amp;#034;&lt;/em&gt;&amp;gt;      &amp;lt;lowerLimit          included=&lt;em&gt;&amp;#034;true&amp;#034;&lt;/em&gt;&amp;gt;        &amp;lt;value            xsi:type=&lt;em&gt;&amp;#034;type:DoublePrecisionValue&amp;#034;&lt;/em&gt;            value=&lt;em&gt;&amp;#034;99.9&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;/lowerLimit&amp;gt;      &amp;lt;upperLimit&amp;gt;        &amp;lt;value            xsi:type=&lt;em&gt;&amp;#034;type:DoublePrecisionValue&amp;#034;&lt;/em&gt;            value=&lt;em&gt;&amp;#034;100.0&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;/upperLimit&amp;gt;    &amp;lt;/dataTypes&amp;gt;    &amp;lt;dataTypes        xsi:type=&lt;em&gt;&amp;#034;type:Enumeration&amp;#034;&lt;/em&gt;        name=&lt;em&gt;&amp;#034;RuntimeType&amp;#034;&lt;/em&gt;&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;JAVA&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;CLOJURE&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;DOTNET&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;2&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;GO&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;3&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;GROOVY&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;4&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;NODE&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;5&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;PHP&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;6&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;PYTHON&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;7&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;RUBY&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;8&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;SCALA&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;9&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;SWIFT&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;10&amp;#034;&lt;/em&gt;/&amp;gt;    &amp;lt;/dataTypes&amp;gt;    &amp;lt;dataTypes        xsi:type=&lt;em&gt;&amp;#034;type:List&amp;#034;&lt;/em&gt;        name=&lt;em&gt;&amp;#034;VersionList&amp;#034;&lt;/em&gt;        primitiveType=&lt;em&gt;&amp;#034;StringType&amp;#034;&lt;/em&gt;&amp;gt;      &amp;lt;values          xsi:type=&lt;em&gt;&amp;#034;type:StringsValue&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;0.&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          xsi:type=&lt;em&gt;&amp;#034;type:StringsValue&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;.&amp;#034;&lt;/em&gt;/&amp;gt;    &amp;lt;/dataTypes&amp;gt;    &amp;lt;dataTypes        xsi:type=&lt;em&gt;&amp;#034;type:Enumeration&amp;#034;&lt;/em&gt;        name=&lt;em&gt;&amp;#034;ServiceType&amp;#034;&lt;/em&gt;&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;DB&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;MESSAGE_QUEUE&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;SEARCH&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;2&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;METERING&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;3&amp;#034;&lt;/em&gt;/&amp;gt;    &amp;lt;/dataTypes&amp;gt;    &amp;lt;dataTypes        xsi:type=&lt;em&gt;&amp;#034;type:Enumeration&amp;#034;&lt;/em&gt;        name=&lt;em&gt;&amp;#034;AddOnType&amp;#034;&lt;/em&gt;&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;BROKER&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;MONITORING&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;ANALYTICS&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;2&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;APP&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;3&amp;#034;&lt;/em&gt;/&amp;gt;    &amp;lt;/dataTypes&amp;gt;    &amp;lt;dataTypes        xsi:type=&lt;em&gt;&amp;#034;type:Enumeration&amp;#034;&lt;/em&gt;        name=&lt;em&gt;&amp;#034;PricingType&amp;#034;&lt;/em&gt;&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;METERED&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;FIXED&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;FREE&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;2&amp;#034;&lt;/em&gt;/&amp;gt;    &amp;lt;/dataTypes&amp;gt;    &amp;lt;dataTypes        xsi:type=&lt;em&gt;&amp;#034;type:Enumeration&amp;#034;&lt;/em&gt;        name=&lt;em&gt;&amp;#034;ScalingType&amp;#034;&lt;/em&gt;&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;HORIZONTAL&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;VERTICAL&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;AUTO&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;2&amp;#034;&lt;/em&gt;/&amp;gt;    &amp;lt;/dataTypes&amp;gt;    &amp;lt;dataTypes        xsi:type=&lt;em&gt;&amp;#034;type:Enumeration&amp;#034;&lt;/em&gt;        name=&lt;em&gt;&amp;#034;LocationType&amp;#034;&lt;/em&gt;&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;EUROPE&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;NORTH_AMERICA&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;1&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;SOUTH_AMERICA&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;2&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;ASIA&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;3&amp;#034;&lt;/em&gt;/&amp;gt;      &amp;lt;values          name=&lt;em&gt;&amp;#034;OCEANIA&amp;#034;&lt;/em&gt;          value=&lt;em&gt;&amp;#034;4&amp;#034;&lt;/em&gt;/&amp;gt;    &amp;lt;/dataTypes&amp;gt;  &amp;lt;/typeModels&amp;gt; &lt;/p&gt;&lt;p&gt;&amp;lt;/camel:CamelModel&amp;gt; &lt;/p&gt;</summary> <dc:creator>Frank Griesinger</dc:creator> <dc:date>2016-12-24T01:45:01Z</dc:date> </entry> <entry> <title>Examples 1.1</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Examples" /> <author> <name>Frank Griesinger</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Examples</id> <updated>2016-12-24T01:43:43Z</updated> <published>2016-12-24T01:43:43Z</published> <summary type="html">&lt;p&gt;This is a collection of example files we use throughout the testing and alignment of components.&lt;/p&gt; &lt;a name="CAMEL"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;CAMEL&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;&lt;a href="/wiki/Special:Node:20603/PaaS_Deployment" title="PaaS Deployment"&gt;PaaS Deployment&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="/wiki/Special:Node:20603/Cloud_Bursting" title="Cloud Bursting"&gt;Cloud Bursting&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="/wiki/Special:Node:20603/Service_Replacement" title="Service Replacement"&gt;Service Replacement&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;a name="Bundles"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Bundles&lt;/span&gt;&lt;/h3&gt;</summary> <dc:creator>Frank Griesinger</dc:creator> <dc:date>2016-12-24T01:43:43Z</dc:date> </entry> <entry> <title>Components 1.5</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Components" /> <author> <name>Frank Griesinger</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Components</id> <updated>2016-12-24T01:41:22Z</updated> <published>2016-12-24T01:41:22Z</published> <summary type="html">&lt;p&gt;All components will be documented with the following template.&lt;/p&gt; &lt;a name="Description_Template"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Description Template&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;Description of the different components included in the environments. Unless the documentation is hosted externally, the components should follow up the next structure:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;**Summary**&lt;/li&gt; &lt;li&gt;**Architecture design**&lt;/li&gt; &lt;li&gt;**Installation manual** &lt;ul&gt; &lt;li&gt;Development&lt;/li&gt; &lt;li&gt;Production&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;**Test Cases**&lt;/li&gt; &lt;li&gt;**User Manual** &lt;ul&gt; &lt;li&gt;API specification&lt;/li&gt; &lt;li&gt;HandBook&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;a name="Components_by_Environment"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Components by Environment&lt;/span&gt;&lt;/h3&gt; &lt;a name="Design_Environment"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Design_Environment_Components" title="Design Environment Components"&gt;Design Environment&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Allocation_Environment"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Allocation_Environment_Components" title="Allocation Environment Components"&gt;Allocation Environment&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Execution_Environment"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Execution_Environment_Components" title="Execution Environment Components"&gt;Execution Environment&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Evaluation_Environment"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Evaluation_Environment_Components" title="Evaluation Environment Components"&gt;Evaluation Environment&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Marketplace_Environment"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Marketplace_Environment_Components" title="Marketplace Environment Components"&gt;Marketplace Environment&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="General_Documentation"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;General Documentation&lt;/span&gt;&lt;/h3&gt; &lt;a name="Source_management_and_branching"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Source_management_and_branching" title="Source management and branching"&gt;Source management and branching&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Continuous_Delivery_and_Integration_Documentation"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Continuous_Delivery_and_Integration_Documentation" title="Continuous Delivery and Integration Documentation"&gt;Continuous Delivery and Integration Documentation&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Examples"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Examples" title="Examples"&gt;Examples&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt;</summary> <dc:creator>Frank Griesinger</dc:creator> <dc:date>2016-12-24T01:41:22Z</dc:date> </entry> <entry> <title>Cloud Provider Engine Component 1.4</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Cloud+Provider+Engine+Component" /> <author> <name>Frank Griesinger</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Cloud+Provider+Engine+Component</id> <updated>2016-12-15T11:58:17Z</updated> <published>2016-12-15T11:58:17Z</published> <summary type="html">&lt;p&gt;We use the &lt;a class="externallink" rel="nofollow" href="https://github.com/cloudiator"&gt;Cloudiator framework&lt;/a&gt; for deploying applications in the Cloud, which is orchestrated by an CAMEL-to-Colosseum-adapter that gets involved when calling the &lt;a href="/wiki/Special:Node:20603/Execution_Environment_Entrypoint" title="Execution Environment Entrypoint"&gt;Execution Environment Entrypoint&lt;/a&gt;.&lt;/p&gt; &lt;a name="Colosseum"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;&lt;a class="externallink" rel="nofollow" href="https://github.com/cloudiator/colosseum"&gt;Colosseum&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;This is the entrypoint and API of the Cloudiator suite.&lt;/p&gt; &lt;a name="Axe"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;&lt;a class="externallink" rel="nofollow" href="https://github.com/cloudiator/axe-aggregator"&gt;Axe&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;This component handles aggregation of monitoring data and scaling with respect to scaling rules defined in Colosseum&lt;/p&gt; &lt;a name="Lance"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;&lt;a class="externallink" rel="nofollow" href="https://github.com/cloudiator/lance"&gt;Lance&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;Lance is the life-cycle agent that gets installed on every machine and handles the orchestration of component instances and the execution of their respective life-cycle actions.&lt;/p&gt; &lt;a name="Visor"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;&lt;a class="externallink" rel="nofollow" href="https://github.com/cloudiator/visor"&gt;Visor&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;Visor is the monitoring agent installed on every machine and capable of executing probes.&lt;/p&gt; &lt;a name="Sword"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;&lt;a class="externallink" rel="nofollow" href="https://github.com/cloudiator/sword"&gt;Sword&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;Sword is an abstraction-layer heavily based on jclouds to access each and any cloud infrastructure in a normalized way.&lt;/p&gt; &lt;a name="Adaptation_Management"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Adaptation_Management" title="Adaptation Management"&gt;Adaptation Management&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The Adaptation Management is the first implementation of the CAMEL-specific enhancements towards describing more complex adaptation plans.&lt;/p&gt;</summary> <dc:creator>Frank Griesinger</dc:creator> <dc:date>2016-12-15T11:58:17Z</dc:date> </entry> <entry> <title>Execution Environment Components 2.2</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Execution+Environment+Components" /> <author> <name>Román Sosa González</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Execution+Environment+Components</id> <updated>2016-12-02T13:25:45Z</updated> <published>2016-12-02T13:25:45Z</published> <summary type="html">&lt;a name="Overall"&gt;&lt;/a&gt;&lt;h3&gt;&lt;span&gt;Overall&lt;/span&gt;&lt;/h3&gt; &lt;p&gt;The CloudSocket Execution Environment enables managing, monitoring and adapting the execution of the BPaaS bundles generated during the allocation phase, which have been published via the Marketplace. The environment covers the whole steps of execution phase: i) deploy and configure all components required to execute the bundles, which comprise the workflow, SLA, adaptation rules, and details of the third-party services involved; ii) allow to manage the end-user's workflow instances, when a BPaaS workflow bundle has been deployed; iii) visualize the conformance levels to associated agreements and the respective monitoring data; iv) generate and manage the violations incurred as well as trigger the respective BPaaS bundle adaptation rules, allowing the environment to adapt the BPaaS instances to maintain the promised service level.&lt;/p&gt; &lt;p&gt;In order to support the aforementioned capabilities, the BPaaS Execution Environment comprises several components. These components are the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Workflow Engine is responsible for deploying the executable workflows and executing the different workflow instances at the execution phase.&lt;/li&gt; &lt;li&gt;Cloud Provider Engine is responsible for the complete deployment and lifecycle management of all the required components of the BPaaS, including software components and VMs across multiple clouds, with transactional semantics (at least for the deployment part).&lt;/li&gt; &lt;li&gt;Monitoring Engine is responsible for cross-level monitoring a BPaaS and correlate/aggregate monitoring data from different levels, from infrastructure and software services up to the level of the workflow.&lt;/li&gt; &lt;li&gt;Adaptation Engine is responsible for the reconfiguration of the BPaaS deployment (e.g., different services, service configurations and workflow structure modification) to resolve the problematic situations identified by adaptation rules.&lt;/li&gt; &lt;li&gt;SLA Engine is responsible for generating, storing and observing the formal documents describing electronic service-level agreements (SLAs) between the parties involved in CloudSocket.&lt;/li&gt; &lt;li&gt;Process Data Mediator is offered as a service to the Adaptation Engine in order to cover the cases where services are substituted and their replacements need to communicate properly with the rest of the services in the execution order of the current BPaaS workflow.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The following figure shows the detailed scheme of the CloudSocket Reference Architecture and the location of the different components.&lt;/p&gt; &lt;p&gt;&lt;img alt="BPaaSExecutionEnvironment.png" class="wikiimg" src="/c/wiki/get_page_attachment?p_l_id=79159&amp;nodeId=20603&amp;title=&amp;fileName=BPaaSExecutionEnvironment.png" /&gt;&lt;/p&gt; &lt;p&gt;Internal architecture for the execution environment.&lt;/p&gt; &lt;p&gt;The architecture differentiates between two main levels: (a) one covering the components that have an interaction with the actors through a GUI, such as Web interface for the Workflow Engine, SLA dashboard and Monitoring dashboard and (b) another including the core engines to cover these functionalities. There is another hidden level, the data one which is covered internally by the internal architecture of its component but due to complexity reasons it is not shown in above figure.&lt;/p&gt; &lt;p&gt;The components in each level interact with each other in order to properly deliver and visualise the functionalities of the environment. More information about how these interactions are performed and what are the respective scenarios covered can be found at the following URL:&lt;/p&gt; &lt;p&gt;&lt;a class="externallink" rel="nofollow" href="https://www.cloudsocket.eu/uml/3-ExecutionEnvironment/remotedocu/modeldocu/27012016104208/modelContentHTML"&gt;https://www.cloudsocket.eu/uml/3-ExecutionEnvironment/remotedocu/modeldocu/27012016104208/modelContentHTML&lt;/a&gt; in which the corresponding &lt;a class="externallink" rel="nofollow" href="https://www.cloudsocket.eu/uml"&gt;UML diagrams&lt;/a&gt; can be viewed. This information was also covered in the &lt;a class="externallink" rel="nofollow" href="https://www.cloudsocket.eu/download"&gt;D4.1 deliverable&lt;/a&gt;. However not all components have been developed, yet. So in the following, the documentation is only available for those components, that are currently available.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&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="Workflow_Engine"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Workflow_Engine_Component" title="Workflow Engine Component"&gt;Workflow Engine&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Cloud_Provider_Engine"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Cloud_Provider_Engine_Component" title="Cloud Provider Engine Component"&gt;Cloud Provider Engine&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Execution_Environment_Entrypoint"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Execution_Environment_Entrypoint" title="Execution Environment Entrypoint"&gt;Execution Environment Entrypoint&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="SLA_Engine"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/SLA_Engine_Component" title="SLA Engine Component"&gt;SLA Engine&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt; &lt;a name="Unified_PaaS_component"&gt;&lt;/a&gt;&lt;h4&gt;&lt;span&gt;&lt;a href="/wiki/Special:Node:20603/Unified_PaaS_component" title="Unified PaaS component"&gt;Unified PaaS component&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt;</summary> <dc:creator>Román Sosa González</dc:creator> <dc:date>2016-12-02T13:25:45Z</dc:date> </entry> <entry> <title>Unified PaaS component 1.1</title> <link rel="alternate" href="https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Unified+PaaS+component" /> <author> <name>Román Sosa González</name> </author> <id>https://www.cloudsocket.eu/web/guest/common-understanding-wiki/-/wiki/20603/Unified+PaaS+component</id> <updated>2016-12-02T13:22:58Z</updated> <published>2016-12-02T13:22:58Z</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;/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;[description]&lt;/p&gt; &lt;p&gt;This component will expose:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;REST API&lt;/li&gt; &lt;li&gt;Library&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The main functionalities are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Unified application deployment on Heroku, OpenShift, CloudFoundry&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;Unified PaaS Library&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;Library&lt;/li&gt; &lt;li&gt;REST Service&lt;/li&gt; &lt;li&gt;REST Client&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;External PaaS providers&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;[architecture]&lt;/p&gt; &lt;p&gt;Figure: General architecture for Unified PaaS component&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;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;Maven &amp;gt;= 3.2&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/unified-paas.git cd unified-paas &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Compile &lt;pre&gt; mvn clean install &lt;/pre&gt;&lt;/li&gt; &lt;li&gt;Execute server. The following command will start a server in port 8002. &lt;pre&gt; cd service; bin/runserver.sh &lt;/pre&gt;&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Configuration file (port, logging, etc) in service/conf/config.yml.&lt;/p&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;/ul&gt; &lt;p&gt;&lt;b&gt;Installation&lt;/b&gt;&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 Unified PaaS service in a server.&lt;/p&gt; &lt;pre&gt; dist/bin/make-dist.sh scp dist/target/paas-unified.zip server: # replace 'server' with the ip/name of server ssh server: unzip paas-unified.zip -d paas-unified-server cd paas-unified-pserver bin/start-paas-unified-service.sh &lt;/pre&gt; &lt;p&gt;To stop the service:&lt;/p&gt; &lt;pre&gt; bin/stop-paas-unified-service.sh &lt;/pre&gt; &lt;p&gt;To update an instance, just copy the unified-paas-service.jar to paas-unified-server/bin directory.&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;</summary> <dc:creator>Román Sosa González</dc:creator> <dc:date>2016-12-02T13:22:58Z</dc:date> </entry> </feed> 