A Reflective Middleware Architecture for Adaptive Component-based Distributed Systems