• Các client có thể là một desktop application, jsp/servlet hoặc có thể là một ứng dụng .NET truy xuất theo cơ chế web service • Các hàm của session bean có thể được truy xuất từ xa, khô
Trang 1EJB Introduction & Session Bean
Đào Anh Tu n – ấ
datuan@fit.hcmuns.edu.vn
Trang 2EJB Introdution – Định nghĩa
• Enterprise JavaBeans (EJB) is a platform for
building portable, reusable, and scalable
business applications using the Java
programming language
• From a developer’s point of view, an EJB is a
piece of Java code that executes in a
specialized runtime environment called the EJB
container, which provides a number of
component services
Trang 3• Reusable: For example, you can implement the credit
card–charging module as an EJB component that may be accessed by multiple applications
• Main strength: Multithreading
Trang 4Các dịch vụ EJB hỗ trợ
Trang 5Vai trò EJB trong mô hình layers
Trang 6Vị trí của EJB
Trang 7• Trong đó Session và Message-Driven Beans
đảm nhiệm vai trò ở tầng Business, Entity
Beans đảm nhiệm vai trò ở tầng Persistence
Trang 8J2EE Container
• EJB chỉ có thể thực thi trong các EJB Container
• J2EE container cung cấp cho người dùng nhiều dịch vụ cao cấp khác nhau
• Trong phạm vi môn học: Sử dụng server JBoss
Trang 9Bussiness Logic with Session Bean
• Một ứng dụng thường bao gồm rất nhiều nghiệp vụ: Kiểm tra tài khoản, rút tiền, xuất hóa đơn …
• Session Bean đóng vai trò cài đặt các chức năng nghiệp
vụ cho ứng dụng.
• Nói một cách đơn giản: Session bean bao gồm một tập các hàm cho phép client truy xuất để hoàn thành một
công việc nào đó.
• Các client có thể là một desktop application, jsp/servlet hoặc có thể là một ứng dụng NET truy xuất theo cơ chế web service
• Các hàm của session bean có thể được truy xuất từ xa, không nhất thiết phải nằm trên máy cục bộ -> ứng dụng phân tán (distributed)
Trang 10Một số điểm mạnh khi dùng session bean:
• concurrency and thread safety: có thể xử lý
nhiều client cùng lúc mà không cài đặt các cơ chế đặc biệt (do container quản lý)
• remote invocation: có thể được triệu gọi từ xa
• transaction and security management
Trang 11Cấu trúc một session bean:
• Gồm 2 phần: Bean interfaces và bean
implementation class
• Client không được phép truy xuất trực tiếp đến
implementation class mà phải truy xuất thông qua interface
• Interface sẽ triệu gọi hàm tương ứng của
implemtation class và trả kết quả cho client
Trang 13Phân loại Session Bean
Trang 14Ví dụ minh họa
• Xây dựng một stateless session bean hỗ trợ
việc cộng hai số lớp (vài trăm chữ số - lớp
BigInteger trong Java)
• Hàm cung cấp cho user triệu gọi từ xa có dạngBigInteger add (BigInteger a, BigInteger b)
Trang 15Xây dựng Interface
• Có 3 loại interface:
▫ Local: Client và Bean nằm trên cùng một JVM
▫ Remote: Client có thể nằm ở xa Bean (khác máy tính)
▫ Web Service: Triệu gọi theo cơ chế web service
• Khai báo các hàm “cam kết” sẽ hỗ trợ cho user
Trang 16public interface AdderRemote {
BigInteger add(BigInteger a, BigInteger b);
}
Trang 17public interface AdderLocal {
BigInteger add(BigInteger a, BigInteger b);
}
Trang 18Stateless Bean class:
Trang 19Life Cycle
• Stateless: Do không lưu trữ thông tin của client, một stateless session bean có thể phục vụ bất kỳ client nào
• Container tạo sẵn một số instance và đặt trong
POOL
• Số lượng beans có thể ít hơn số client
Trang 20Lifecycle - Stateless
• Stateless beans chỉ có 3 trạng
thái:
• Bean chưa được tạo ra
• Container tạo ra các beans và
đặt vào pool (idle beans)
• Khi có 1 client triệu gọi, lấy
bean ra khỏi pool, thực thi lệnh (busy)
• Nếu client không có nhu cầu sử
dụng -> trở về pool (idle)
Trang 22Các hàm callback
• Có 2 trường hợp đặc biệt:
• Hàm cần gọi sau khi bean vừa được khởi tạo:
Dùng ký hiệu @PostConstruct trước khai báo hàm
• Hàm cần gọi trước khi bean được hủy: Dùng ký
hiệu @PreDestroy trước khai báo hàm
• Khi không có nhu cầu sử dụng, các beans được
đặt trong POOL Số lượng beans trong POOL
sẽ được Container duy trì ở mức hợp lý
Trang 23Ví dụ
Trang 24Life Cycle – Stateful Session Beans
• Mỗi khi có 1 client triệu gọi, sẽ phải phát sinh một session bean ứng với client đó.
Trang 25Các chứng năng phát sinh
• Passivation: Khi số lượng beans quá nhiều,
container có nhu cầu cất các beans ứng với các client đã lâu không liên lạc lại với container vào đĩa cứng
• Activation: Khi các client này liên lạc lại với
container, phải phục hồi bean từ đĩa cứng trở lại
bộ nhớ
• Remove: Khi client ngắt hoàn toàn liên lạc với
container, hủy session bean ứng với client đó vì không thể sử dụng lại
Trang 28• @Remove (không phải hàm call back): khi gọi
hàm được đánh dấu remove, client báo cho
container biết mình không có nhu cầu sử dụng nữa và bean sẽ bị hủy
Trang 29Các luật:
• a session bean must have at least one business interface
• The session bean class must be concrete You cannot define a session bean class as either final or abstract since the container needs to
manipulate it.
• You must have a no-argument constructor in the bean class
• Business method names must not start with “ejb.”
• You must define all business methods as public, but not final or static
• If you are exposing a method in a remote business interface of the EJB, then make sure that the arguments and the return type of the method implement the java.io.Serializable interface
Trang 30Xây dựng client
• Gọi session bean từ servlet:
Các bước:
• Sử dụng JNDI để lookup Session bean Interface
• Gọi hàm của bean Interface
• Container sẽ tự động gọi hàm tương ứng của
bean class Client không bao giờ tiếp xúc trực tiếp với bean class
Trang 31Ví dụ:
• Quá trình lookup: Mặc định chuỗi lookup là
BeanName/remote hoặc BeanName/local
Context ctx = new InitialContext(properties);
AdderLocal test=(AdderLocal)ctx.lookup("AdderBean/ local ");
Trang 32Lưu ý:
• Import các gói cần thiết
• Import package chứa các interface của ejb
import java.util.*;
import javax.naming.*;
import ejb.*;
Trang 33Gọi hàm từ interface
Context ctx = new InitialContext(properties);
AdderLocal test=(AdderLocal)ctx.lookup("AdderBean/local");
BigInteger a=new BigInteger("12345");
BigInteger b=new BigInteger("56576");
BigInteger c= test.add(a,b);
out.println("c="+c);