Create & use session bean

* Khái niệm về Session Bean trong EJB
- Tồn tại cùng với thời gian của clients.
- Được tạo để đáp ứng (response) yêu cầu (request) của client. Bean sẽ bị hủy khi client nhận và xử lý xong response.
- Đối tượng xử lý nghiệp vụ (business logic, business rule và workflow)
 Ví dụ: kiểm tra login, xử lý phép tính, quá trình xử lý văn bản, mượn sách thư viện (Qui trình thực hiện)
Tại một thời điểm thì một client chỉ dùng 1 instance session bean (do container tạo) mà không chia sẻ cho client khác (một client sử dụng một bean tương ứng với yêu cầu xử lý).
Có 02 loại session bean đó là stateless session bean và stateful session bean
* Stateless Session bean
- Simple Request: Dùng cho các nghiệp vụ - chức năng với yêu cầu xử lý đơn giản, không cần lưu trữ thông tin sau mỗi lần xử lý hay là kết quả tính toán thông thường không cần cập nhật.
- Stateless: không cần lưu trữ trạng thái trong quá trình hoạt động (non-converstation). Không duy trì cùng trạng thái khi thực hiện request lần thứ 2.
Khi có sự cố, request sẽ được chuyển đến component khác hay instance bean khác tương ứng (do cơ chế 1 đáp ứng 1)
Ví dụ: thực hiện thao tác cộng trừ nhân chia, thao tác truy vấn thống kê dữ liệu
* Stateful Session bean
- Multiple Request: các nghiệp vụ khi có nhiều yêu cầu tại một thời điểm nhằm đảm bảo hoạt động phức tạp của client.
- Keep track: lưu trữ trạng thái của việc xử lý request trong quá trình hoạt động và hỗ trợ việc phục vụ nhiều clients
- Thời gian tồn tại của stateful rất phức tạp vì cơ chế persistent – lưu trữ trạng thái được áp dụng cho bean để có thể chuyển đổi bean giữa các client để đảm bảo khả năng phục vụ của container đối với tất cả yêu cầu của client
Ví dụ: shopping carts
- Người lập trình phải xác định nghiệp vụ - workflow hay chức năng của ứng dụng phát triển – business để chọn lựa hay stateful hay stateless. Tuy nhiên, khi chọn lựa cần cân nhắc
- Stateful có khả năng mất dữ liệu nhiều hơn stateless vì cơ chế persistence có khả năng gây mất dữ liệu vì cache của server có giới hạn, ngoài ra khi xảy ra sự cố (như crash server) có thể gây mất dữ liệu không thể thực hiện phục hồi.
- Sử dụng stateless có thể làm giảm hiệu xuất xử lý vì mỗi request sử dụng 1 instance bean (gây nghẽn mạch, thắt nút cổ chai nếu yêu cầu diễn ra quá nhiều)
- Các thành phần của EJB Session Beans:



* ejbCreate:- Khởi tạo bean. Hàm này được bean kích hoạt khi người dùng phát sinh lệnh create tương ứng được định nghĩa trong Home Interface
- Truyền tham số cho bean để khởi tạo giá trị ban đầu. Đối với Stateless Session Bean hàm ejbCreate và create tương ứng là duy nhất và không truyền tham số, trong khi đối với Stateful Session Bean hàm này có thể khai báo nhiều lần với nhiều tham số khác nhau tương ứng với các hàm create trong Home Interface – overloading
- Phương thức này được gọi sau khi setSessionContext thực thi.




- Hàm ejbCreate luôn trả về kiểu void nhưng create lại trả về kiểu component interface
Cách thức cài đặt Session Bean
+ Step 1: Tạo Remote Interface
extends javax.ejb.EJBObject
Định nghĩa các phương thức xử lý mà ứng dụng phải thực hiện
Interface và phương thức phải khai báo là public.
Các phương thức phải được bẫy lỗi qua java.rmi.RemoteException
+ Step 2: Tạo Home Interface
extends javax.ejb.EJBHome
Định nghĩa phương thức create() không tham số bẫy lỗi java.rmi.RemoteException và javax.ejb.CreateException
Kiểu dữ liệu trả về của create() là kiểu Remote Interface
Interface và phương thức phải khai báo là public.
+ Step 3: Tạo Local Interface (Không bắt buộc)
extends javax.ejb.EJBLocalObject
Định nghĩa các phương thức giống y hệt Remote Interface và bỏ đi bẫy lỗi java.rmi.RemoteException trên từng phương thức
+ Step 4: Tạo Home Interface (Không bắt buộc)
extends javax.ejb.EJBLocalHome
Định nghĩa phương thức create() không tham số bẫy lỗi javax.ejb.CreateException
Kiểu dữ liệu trả về của create() là kiểu Local Interface
Interface và phương thức phải khai báo là public.
+ Step 5: Tạo Bean Class
implements javax.ejb.SessionBean
implements 05 phương thức callbacks
implements các phương thức đã được định nghĩa trong Remote/ Local Interface
Interface và phương thức phải khai báo là public.
Các Exception và tham số truyền của bean class và Interface phải giống nhau ngoài trừ RemoteException
+ Step 6: Tạo Deployment Descriptor cho ejb-jar.xml và jboss.xml (vì deploy tên JBoss – Application Server hỗ trợ EJB) đặt trong thư mục META-INF
Cấu trúc ejb-jar.xml
<?xml version="1.0"?></span></p> <p class="MsoBodyTextIndent"><span style="line-height: 115%;" lang="DE"><ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee"</span></p> <p class="MsoBodyTextIndent"><span style="line-height: 115%;" lang="DE">xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</span></p> <p class="MsoBodyTextIndent"><span style="line-height: 115%;" lang="DE">xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee</span></p> <p class="MsoBodyTextIndent"><span style="line-height: 115%;" lang="DE">http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"></span></div> <div class="MsoBodyTextIndent" style="margin-left: 0cm;">
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>Tên đại diện</ejb-name>
<home>tên interface home</home>
<remote>tên interface remote</remote>
<local-home>tên interface local home</local-home>
<local>tên interface local</local>
<session-type>Stateless/Stateful</session-type>
<transaction-type>Bean</transaction-type>
<session>
</enterprise-beans>
</ejb-jar>


- Cấu trúc jboss.xml
<?xml version="1.0"?></span></p> <p class="MsoBodyTextIndent"><span style="line-height: 115%;"><!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN"</span></div> <div class="MsoBodyTextIndent"> "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
<jboss>
<enterprise-beans>
<session>
<ejb-name>Tên đại diện</ejb-name>
<jndi-name>Tên để tham chiếu cho remote</jndi-name>
<local-jndi-name>Tên để tham chiếu cho local</local-jndi-name>
<session>
</enterprise-beans>
</jboss>


+ Step 7: Tạo jar file
Biên dịch các class Java
Sử dụng lệnh đóng gói: jar –cvf tênfile.jar classjava META-INF/*
+ Step 8: Deploy
Run Application Server
Deploy EJB-JAR file lên Application Server (xác định tên deploy)
+ Step 9: Tạo Client program
Dùng JNDI tìm kiếm ứng dụng trên Application Server
Thực hiện tạo EJB Object
Thực hiện các phương thức theo yêu cầu
+ Step 10: Chạy Client để kiểm tra ứng dụng

Nhận xét