Preparing for Distributed Deployment

As I described in the previous section, some web containers can distribute the requests for a web application’s resources over multiple servers, each server running its own Java Virtual Machines (JVM). Of course, this has implications for how you develop your application. So, by default, a web container must use only one JVM for an application.

If you want to take advantage of web-container controlled load balancing, you must do two things: mark the application as distributable and follow the rules for a distributed application defined by the servlet specification.

To mark an application as distributable means adding a <distributable/> element in the deployment descriptor for the application:

<web-app>
  <description>A distributable application</description>
  
  <distributable/>
  
  <context-param>
    ...
  
</web-app>

By doing so, you’re telling the web container that your application adheres to the rules for distributed applications. According to the servlet specification, a distributed application must be able to work within the following constraints:

  • Each JVM has its own unique servlet instance for each servlet declaration. If a servlet implements the javax.servlet.SingleThreadModel interface, each JVM may maintain multiple instances of the servlet class.

  • Each JVM has its own unique javax.servlet.ServletContext instance. Objects placed in the context are not distributed between JVMs.

  • Each JVM has its own unique listener class instances. Event notification is ...

Get JavaServer Pages, 3rd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.