Distributed computing can be described as the effort to unify multiple net-
worked machines in such a way that information or other resources can be
shared by all of these connected computers (Sun Microsystems 2002).
Developing large distributed architectures is complex. It usually requires
decomposition into subsystems, which have to communicate in complex
patterns in order to express a fruitful global behaviour. In this context, the
object-oriented technology plays an important role, since it offers tech-
niques for creating powerful reference models and scalable architectures.
Middleware infrastructures are a promising technology for reifying proven
software designs and implementations in order to reduce the cost and
improve the quality of software ( CACM 1997). They consist of integrated
sets of service components that allow distributed systems to operate
together. Examples are the java.net package for TCP
IP socket-based com-
munication, the java.security package for cryptography and resource access
control, the org.xml.sax and org.w3c.dom packages for XML parsing and
object serialization, and the java.jni package for interoperability with
applications written in different languages.
The third part of this topic is dedicated to the exemplification of middle-
ware-based distributed system development.
Using a middleware framework consists in developing end-user applications
by delegating the execution of common functionalities to reusable middle-
The software reuse approach improves software development by reducing
the amount of code that has to be written by the application designer. In
particular, assembling previously existing components greatly reduces time
to test new applications. When a component is used in a large number of
systems by different developers, the knowledge about the component usage,
robustness and efficiency is available in the user community. The more a
component is used the less it costs.
The reverse side of the coin is that reusing a middleware component
instead of developing it from scratch leaves the user dependent upon the
component provider. Components available on the market undergo frequent