IT Research Department @BKAP 2015 Page 1 / 17 Lab 05 Singleton Session Beans Mục tiêu - Thao tác với Singleton Session Beans Phần I Bài tập step by step Bài 1 Tạo project EJB với Sin
Trang 1IT Research Department @BKAP 2015 Page 1 / 17
Lab 05 Singleton Session Beans Mục tiêu
- Thao tác với Singleton Session Beans
Phần I Bài tập step by step
Bài 1
Tạo project EJB với Singleton Session Beans có interface là Remote cho phép đăng ký, đăng nhập User của ChatRoom:
UserChat
Project thực hiện các công việc sau:
- Tạo class UserChat tương ứng với bảng UserChat trong CSDL
- Tạo Singleton Session Bean Remote gồm các phương thức sau:
+ registerUser: Đăng ký User
+ login: Đăng nhập User
Trang 2Step 1: Tạo Table UserChat trong Database EJB và các procedure thực hiện nghiệp vụ
registerUser, login
Tạo Database EJB và Table UserChat
Create DataBase EJB
go
USE [EJB]
GO
/****** Object: Table [dbo].[UserChat] Script Date: 6/3/2016 11:31:31 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[UserChat](
[UserID] [int] IDENTITY(1,1) NOT NULL,
[UserName] [nvarchar](50) NOT NULL,
[Password] [nvarchar](50) NOT NULL,
[UCreated] [date] NOT NULL,
[Mail] [nvarchar](50) NULL,
[Address] [nvarchar](100) NULL,
[Phone] [nvarchar](50) NULL,
[StatusLogin] [int] NULL,
CONSTRAINT [PK_EUser] PRIMARY KEY CLUSTERED
(
[UserID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =
ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Tạo Procedure
checkLogin
USE [EJB]
GO
CREATE PROCEDURE [dbo].[checkLogin]
@userName nvarchar(50),
@password nvarchar(50),
@checkNumber int OUTPUT,
@numberOnline int OUTPUT
AS
BEGIN
SELECT @checkNumber = COUNT(*) FROM UserChat u WHERE u.UserName = @userName and u.Password
= @password
if @checkNumber > 0
BEGIN
UPDATE UserChat
SET StatusLogin = 1;
SELECT @numberOnline = COUNT(*) FROM UserChat u WHERE u.StatusLogin = 1;
END
END
Trang 3IT Research Department @BKAP 2015 Page 3 / 17
registerUser
USE [EJB]
GO
CREATE PROCEDURE [dbo].[registerUser]
@userName nvarchar(50),
@password nvarchar(50),
@mail nvarchar(50),
@address nvarchar(100),
@phone nvarchar(50)
AS
BEGIN
DECLARE @date date;
SET @date = GETDATE();
INSERT INTO UserChat
VALUES (@userName,@password,@date,@mail,@address,@phone,0)
END
Step 2: Tạo Project EJB tên Session05 với Session Bean là Singleton - tên S05SingletonBean
và Interface là Remote – tên S05InterfaceRemote (Như đã hướng dẫn ở Lab trước)
Trang 4 Cấu trúc ứng dụng sau khi hoàn thành
Step 3: Khai báo các phương thức nghiệp vụ trên S05SingletonBeanRemote
S05SingletonBeanRemote.java
package bean;
import javax.ejb.Remote;
/**
*
* @author Quang
*/
@Remote
public interface S05SingletonBeanRemote {
public String registerUser(String userName, String password, String mail, String address, String phone);
public int login(String userName, String password);
}
Step 4: Xây dựng java class DBConnection kết nối với DataBase SQL Server 2012 (Đặt trong
package util)
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
*
* @author admin
*/
public class DBConnection {
Trang 5IT Research Department @BKAP 2015 Page 5 / 17
private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=EJB";
private static final String DB_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String user_db = "sa";
private static final String pass_db = "Gacon1984";
public static Connection getDBConnection() {
Connection conn = null;
try {
Class.forName( DB_DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection( URL, user_db, pass_db);
} catch (SQLException ex) {
ex.printStackTrace();
}
return conn;
}
}
Step 5: Thực thi các phương thức nghiệp vụ trên S05SingletonBean
S03_04StatelessBean.java
package bean;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Types;
import javax.ejb.Singleton;
import util.DBConnection;
/**
*
* @author Quang
*/
@Singleton
public class S05SingletonBean implements S05SingletonBeanRemote {
@Override
public String registerUser(String userName, String password, String mail, String address, String phone) {
Connection conn = null;
CallableStatement callableStatement = null;
try {
conn = DBConnection.getDBConnection();
String registerUser = "{call registerUser(?,?,?,?,?)}";
callableStatement = conn.prepareCall(registerUser);
callableStatement.setString(1, userName);
callableStatement.setString(2, password);
callableStatement.setString(3, mail);
callableStatement.setString(4, address);
callableStatement.setString(5, password);
callableStatement.executeUpdate();
Trang 6return "Success";
} catch (Exception e) {
e.printStackTrace();
return "Error";
}
}
@Override
public int login(String userName, String password) {
Connection conn = null;
CallableStatement callableStatement = null;
int check = 0;
int numberOnline = 0;
try {
conn = DBConnection.getDBConnection();
String checkLogin = "{call checkLogin(?,?,?,?)}";
callableStatement = conn.prepareCall(checkLogin);
callableStatement.setString(1, userName);
callableStatement.setString(2, password);
callableStatement.registerOutParameter(3, Types.INTEGER);
callableStatement.registerOutParameter(4, Types.INTEGER);
callableStatement.execute();
check = callableStatement.getInt(3);
numberOnline = callableStatement.getInt(4);
} catch (Exception e) {
e.printStackTrace();
}
if (check > 0) {
return numberOnline;
} else {
return 0;
}
}
}
Step 6: Build and Deploy Project Session05
Step 7: Tạo Project Web Application với Framework là Struts2 làm các client cho User đăng
ký và đăng nhập
Trang 7IT Research Department @BKAP 2015 Page 7 / 17
Trang 9IT Research Department @BKAP 2015 Page 9 / 17
Step 8: Tạo Entity Class tên UserChat như table UserChat trong package entities (Có
get,set, constructor)
UserChat.java
package entities;
import java.util.Date;
/**
*
* @author Quang
*/
public class UserChat {
private int userID;
private String userName;
private String password;
private Date uCreated;
private String mail;
private String address;
private String phone;
public UserChat() {
}
public int getUserID() {
return userID;
}
public void setUserID(int userID) {
this.userID = userID;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getuCreated() {
return uCreated;
}
public void setuCreated(Date uCreated) {
this.uCreated = uCreated;
Trang 10}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
Step 9: Tạo css cho roomchat
Chat.css
.content {
width: 600px;
height: 400px;
overflow: auto;
border: 1px solid #991111;
}
.msg-input {
width: 400px;
border: 1px solid #119911;
}
Step 10: Tạo các trang jsp để cho User đăng ký (register.jsp), đăng nhập (login.jsp) và chat
(roomchat.jsp)
register.jsp
<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Chat Room Register</title>
</head>
<body>
<h2>User Registration</h2>
< s:form action="register" method="Post">
Trang 11IT Research Department @BKAP 2015 Page 11 / 17
< s:textfield label="User Name" name="userRegister.userName"/>
< s:password label="Password" name="userRegister.password"/>
< s:textfield label="Mail" name="userRegister.mail"/>
< s:textfield label="Address" name="userRegister.address"/>
< s:textfield label="Phone" name="userRegister.phone"/>
< s:submit value="Register"/>
</ s:form >
</body>
</html>
login.jsp
<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login Room Chat</title>
</head>
<body>
<h2>Login</h2>
< s:form action="login" method="Post">
< s:textfield label="User Name" name="userLogin.userName"/>
< s:password label="Password" name="userLogin.password"/>
< s:submit value="Login"/>
</ s:form >
<a href="register.jsp">Đăng Ký</a>
</body>
</html>
roomchat.jsp
<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
< c:if test="${userName == null}">
< c:redirect url="login.jsp" />
</ c:if >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Room Chat Page</title>
<link href="css/chat.css" rel="stylesheet" type="text/css"/>
</head>
<body>
< s:form action="message" method="post">
<div style="color: red">
Your name: <span id="userName">${userName}</span>
-
Number Online: <span id="userName">${numberOnline}</span>
</div>
<div id="content" class="content"></div>
<div>
< s:textarea cssClass="msg-input" name="message" label="Input Text Here"/>
< s:submit value="Send" name="send"/>
Trang 12</div>
</ s:form >
</body>
</html>
Step 11: Tạo Action Struts 2 thực hiện đăng ký và đăng nhập cho User (gọi qua Enterprise
java Bean S05SingletonBeanRemote)
package action;
import bean.S05SingletonBeanRemote;
import com.opensymphony.xwork2.ActionSupport;
import entities.UserChat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
/**
*
* @author Quang
*/
public class UserAction extends ActionSupport implements ServletRequestAware{
S05SingletonBeanRemote s05SingletonBean = lookupS05SingletonBeanRemote();
private UserChat userRegister;
private UserChat userLogin;
private HttpServletRequest request;
public UserAction() {
userRegister = new UserChat();
userLogin = new UserChat();
}
public String register() {
String result = null;
try {
result = s05SingletonBean.registerUser(userRegister.getUserName(), userRegister.getPassword(),
userRegister.getMail(), userRegister.getAddress(), userRegister.getPhone());
if (result.equals("Success")) {
return SUCCESS;
}
return ERROR;
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
}
public String login(){
int numberOnline = 0;
try {
numberOnline = s05SingletonBean.login(userLogin.getUserName(), userLogin.getPassword());
if (numberOnline>0) {
request.getSession().setAttribute("userName", userLogin.getUserName());
Trang 13IT Research Department @BKAP 2015 Page 13 / 17
request.getSession().setAttribute("numberOnline", numberOnline);
return SUCCESS;
}
return ERROR;
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
}
private S05SingletonBeanRemote lookupS05SingletonBeanRemote() {
try {
Context c = new InitialContext();
return (S05SingletonBeanRemote) c.lookup(
"java:global/Session05/Session05-ejb/S05SingletonBean!bean.S05SingletonBeanRemote");
} catch (NamingException ne) {
Logger.getLogger(getClass().getName()).log(Level SEVERE, "exception caught", ne);
throw new RuntimeException(ne);
}
}
public UserChat getUserRegister() {
return userRegister;
}
public void setUserRegister(UserChat userRegister) {
this.userRegister = userRegister;
}
public UserChat getUserLogin() {
return userLogin;
}
public void setUserLogin(UserChat userLogin) {
this.userLogin = userLogin;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
@Override
public void setServletRequest(HttpServletRequest hsr) {
this.request = hsr;
}
}
Step 12: Khai báo struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
Trang 14<struts>
<! Configuration for the default package >
<package name="default" extends="struts-default">
<action name="register" class="action.UserAction" method="register">
<result name="input">register.jsp</result>
<result name="success">login.jsp</result>
<result name="error">register.jsp</result>
</action>
<action name="login" class="action.UserAction" method="login">
<result name="success">roomChat.jsp</result>
<result name="error">login.jsp</result>
</action>
</package>
</struts>
Cấu trúc Project sau khi hoàn thành