Middleware is software that allows otherwise separate software components or applications to share data. Product categories include: message-oriented (MOM) middleware, transaction processing (TP) middleware, remote procedure call (RPC) middleware, object request broker (ORB) middleware, structured query language (SQL) data access, application servers, and enterprise service bus (ESB) middleware. MOM middleware is asynchronous, requires user action, and provides program-to-program data exchanges. TP middleware provides organizations with the tools and environment for developing and deploying distributed applications. RPC middleware can be synchronous or asynchronous and is designed to distribute application logic across a network. ORB middleware allows applications to send objects and request services across an object-oriented system. SQL-oriented data access middleware is used to connect software applications and database servers. By contrast, application servers are installed on industrial computers to facilitate the use of other applications. ESB middleware is a software architecture that uses a standards-based messaging engine or bus to provide foundational services for more complex architectures. Selecting middleware requires an analysis of interoperability requirements and system architectures. Parameters to consider include: data transfer method, data storage method, data topology, control topology, control structure, and distribution. The data transfer method describes how an existing system uses a specific architectural style to facilitate data transfers. The data storage method provides additional details about how data is stored within the system. Data topology and control topology refer to the geometric form of the data flow and the control flow, respectively. Distribution describes how existing components meet a system’s functional requirements. Selecting middleware also requires an understanding of data mode, data scope, and data flow; control scope and control flow; and encapsulation, configuration, and directionality. Encapsulation describes the relationship between embedded components and an established interface. Directionality models the direction of the data flow and the direction of the control flow. There are three major middleware initiatives: the Open Software Foundation’s (OSF) Distributed Computing Environment (DCE), the Object Management Group’s Common Object Request Broker Architecture (CORBA), and Microsoft’s Component Object Model (COM). The OSF DCE is a set of integrated system services that provides source code. CORBA is a standard architecture that allows vendors to develop object request broker (ORB) products that support portability and interoperability across differing programming languages, hardware platforms, and operating systems (OS). COM defines an application programming interface (API) that allows diverse components to interact; however, all system components must adhere to a binary structure specified by Microsoft. Distributed COM (DCOM) is a COM extension that allows network-based component interaction.