Programming for Today
Today's programming goes far beyond the simple needs of client-server or monolithic applications. In the age of the Internet, it is not unusual and is often necessary for an application to be composed of many different parts or components spread across multiple machines. This distributed programming requires a multitiered or n-tiered development approach.
Multitiered programming is also known as distributed programming: an application that is composed of multiple components working together. These multiple components may run on one server or on many serversthey are still collectively considered a complete application.
With this approach, a single application is composed of multiple components running on distinct architectural tiers. From a design perspective, the composition of these logical tiers, the work that will be performed on these tiers, should reflect the "responsibility" of the components. This benefits the development effort by providing a consistent structure to multitiered applications. A common approach to n-tiered development uses the following tiers.
- client tier
- presentation tier
- business tier
- resource tier
The client tier is responsible for interacting with the user. This interaction will include the display (or rendering) of the user interface and the initial processing of user input. In a Web application, the client tier is the Web browser.
The presentation tier is responsible for preparing the output to the client tier and interfacing with the business tier. The presentation tier should not execute any business logic. That is, it should not enforce the business rules of the enterprise; that work should be left to the business tier. In a Web application, the presentation tier is usually a Web server with the ability to process JSP or servlet pages.
The business tier is responsible for the execution of the business logic of the enterprise. This tier is expected to process requests from the presentation tier: requests that have been forwarded from the client tier. The business tier will interface with the resource tier to obtain the data that it needs to complete its processing.
The resource tier is responsible for managing the resources of the application. For most applications, this tier represents the database. This is where the application data that will persist will be stored and managed.
JDBC Code in N-Tiered Architectures
Java code using JDBC usually resides on the business tier. The code performing the data access on this tier should be isolated and encapsulated in a set of black box objects, objects which conceal their details and expose a concise interface.
Multitiered/distributed application architecture and Java design patterns will be explained in more detail in Chapter 13. What is worth noting at this point is that JDBC code will be used differently depending on the component we are writing and the architectural tier where that component will be placed. We can use Java design patterns to help guide this coding process.
Java Technologies for Distributed Programming
Sun Microsystems has packaged a number of Java technologies together under the marketing and distribution umbrella of the Java 2 Enterprise Edition (J2EE). This package is comprised of numerous APIs and technologies that represent the Java tools for developing distributed applications. To develop a Web application using Java technology, these are the tools to use. The core of J2EE includes the APIs listed in Table 12 (which include JDBC).
Table 1-2 J2EE APIs
API/Java Technology |
Description |
servlets, JSP |
Distributes HTML output over HTTP connection. JSP Java Server Pages extends the servlet API and includes a preprocessor that converts a JSP page into a servlet, which is then run in a servlet engine. |
EJB |
Enterprise Java Beans. A distributed component technology that provides a number of standard services, such as persistence, transactions, security, and others. |
JMS |
Java Messaging Service. Common access to message servers for asynchronous message communication. |
JDBC |
Provides communication with relational databases. |
JavaMail |
Access to POP3, IMAP, and other standardized mail servers. |
JNDI |
Java Naming and Directory Interface. Used to provide general lookup of objects and application properties. |
JAF |
Java Activation Framework. Used with JavaMail for viewing/editing of MIME content. |
JavaIDL |
Provides access to CORBA components using Java. |
RMI, RMI-IIOP |
Remote Method Invocation. Provides the ability to create remote objects and execute methods (passing parameters and receiving return values) with those remote objects. |
JTS/JTA |
Java Transaction API. An API that provides access to transaction controls. Uses Java Transaction Service as the low-level implementation (the service provider interface) for the transaction service. |
Java-XML |
XML-encoded documents provide much of the configuration information for J2EE. XML is becoming more important as a means of data encoding for data interaction. Provides parsers (JAXP), messaging (JAXMP), registries (JAXR) and RPC (JAX-RPC) APIs. |
J2EE not only includes Java APIs, but requires servers to run the various components created using the Java APIs. For instance, servlets and JSP pages must run with a servlet server that provides what is known as a servlet container. The Java applet must in turn run within what is known as an applet container. Enterprise Java Beans (EJB) must run within an EJB container. J2EE and the technology behind it is covered in more detail in Chapter 22 and Chapter 23.
Sun has expanded on its J2EE architecture, in a large part in response to the overwhelming interest (whether justified or not) in Web services. A Web service is a service that makes itself available over the Internet using HTTP and involves the exchange of messages in XML format. Web services have been popularized to a large extent by Microsoft, which has made Web services a key part of its .Net architecture. Sun has expanded and refined its J2EE architecture to include additional services in what has been dubbed the Open Net Environment (ONE).
J2EE is a distributed component architecture and, as such, does not limit components to the exchange of messages in XML format. Instead, components can communicate with a variety of protocols, including the binary protocols of RMI-IIOP, and also including the asynchronous message passing of JMS or Message Beans and participation in SOAP transactions if the application server provides that. So, while not part of the current J2EE specification, Web services are part of what Sun considers a valid enterprise architecture.