| Sun GlassFish Enterprise Server |
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;
..
}
Perform the following steps to build, deploy, and run the
application:
app_dir is the sample application base
directory:samples_install_dir/javaee6/weld/weld-servlet/.Change directory to app_dir.
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
app_dir> ant
clean
Perform the following steps to build, deploy, and run the application using NetBeans IDE:
samples_install_dir/javaee6/weld/
directory, select weld-servlet, and click Open Project.weld-servlet and
select Run to build, deploy, and run the project.Copyright © 2009 Sun Microsystems, Inc. All rights reserved.