Middleware enables distributed components to interact with each others in diverse and complex manners. Such interactions should be modeled at architecture level for controlling the complexity of incorporating middleware into the target system. This paper extends a traditional architectural description language for describing the diverse and complex interactions enabled by middleware as complex connectors and constraints on them in a model driven process. Such functions and qualities of connectors that satisfy the requirements of the target system are modeled without any consideration of middleware at first. Then the connectors and constraints on them are refined by the characteristics induced by middleware. All information of connectors produced in the two-step process can be described at three levels, including the connection, coordination and context. The language and process are illustrated and evaluated by applying them into J2EE (Java 2 Platform Enterprise Edition) applications.