EJB 3.x và JavaEE
Trang 1EJB 3.x và JavaEE
thangld@uit.edu.vnKhoa Mạng máy tính và Truyền thôngĐại học Công nghệ Thông tin
Enterprise JavaBean
Trang 3JavaEE Application
Trang 4Kiến trúc ứng dụng đa lớp
Trang 5Enterprise JavaBean 5
JavaEE application workflow
Trang 6Enterprise JavaBean
Trang 7Enterprise JavaBean 7
Server-side component cài đặt business logic cho ứng dụng
Thực thi trong EJB container môi trường thực thi ở Application Server
EJB container hỗ trợ transaction và security cho các EJB
Version: 3.x
Trang 8EJB Container trong JavaEE
Trang 9Enterprise JavaBean 9
Ưu điểm
Lập trình viên chỉ quan tâm đến việc cài đặt
business logic cho ứng dụng; vấn đề transaction và security được EJB container hỗ trợ
Client module chỉ quan tâm đến việc trình bày dữ liệu; EJB đảm nhiệm thực thi business logic
EJB: portable component
Trang 10Mục đích sử dụng
Ứng dụng có tính ổn định cao
Số lượng người dùng
Phân tán component
EJB transparent đối với người dùng
Đảm bảo tính toàn vẹn dữ liệu với transaction
Ứng dụng có nhiều loại client khác nhau: web application, desktop application
Trang 11Enterprise JavaBean 11
Phân loại EJB
Sesion: Thực thi một tác vụ theo yêu cầu của client
Message-Driven: Hoạt động như là một bộ lắng nghe các JMS API, xử lý các thông điệp theo cơ chế bất đồng bộ
Entity: Đại diện cho một thực thể tồn tại trong hệ thống lưu trữ (CSDL) khái niệm cũ trong J2EE platform
Trang 12EJB trong JavaEE
Trong EJB 3, session bean và message-driven bean là các Java class thông thường với các annotation
Entity EJB 2.x vẫn được hỗ trợ
Entity Bean có thể được phát triển theo hướng khác
Trang 13Session Bean
Trang 14Session Bean
Đại diện cho một client ở phía application server
Cung cấp các phương thức business logic phục
Trang 15Enterprise JavaBean 15
Session Bean
Stateless
Không duy trì trạng thái giao dịch với client: phục vụ client gọi thực thi các phương thức xử lý đơn lẻ
Hỗ trợ tốt đối với các ứng dụng với số lượng người dùng lớn
Stateful
Các thuộc tính của lớp (EJB) biểu diễn trạng thái của một phiên làm việc duy nhất giữa client và bean
Duy trì trạng thái giao dịch với client thông qua các thuộc tính của bean trong suốt quá trình làm việc giữa client và bean
Khi client kết thúc phiên làm việc với bean, thông tin về trạng thái giao dịch sẽ bị hủy
Trang 16Mục đích sử dụng
Một client truy xuất đến một đối tượng bean
Trạng thái giao dịch không được lưu trữ lại vì chỉ tồn tại trong một khoảng thời gian ngắn.
Khi cần cài đặt một web service
Trang 17Enterprise JavaBean 17
Stateful Bean: Mục đích sử dụng
Stateful
Trạng thái của bean biểu diễn quá trình tương tác giữa bean và một client cụ thể
Cần duy trì trạng thái của giao dịch trong quá trình client gọi thực thi các phương thức của bean
Bean đóng vai trò giao tiếp trung gian giữa client và các component khác của ứng dụng Bean điều phối luồng xử lý truy xuất đến nhiều bean khác.
Trang 18Stateless Bean: Mục đích sử dụng
Stateless
Bean không cần lưu trữ bất kỳ thông tin nào liên quan đến giao dịch với client
Trong một lời gọi phương thức, bean thực thi một business logic chung cho tất cả mọi client
Bean có thể truy vấn dữ liệu (read-only mode) cho client sử dụng
Trang 19Entity với JPA
Trang 20Entity (Bean) 3.x
Một Entity đại diện cho một table trong CSDL
quan hệ, chẳng hạn như customer, order,
Mỗi entity instance biểu diễn một dòng dữ liệu trong table đó
Thông tin trạng thái lưu trữ trong một entity được biểu diễn bằng tập các thuộc tính
persistent.
Trang 21Enterprise JavaBean 21
Cài đặt
Class phải được chú dẫn bằng javax.persistence.Entity
Class phải chứa một phương thức khởi tạo mặc định
public hoặc protected
Class không final và không phương thức hoặc thuộc tính nào final
Nếu một entity instance được sử dụng để truyền tham trị (detached object), entity class phải thi công interface
Các thuộc tính phải có phạm vi truy xuất private,
protected hoặc default, và chỉ được truy xuất trực tiếp
bởi các phương thức của bean
Nếu một thuộc tính transient hoặc được chú dẫn @Transient (javax.persistence.Transient) sẽ không
được ánh xạ với dữ liệu trong CSDL
Trang 27Enterprise JavaBean 27
Persistence Unit
Định nghĩa tập tất cả các entity class được quản lý bởi một EntityManager trong ứng dụng
Được định nghĩa trong tập tin cấu hình
persistence.xml nằm trong thư mục META-INF
Trang 28Mục đích sử dụng
Bean biểu diễn một đối tượng business, không phải là một thủ tục
Thông tin trạng thái của bean cần được lưu trữ, ánh xạ với dữ liệu trong CSDL
Trang 29Message-Driven Bean
Trang 30Message-Driven Bean
Cho phép ứng dụng JavaEE xử lý các thông điệp theo cơ chế bất đồng bộ
Hoạt động như một bộ lắng nghe các thông điệp JMS từ bất kỳ JavaEE component nào (ứng
dụng client, Enterprise JavaBean hoặc các web component), hoặc một ứng dụng JMS khác hoặc cũng có thể là một hệ thống non-JaveEE.
Xử lý các thông điệp JMS cũng như các loại
Trang 31Enterprise JavaBean 31
Message-Driven Bean
Trang 32Đặc điểm
Client không định vị và truy xuất trực tiếp các message-driven bean thông qua interface
Message-Driven Bean chỉ được cài đặt gồm duy nhất một class
Message-Driven Bean có một vài điểm tương đồng với session bean
Thực thể Message-Driven Bean không lưu trữ dữ liệu hoặc trạng thái giao dịch với client
Tất cả các đối tượng của một message-driven bean
Trang 34Mục đích sử dụng
Cần cơ chế xử lý thông điệp bất đồng bộ
Trang 35Enterprise JavaBean 35
Cài đặt
Class phải public; không abstract hoặc final
Phải cài đặt phương thức khởi tạo mặc định
Không được cài đặt phương thức finalize
Trang 36Phương thức onMessage
Phương thức này được gọi thực thi bởi EJB container khi có một thông điệp được gửi đến bean để phục vụ Trong JMS, phương thức
onMessage là phương thức của interface MessageListener
Phương thức này phải:
Là phương thức public
Không final hoặc static
Chỉ nhận vào một tham số (thông điệp gửi đến) kiểu
Trang 38Business Interface
Trang 39Enterprise JavaBean 39
Business Interface
Java interface thông thường
Client truy xuất các sesion bean thông qua các phương thức được định nghĩa trong business interface của bean
Bean class phải thi công interface này
Client có thể giao tiếp với bean thông qua cơ chế: remote, local hoặc webservice
Trang 40Business Interface
Local / Remote interface
Mặc định là Local: annotation @Local
Remote: sử dụng annotation @Remote hoặc mô tả trong file cấu hình
Các annotation được sử dụng trong interface hoặc trong bean class
@Local
Trang 41Enterprise JavaBean 41
Remote Client
Client và bean thực thi trên hai JVM khác nhau
Có thể là một web component, application, hoặc một enterprise bean khác
Vị trí của bean là hoàn toàn trong suốt đối với
Trang 43Enterprise JavaBean 43
Ví dụ
#Hello.java@Remote
public interface HelloRemote {
public String hello(String name);}
#HelloBean.java@Stateless
public class HelloBean implements HelloRemote {public String hello(String name) {
String result = “Hello, “ + name;System.out.println(result);
return result;}
}
Trang 44Local Client
Client và Bean thực thi trên cùng một JVM
Có thể là một web component hoặc một enterprise bean khác
Vị trí của bean không hoàn toàn trong suốt đối với client
Thường sử dụng trong trường hợp:
Bean gọi Bean hoặc Web component gọi Bean trong cùng một logic unit (container / enterprise application)
Trang 46Ví dụ
#HelloLocal.java@Local
public interface HelloLocal {
public String hello(String name);}
#HelloBean.java@Stateless
public class HelloBean implements HelloLocal {public String hello(String name) {
Trang 47Enterprise JavaBean 47
Method Parameter
Remote call: truyền đối tượng bằng tham trị
Local call: truyền đối tượng bằng tham chiếu
Trang 48EJB JAR
Trang 49Enterprise JavaBean 49
EJB JAR file
Enterprise bean class
Business interface
Helper class
Trang 50Chu kỳ sống của EJB
Trang 51Enterprise JavaBean 51
Chu kỳ sống: Staless Sesion EJB
Trang 52Chu kỳ sống: Stateful Session EJB
Trang 53Enterprise JavaBean 53
Chu kỳ sống: Message-Driven EJB
Trang 55Q&A