Sun GlassFish Enterprise Server

Samples Main Page

# The Weld Servlet Sample Application

This simple demo is intended to illustrate the use and injection of request scoped and session scoped CDI Beans in a Web application. The demo shows how a simple user authentication scheme can be implemented. The demo uses a LoginServlet to authenticate a user based on the provided username/password values. The username and password values provided by the user is saved in a request scoped Credentials bean. The session scoped LoginHandler bean is used to authenticate the credentials provided in the current request.

The code snippet below indicates how the Credentials and LoginHandler bean can be annotated with a javax.enterprise.context.RequestScoped and javax.enterprise.context.SessionScoped annotation to specify to the CDI runtime that the beans are request scoped or session scoped. The CDI runtime automatically manages the lifecycle of these beans. Also note that a request scoped Credentials bean can be injected into a session scoped LoginHandler bean and the CDI runtime would ensure that the right request scoped state is available in the session scoped bean.

`@RequestScoped
public class Credentials {...}
`

`@SessionScoped
public class LoginHandler implements Serializable {
//Get the request scoped Credentials associated
//with this user.
@Inject Credentials credentials;`

`...
}
`
The LoginServlet requests the request scoped Credentials and session scoped LoginHandler bean using field based injection as shown below. In its processRequest() method, it populates the Credentials beans with the values from the form and invokes a login method on the LoginHandler to handle the authentication.

`@WebServlet(name="LoginServlet", urlPatterns={"/LoginServlet"})
public class LoginServlet extends HttpServlet {
// Inject the Credentials request-scoped bean.
@Inject Credentials credentials;
// Inject the Login session-scoped bean.
@Inject LoginHandler login;
..
}`

## 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/weld/weld-servlet/`.
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

`app_dir>` To run the sample, deploy the application using the instructions below and visit the URL http://localhost:8080/weld-servlet

5. Use the target clean to undeploy the sample application and to remove the temporary directories such as 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 Sun GlassFish Enterprise Server.
2. In the NetBeans IDE, choose File → Open Project (Ctrl-Shift-O), navigate to the `samples_install_dir/javaee6/weld/` directory, select `weld-servlet`, and click Open Project.
3. In the Projects tab, right click `weld-servlet` and select Run to build, deploy, and run the project.

## Troubleshooting

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

Copyright © 2009 Sun Microsystems, Inc. All rights reserved.