The Computer Revolution/Middleware
In the computer industry, middleware is a general term for any programming that serves to "glue together" or mediate between two separate and often already existing programs. A common application of middleware is to allow programs written for access to a particular database to access other databases. http://searchsoa.techtarget.com/definition/middleware Stimulated by the growth of network-based applications, middleware technologies are taking an increasing importance. They cover a wide range of software systems, including distributed objects and components, message-oriented communication, and mobile application support. http://middleware.objectweb.org/
Typically, middleware programs provide messaging services so that different applications can communicate. The systematic tying together of disparate applications, often through the use of middleware, is known as enterprise application integration (EAI).In all of the above situations, applications use intermediate software that resides on top of the operating systems and communication protocols to perform the following functions : Hiding distribution, i.e. the fact that an application is usually made up of many interconnected parts running in distributed locations; Hiding the heterogeneity of the various hardware components, operating systems and communication protocols; Providing uniform, standard, high-level interfaces to the application developers and integrators, so that applications can be easily composed, reused, ported, and made to interoperate; Supplying a set of common services to perform various general purpose functions, in order to avoid duplicating efforts and to facilitate collaboration between applications. These intermediate software layers have come to be known under the generic name of middleware. The role of middleware is to make application development easier, by providing common programming abstractions, by masking the heterogeneity and the distribution of the underlying hardware and operating systems, and by hiding low-level programming details.