Xây dựng Bean thao tác lưu vết trạng thái

Một phần của tài liệu đồ án tốt nghiệp nghiên cứu công nghệ j2ee khảo sát session bean và thiết kế mô hình web (Trang 35 - 41)

Thành phần Hello Bean mà ta xây dựng trên đây là thành phần Bean EJB thao tác phi trang thái (stateless bean). Có những thành phần Bean đòi hỏi phải lưu giữ thông tin trong suốt quá trình giao dịch, nó được gọi là thành phần Bean lưu vết trạng thái.Sau đây chúng ta sẽ thiết kế thành phần Bean phục vụ thao tác mua bán sách có tên là CartBean. Việc thiết kế thành phần Bean thao tác lưu vết trạng thái, cũng giống như việc thiết kế thành phần Bean thao tác phi trang thái, chúng ta cũng xây dựng các lớp Remote, lớp Home và thành phần Bean. Sau đây là đặc tả các lớp:

• Lớp Cart: tương tự như lớp Hello nó cũng kế thừa lớp javax.ejb.EJBObject.:

import java.util.*

import javax.ejb.EJBObject; import java.rmi.RemoteException;

ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2: TRIỂN KHAI ĐỐI TƯỢNG BEAN EJB

public interface Cart extends EJBObject {

public void addBook(String title) throws RemoteException;

public void removeBook(String title) throws BookException,RemoteException;

public Vector getContents() throws RemoteException; }

• Lớp CartHome: tương tự như lớp HelloHome, lớp CartHome cũng kế thừa lớp EJBHome.

import java.io.Serializable;

import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome;

public interface CartHome extends EJBHome {

Cart create(String person) throws RemoteException,CreateException;

Cart create(String person, String id) throws RemoteException,CreateException;

}

• Lớp CartBean: cũng giống như lớp HelloBean, CartBean là nơi đặc tả các phương thức để client triệu gọi thông qua lớp Cart trong trình chứa.

Import java. util.* import javax.ejb.*

public class CartBean implements SessionBean {

String customerName; String customerId; Vector contents;

// Tạo đối tượng EJB dựa vào tên khách hàng

public void ejbCreate(String person) throws CreateException {

ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2: TRIỂN KHAI ĐỐI TƯỢNG BEAN EJB

throw new CreateException(“Null person not allowned”); } else {

customerName=person; }

// Tạo đối tượng kiểm tra định danh của khách hàng sử dụng Bean IdVerifier idChecker = new IdVerifier();

If(idChecker.validate(id)) {

CustomerId = id; }else {

throw new CreateException(“Invalid id:” +id); }

contents = new Vector(); }

// Thêm tựa sách bào danh mục (adsbygoogle = window.adsbygoogle || []).push({});

public void addBook(String title) {

contents.addElement(title); }

// Loại tựa sách ra khỏi danh mục

public void removeBook(String title) throws BookException

{

boolean result = contents.removeElement(title);

if(result = = false) { throw new BookException(title + “not in cart.”);

} }

// Trả về danh mục sách đã chọn public Vector getContents() {

return contents; }

ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2: TRIỂN KHAI ĐỐI TƯỢNG BEAN EJB

public CartBean() {

}

// Các phương thức triệu gọi bởi trình chứa public void ejbRemove()

{

System.out.println(“Bean Remove”); }

public void ejbActivate() {

System.out.println(“Bean Active”); }

public void ejbRemove() {

System.out.println(“Bean Remove”); }

public void ejbPassivate() {

System.out.println(“Bean Passivate”); }

public void setSessionContext(SessionContext sc) {

} }

• CartBean xây dựng lớp IdVerifier để kiểm tra định danh của khách hàng mua sách như sau:

Public class IdVerifier {

Public IdVerifier() {

}

ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2: TRIỂN KHAI ĐỐI TƯỢNG BEAN EJB

{ (adsbygoogle = window.adsbygoogle || []).push({});

boolean result = = true;

for(int i = 0; i < id.length(); i++) { if(Character.isDigit(id.charAt(i)) = = false) result = false; } return result; } }

• Chúng ta xây dựng lớp ngoại lệ BookException phục vụ cho CartBean phát sinh lỗi khi xóa hết sách trong danh mục như sau:

public class BookException extends Exception {

public BookException() {

}

public BookException( String msg) {

super(msg); }

}

Để đưa CartBean vào trình chứa của J2EE, chúng ta biên dịch mã nguồn của Cart.java, CartHome.java, CartBean.java. Chúng ta dùng trình đóng gói deploytool để tạo ra gói .jar chứa thành phần Bean đồng thời chuyển giao Bean cho trình chứa J2EE tương tự như các bước chúng ta đã làm với Session Stateless Bean. Chỉ khác ở chổ ta chọn Bean Type là Stateful.

• Tiếp theo, chúng ta sẽ viết trình khách triệu gọi đối tượng CartBean, nó được viết như sau:

ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2: TRIỂN KHAI ĐỐI TƯỢNG BEAN EJB

import java.util.*

import javax.naming.Context; import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; public class CartClient

{

public static void main(String [] args) {

try {

// Khởi tạo môi trường

Context initial = new initialContext(); // Lấy về tham chiếu của lớp chủ CartHome

Object objref = initial.lookup(“java:comp/env/ejb/CartBean”); // Chuyển kiểu tham chiếu

CartHome home=(CartHome)PortableRemoteObject.narrow (objref,CartHome.class);

Cart shoppingCart = home.create(“Mr.Duke”,”123”); // Triệu gọi phương thức Bean để thêm vào tựa sách shoppingCart.addBook(“Java Book”);

shoppingCart.addBook(“Programing Visual Basic”); shoppingCart.addBook(“Network programing”); // Lấy về danh mục các tựa sách đã chọn

Vector bookList = new Vector(); bookList = shoppingCart.getContents(); Enumeration enumer = bookList.elements(); // In các tựa sách trong danh mục

while(enumer.hasMoreElements()) {

String title = (String)enumer.nextElement(); System.out.println(title);

// Gọi phương thức loại bỏ sách ra khỏi danh mục shoppingCart.removeBook(“Programing Visual Basic”); shoppingCart.remove();

ĐỒ ÁN TỐT NGHIỆP CHƯƠNG 2: TRIỂN KHAI ĐỐI TƯỢNG BEAN EJB

}catch (BookException ex) {

System.err.println(“Caught a Book Exception: ” + ex.getMessage()); (adsbygoogle = window.adsbygoogle || []).push({});

} } }

Một phần của tài liệu đồ án tốt nghiệp nghiên cứu công nghệ j2ee khảo sát session bean và thiết kế mô hình web (Trang 35 - 41)