IT Research Department @BKAP 2015 Page 1 / 15Mục tiêu - Cấu hình JDBC Connection Pool trên GlassFish Server - Tạo và thực thi Session Bean với Bean-Managed Transasction Phần I Bài tập
Trang 1IT Research Department @BKAP 2015 Page 1 / 15
Mục tiêu
- Cấu hình JDBC Connection Pool trên GlassFish Server
- Tạo và thực thi Session Bean với Bean-Managed Transasction
Phần I Bài tập step by step
Bài 5.1 Xây dựng một ứng dụng chuyển tiền tài khoản
Step 1: Tạo Database Banking
Tạo bảng Accounts có các trường
AccountNo: Nvarchar(10), Primary Key
Balance: Numeric(20,2)
Tạo 2 bản ghi bảng Accounts
Trang 2Step 2: Copy sqljdbc4.jar vào thư mục lib của server glassfish
Step 3: Tạo Connection Pool
Netbean Services Servers RC GlassFish Server View Domain Admin Console
Resources JDBC JDBC Connection Pools New
Trang 3IT Research Department @BKAP 2015 Page 3 / 15
Test Connection Pool BankingPool
Trang 4Step 4: Tạo JDBC Resources
Step 5: Tạo Enterprise Application
File New Project Java EE Enterprise Application
Trang 5IT Research Department @BKAP 2015 Page 5 / 15
Trang 6Step 6: Tạo Stateless Session Bean trong package beanpack
PaymentApplication-ejb New Other Enterprise JavaBeans Session Bean
Trang 7IT Research Department @BKAP 2015 Page 7 / 15
AccountBean.java
package beanpack;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.sql.DataSource;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
/**
*
* @author Quang
*/
@Stateless
@LocalBean
@TransactionManagement(value = TransactionManagementType.BEAN)
public class AccountBean {
Trang 8//Khai bao Connection
private Connection conn;
//khai bao datasource
@Resource(mappedName = "jdbc/Banking")
private DataSource dataSource;
//Khai bao User Transaction
@Resource
private UserTransaction userTransaction;
//Phuong thuc khoi tao connection
@PostConstruct
public void initializeResources() {
System.out.println("PostConstruct callback");
try {
conn = dataSource.getConnection();
} catch (SQLException ex) {
Logger.getLogger(AccountBean.class.getName()).log(Level SEVERE, null, ex);
}
}
//Phuong thuc kiem tra so tai khoan co ton tai hay khoong
public boolean confirmAccount(String accountNo) {
//Khai bao bien kiem tra so tai khoan
boolean validAcc = false;
if (accountNo != null && !accountNo.isEmpty()) {
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT AccountNo FROM Accounts WHERE AccountNo = '" + accountNo +
"'");
if (rs.next()) {
validAcc = true;
}
rs.close();
} catch (SQLException ex) {
Logger.getLogger(AccountBean.class.getName()).log(Level SEVERE, null, ex);
throw new javax.ejb.EJBException(ex.getMessage());
}
}
return validAcc;
}
//Phuong thuc chuyen khoan
public void transferFund(String fromAcc, double balance, String toAacc) {
try {
userTransaction.begin();
if (confirmAccount(fromAcc) && confirmAccount(toAacc)) {
Statement stmt = null;
stmt = conn.createStatement();
//Tru tien tai khoan chuyen
stmt.executeUpdate("UPDATE Accounts SET Balance = Balance - " + balance + " WHERE AccountNo = '" + fromAcc + "'");
//Cong tien tai khoan duoc chuyen
stmt.executeUpdate("UPDATE Accounts SET Balance = Balance + " + balance + " WHERE AccountNo = '" + toAacc + "'");
userTransaction.commit();
} else {
throw new SQLException("Invalid Account Number");
Trang 9IT Research Department @BKAP 2015 Page 9 / 15
}
}
}
}
Step 7: Tạo trang PaymentForm.jsp
PaymentApplication-war Web Pages New Other Web JSP
PaymentForm.jsp
<%@ pagecontentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Payment Form</title>
</head>
<body>
<h2>Payment Form</h2>
<form name="PaymentForm" action="FundTransferServlet" method="submit">
From Account Number: <input name="fromAcc" size="20" value=""/><br/>
Amount to be transferred: <input name="balance" size="20" value=""/><br/>
To Account Number: <input name="toAcc" size="20" value=""/><br/>
<hr>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
Step 8: Tạo Servlet tên FundTransferServlet trong package servlet
PaymentApplication-war Source Packages New Other Servlet
Trang 11IT Research Department @BKAP 2015 Page 11 / 15
FundTransferServlet.java
package servlet;
import beanpack.AccountBean;
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author Quang
*/
public class FundTransferServlet extends HttpServlet {
//goi Enterprise Session Bean
@EJB
private AccountBean accountBean;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods
*
* @param request servlet request
Trang 12* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
//Lay cac thong tin tren form
String fromAcc = request.getParameter("fromAcc");
String balance = request.getParameter("balance");
String toAcc = request.getParameter("toAcc");
PrintWriter out = response.getWriter();
try {
/* TODO output your page here You may use following sample code */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet FundTransferServlet</title>");
out.println("</head>");
out.println("<body>");
accountBean.transferFund(fromAcc, Double.valueOf(balance), toAcc);
out.println("<h2>Fund Transferred Succcessfully</h2>");
} catch (Exception ex) {
out.println("<h2>Error in transferring fund</h2>");
} finally {
out.println("</body>");
out.println("</html>");
out.close();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
Trang 13IT Research Department @BKAP 2015 Page 13 / 15
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
Step 9: Đặt PaymentForm.jsp làm trang home
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>FundTransferServlet</servlet-name>
<servlet-class>servlet.FundTransferServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FundTransferServlet</servlet-name>
<url-pattern>/FundTransferServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>PaymentForm.jsp</welcome-file>
</welcome-file-list>
</web-app>
Trang 14 Ứng dụng sau khi hoàn thành
Step 10: Build and Run Application
Trang 15IT Research Department @BKAP 2015 Page 15 / 15