Java EE 6 SDK

Samples Main Page

# The Servlet 3.0 Asynchronous Sample Application

This is a simple Servlet 3.0 application using asychronous API.

Servlet

The servlet is responsible for asynchronous request processing.

> - In the `init` method, start a thread to read message from the `messageQueue` and then process the message for each `AsyncContext` in the queue as follows:

>   `PrintWriter acWriter = ac.getResponse().getWriter();
>   acWriter.println(cMessage);
>   acWriter.flush();`

>   The preceding code writes a message to each asynchronous request corresponding to `AsyncContext`.

> - In `doGet`, set the timeout to ten minutes, start asynchronous, and add `AsyncContext` to a queue as follows:

>   `final AsyncContext ac = req.startAsync();
>   ac.setTimeout(10 * 60 * 1000);
>   queue.add(ac);`

>   Registers `AsyncListener` with the `AsyncContext`. In this case, only clean up the `AsyncContext` from the queue.

>   `ac.addListener(new AsyncListener() {
>   public void onComplete(AsyncEvent event) throws IOException {
>   queue.remove(ac);
>   }
>   public void onTimeout(AsyncEvent event) throws IOException {
>   queue.remove(ac);
>   }
>   public void onError(AsyncEvent event) throws IOException {
>   queue.remove(ac);
>   }
>   public void onStartAsync(AsyncEvent event) throws IOException {
>   }
>   });`

> - In `doPost`, put a message to the messageQueue. This message is picked up in the thread that starts in the `init` method.

Deployment Descriptor
The good news is the deployment descriptor is no longer required!
Sun GlassFish Enterprise Server Specific Deployment Configuration
There is no need to define any Sun GlassFish Enterprise Server specific deployment descrpitor (`sun-web.xml`) for this example.

## Building, Deploying, and Running the Application

Perform the following steps to build, deploy, and run the application:

1. Set up your build environment and configure the application server with which the build system has to work by following the common build instructions.
2. `app_dir` is the sample application base directory: `samples_install_dir/javaee6/web/servlet/async-request-war`
3. ````Change directory to `app_dir.
   `
4. Build, deploy, and run the sample application using the `all` target.``

`app_dir> ant all`

You can replace the `ant all` command with the following set of commands:

`app_dir> ant default` compiles and packages the application

`app_dir> ant deploy` deploys it to application server

5. To run this chat application, you need two browsers, say Browser A and Browser B.
   - In Browser A, open http:<javaee.server.name>:<javaee.server.port>/async-request-war. Repeat this step for Browser B also.
   - In Browser A, input user name, say "userA", in the text box. Click the Login button. The following message is displayed in Browser A and Browser B:

     `System Message:
     userA has joined.`

     Similarly, login as "userB" in Browser B.

   - Now, you are ready to chat. In Browser A,type "Hello", in text box and click the Post Message button. You will see the following message in both Browser A and Browser B:

     `userA:
     Hello`

     Try the same step in Browser B also.

6. Use the target `undeploy` to undeploy the application.

   `app_dir> ant undeploy`

7. Use the target `clean` to remove the temporary directories like build and dist.

   `app_dir> ant clean`

## Building, Deploying, and Running the Application in NetBeans IDE

Perform the following steps to build, deploy, and run the application using NetBeans IDE:

1. Refer to the common build instructions for setting up NetBeans IDE and Java EE 6 SDK.
2. In the NetBeans IDE, choose File → Open Project (Ctrl-Shift-O), navigate to the `samples_install_dir/javaee6/web/servlet/` directory, select `async-request-war`, and click Open Project.
3. In the Projects tab, right click `async-request-war` and select Run to build, deploy, and run the project.

## Troubleshooting

If you have problems when running the application, refer the troubleshooting document.

Copyright © 1997-2010 Oracle and/or its affiliates. All rights reserved.