Designing Self-Adaptive Service-Oriented Applications