Computer networks and distributed applications have a paramount role
in all-day life. Nowadays, it is hard to imagine stand-alone systems
or applications. Practically, any modern computing device offers the
possibility of being connected with other devices. At higher level,
applications aim at exploiting networking capabilities of systems
and tend to be more and more interconnected and communicating
themselves.
Designing and programming this kind of distributed applications can
result a hard task if not done at the appropriate level of
abstraction. There are two main complex aspects to face: (i)
distributed systems are frequently made of heterogeneous devices and
interact through many different communication infrastructure; (ii)
modern distributed systems have different tiers (e.g., TCP/IP level,
operating system, network system, etc.). Middlewares provide an
abstraction of many low-level details of systems. They are meant to
simplify software development and application integration by
interfacing the application level with lower tier of distributed
systems so that the programmer does not have to worry about
implementation details. Also, middlewares allow the programmer to
integrate applications developed for different execution context and
in different times.
The course reviews some notions of concurrent and distributed
programming (e.g., threads and RMI) and presents the main models and
principles behind the middlewares that in the last years many
vendors (Microsoft, IBM, Sun, Oracle) have proposed. In fact, these
proposals differ each other not only with respect to the
technologies or architectures adopted, but also with respect to the
underlying coordination models.