Context-awareness is a vital requirement in building valuable and capable adaptive systems. Context-aware ubiquitous computing focuses on the use of context of users, devices, environment, etc in order to offer services essential for a particular person, space and time. This paper provides a survey of context-aware middleware architectures. An overview of each middleware is provided, along with the description of the main features. Based on the conducted survey, this paper compares and contrasts the various characteristics of context-aware middleware architectures. We present the analysis of the middleware architectures based on several parameters including fault tolerance, adaptability, interoperability, architectural style, discoverability, location transparency and aspect oriented composition.