{'fraction_non_alphanumeric': 0.019632678910702975, 'fraction_numerical': 0.0, 'mean_word_length': 5.638655462184874, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
A dynamic architecture for runtime adaptation of service-based applications

Service-Based Applications (SBA) offer flexible functionalities in wide range of environments. Therefore they should dynamically adapt to different quality concerns such as security, performance, etc. For example, we may add particular delivery service for the golden customers, or provide secure services for the specific partners, or change service invocation based on context information. Unlike other adaptation methods which substitute a faulty service or negotiate for service level objectives, we modify the architecture of SBA, that is, the underlying services structure and the runtime services implementation. In this regard, we propose a reflective architecture which holds business and adaptation knowledge in the Meta level and implements service behaviours in the Base level. The knowledge is modelled in the form of Meta states and Meta transitions. We benefit from Reflective Visitor pattern to materialize an abstract service in different concrete implementations and manipulate them at runtime. Each service implementation fulfils a specific quality concern, so it is possible to delegate user requests to appropriate implementation instead of reselecting a new service which is a time consuming strategy. We used Jmeter load simulator and real-world Quality of Service (QoS) dataset to measure the architecture efficiency. Also, we characterized our work in comparison with related studies according to the European Software Services and Systems Network (S-CUBE) adaptation taxonomy.