J2EE Performance Tuning, Part 3: Application Server Architecture
- Under the Hood: What Does an Application Server Have to Do?
- JDBC
- Enterprise JavaBeans (EJBs)
- Servlets and JSPs
- Java Messaging Service
- Java Transaction API (JTA)
- General Considerations
- Summary
- What's Next?
Thus far in this series on J2EE performance tuning, we have quantified what we mean by performance tuning (maximize concurrent users, throughput, and reliability), and we have defined a methodology that we will use when tuning our applications and application servers. Now we need to look under the hood of a generic application server and see what can be tuned and the impact of that component on our environment. In this article, we will look into the J2EE specifications and apply practical knowledge of application server implementation details to identify those tunable components.
Under the Hood: What Does an Application Server Have to Do?
At the time of this writing, most production application servers are J2EE 1.3-compliant, meaning that they satisfy all the requirements defined in the J2EE 1.3 specification. Although there is one J2EE specification, I intentionally referred to it as specifications because the specification refers to a set of other "Application Programming Interfaces" that have their own individual specifications.
Inside the J2EE Specifications
Let's take a look inside the J2EE 1.3 specification. It is available at the following URL: http://java.sun.com/j2ee/download.html.
Depending on when you visit this link, you will notice that the 1.4 specifications are in "Proposed Final Draft 2" (or later), but the reason I am focusing on 1.3 is because application servers do not yet support 1.4.
Chapter 6 of the J2EE specification defines the set and versions of component specifications that must be supported. Those are summarized in Table 1.
Table 1J2EE Specification Components and Versions
Component |
Version |
JDBC |
2.0 |
Enterprise JavaBeans(EJBs) |
2.0 |
Servlet |
2.3 |
JavaServer Pages (JSP) |
1.2 |
Java Messaging Service(JMS) |
1.0 |
Java Transaction API (JTA) |
1.0 |
JavaMail |
1.2 |
J2EE Connection Architecture (JCA) |
1.0 |
Authentication and Authorization (JAAS) |
1.0 |
You can find links to all the specifications for these technologies inside the J2EE Specification, so we will focus on the important aspects of each with respect to performance.
Because each application server must support the aforementioned APIs, we can look at an application server from a general perspective and understand what we might want to tune. Then, when we look at individual application servers, it is just a matter of finding the implementation of that conceptual technology.