Cross-Layer Self-Adaptation of Service-Oriented Architectures