To date, two basic technologies have been used to construct commodity three-tier networked computing systems: distributed object systems and distributed service systems. Distributed object-based systems = are build on object-oriented technologies such as CORBA, COM, and JavaBeans (when combined with remote method invocation, or RMI). These technologies are discussed in depth in Chapter . Object-oriented systems are ideal for defining middle-tier services. They provide well-defined interfaces and a clean encapsulation of backend services. Through the use of mechanisms such as inheritance, these systems can be easily extended, allowing specialized services to be created.
In spite of the advantages of the distributed object approach, many network services today are provided through a distributed service architecture. The most notable example is the World Wide Web, in which the middle-tier service is provided by a distributed collection of HTTP servers. Linkage to backend services (databases, simulations, and other custom services) is provided via c-stom programs called via CGI scripts.
The uses of Web technology in networked databases provides a good example of how the distributed services architecture is used. Originally, remote access to these databases was provided via a two-tier client-server architecture. In these architectures, sophisticated clients would submit SQL queries to remote databases using proprietary network access protocols to connect the client to the server. The three-tier version of this system might use Web-based forms implemented on a standard thin client (i.e., a Web browser) with middle-tier application functionality implemented via CGI scripts in the HTTP server. These scripts then access backend databases by using vendor-specific methods. This scenerio becomes even more attractive with the introduction of Java and JDBC. Using this interface, the middle-tier HTTP service can communicate transparently to a wide range of vendor databases.
Currently, a mixture of distributed service and distributed object architectures is deployed, using CORBA, COM, JavaBean, HTTP servers and CGI scripts, Java servers, databases with specialized network protocols, and other services. These all coexist in a heterogeneous environment with common themes but disparate implementations. We believe that in the near future, there will be a significant convergence of network computing approaches that combines both the distributed server and distributed object approaches [7, 8]. Indeed, we already see a blurring of the distinction between Web and distributed object servers, with Java playing a central role in this process.
On the Web side, we are seeing a trend toward the use of extensible Java-based Web servers. Rather than implementing middle-tier services using CGI scripts, written in a variety of langauges, these servers can be customized on the fly through the use of Java ``servlets.'' Alternatively, CORBA ORBs already exist whose functionality can be = implemented by using Java.
We also believe that these advances will lead to an integrated architecture in which Web-based services (browsers, Java, JavaBeans) = and protocols (HTTP, RMI) are used to construct the top layer, distributed object services and protocols (such as CORBA and IIOP) are used to interface to the lower tier, and the middle tier consists of a distributed set of extensible servers that can process both Web-based and distributed object protocols. The exact technologies used are not critical; however, for the sake of discussion, we will consider a middle tier based on an integrated Java and CORBA server. We believe that the resulting ``object-Web'' three-tier networked computing architecture will have profound importance and will be the most appropriate way to implement a range of computational grid environments.