Context-specific middleware specialization techniques for optimizing software product-line architectures