The Adaptation Function
Software adaptation is at the heart of autonomic computing. Indeed self-management cannot be reached without the ability to modify the structure and behaviour of a system. Unfortunately, software adaptation remains a particularly complex task. It requires changing low-level code, an act that is often complicated and intricate. Side effects that succeed an update are difficult to anticipate and to fix. An additional challenge specific to autonomic computing is that the code to be modified has already been run or is currently executing, meaning that computational state has to be identified and preserved.
The purpose of this chapter is to define precisely the notion of software adaptation and discuss the related challenges. It is also to present a set of techniques that can be used to implement self-managed software systems. As we will see, adaptation can be realised at different levels of abstraction, and very diverse approaches can be implemented. This diversity of technique is welcome. As said in previous chapters, a self-managed system is made of a number of collaborating autonomic elements with different requirements in terms of reactivity, scope, precision, etc. Different, complementary approaches are needed to meet these demands.
In this chapter, we will focus on techniques allowing dynamic updates. Indeed, more and more, users require updates to be dynamic, at runtime, as downtime is not an option; service interruption can be very costly and has to be avoided as much as possible. This is especially true for critical systems that may have to be updated tens or hundreds of times every year and that cannot be stopped that often.
KeywordsVirtual Machine Binary Code Variation Point Software Product Line Autonomic Computing
- 1.Lin, D.-L., Neamtiu, L.: Collateral evolution of applications and databases. In: ERCIM Workshop on Software Evolution/International Workshop on Principles of Software Evolution (IWPSE-Evol'09), Amsterdam, Aug 2009Google Scholar
- 2.Neamtiu, I.: Practical dynamic software updating. Ph.D. dissertation, University of Maryland, Aug 2008Google Scholar
- 3.Kiczales, G.: The Art of Meta-Object Protocol. MIT Press, Cambridge, MA (1991)Google Scholar
- 4.Szyperski, C.: Component Software: Beyond Object-Oriented Programming. Addison Wesley/Longman Publishing Co., Inc., Boston (1997)Google Scholar
- 5.Krakowiak, S.: Middleware architecture with patterns and frameworks http://sardes.inrialpes.fr/~krakowia/MW-Book/ (2007)
- 6.Kramer, J., Magee, J.: Self-managed systems: an architectural challenge. In: Future of Software Engineering, pp. 259–268. IEEE Computer Society, Washington, DC (2007)Google Scholar
- 7.Papazoglou, M.: Service-oriented computing: concepts, characteristics and directions. In: Proceedings of Web Information Systems Engineering, Los Alamitos, CA, 2003Google Scholar
- 8.Cervantes, H., Hall, R.: Autonomous adaptation to dynamic availability in service-oriented component model. In: Proceedings of the 26th International Conference on Software Engineering, pp. 614–623. IEEE Computer Society, Washington, DC (2004)Google Scholar
- 9.Hall, R., Pauls, K., McCulloch, S., Savage, D.: OSGi in Action: Creating Modular Applications in Java. Manning Publications, Greenwich (2011)Google Scholar
- 10.Escoffier, C.: iPOJO: a flexible service-oriented component model. Ph.D. dissertation, University Joseph Fourier. http://defense.pdf. Dec 2008