a.Khái quát
Enterprise JavaBean là mô hình lập trình ứng dụng đa tầng. Cấu trúc EJB là cấu trúc Component để phát triển và triển khai các ứng dụng nghiệp vụ phân tán. Các ứng dụng được viết với cấu trúc EJB có thể bảo mật đa người dùng, chia mức và thực hiện giao tác. Những ứng dụng này có thể được viết một lần sau đó được triển khai trên bất kỳ nền server nào mà hỗ trợ đặc tả EJB.
Môi trường mà các đối tượng Bean sẽ hoạt động gọi là trình chứa (Container). Các trình chứa sẽ kiểm soát việc khởi tạo, cung cấp tài nguyên cho đối tượng, lưu trữ phục hồi đối tượng.
EJB server cung cấp các dịch vụ hệ thống và quản lý Container, EJB server có khả năng cung cấp các dịch vụ giao tác và dịch vụ đăng ký và truy tìm tên đối tượng (JNDI-Java Naming and Directory Interface). EJB object bao bọc các thể hiện bean. Nó được sinh ra bởi các tiện ích của nhà cung cấp EJB Container. EJB object cài đặt remote interface của bean.
Hình 1.4.6: EJB server và EJB container
EJB home gần giống với EJB object, nó được tự động sinh ra khi cài đặt enterprise bean trong Container. Nó cài đặt các phương thức được định nghĩa bởi home interface và chịu trách nhiệm hỗ trợ container quản lý vòng đời bean. Kết hợp với EJB container, EJB home chịu trách nhiệm tạo, đặt, và loại bỏ enterprise bean. Khi phương thức tạo được gọi trên home interface thì EJB home tạo một thể hiện của EJB object mà tham chiếu tới thể hiện bean có kiểu tương ứng. Khi thể hiện bean được kết hợp với EJB object thì phương thức ejbCreate() tương ứng của thể hiện đó sẽ được gọi. Khi hoàn thành phương thức ejbCeate(), EJB home trả lại tham chiếu remote tới client cho EJB object. Sau đó client có thể làm việc trực tiếp với EJB object bằng các phương thức nghiệp vụ.
Để cài đặt Enterprise JavaBean, chúng ta cần hai định nghĩa interface và một hoặc hai lớp:
+ Home interface: định nghĩa phương thức vòng đời của bean: tạo một thể hiện bean mới, loại bỏ bean, và tìm kiếm bean.
+ Remote interface: để định nghĩa các phương thức nghiệp vụ, (mở rộng javax.ejb. EJBObject-đối tượng này lại là mở rộng của java.rmi.Remote).
+ Bean class: cài đặt các phương thức nghiệp vụ của bean, không cài đặt các phương thức của home interface và remote interface.
+Primary key: là một lớp cực kỳ đơn giản, cung cấp con trỏ tới cơ sở dữ liệu. Chỉ bean thực thể(entity bean) mới cần primary key.
Hoạt động: client không bao giờ tương tác trực tiếp với lớp bean mà nó luôn luôn sử dụng các phương thức giao tiếp home interface và remote interface của bean để thực hiện công việc của nó. Client sử dụng dịch vụ JNDI tham chiếu tới lớp
chủ. Lớp chủ sẽ triệu gọi phương thức tạo ra tham chiếu đến lớp giao tiếp của bean rồi trả về trình khách. Trình khách triệu gọi bean thông qua lớp giao tiếp trung gian mà do lớp chủ trả về. Lớp trung gian này là giao tiếp giữa trình chứa Container và đối tượng bean thực sự.
Như ta đã giới thiệu ở trên, enterprise bean là một thành phần phần mềm ở phía Server mà có thể triển khai trong một môi trường phân tán. Một enterprise bean có thể gồm một hay nhiều các đối tượng java tại vì một thành phần có thể là nhiều hơn một đối tượng đơn giản.
b.Các loại bean
Hình 1.4.7: Các loại enterprise bean
+Session Beans phi trạng thái là các đối tượng phân tán không có trạng thái gắn với chúng nên cho phép truy nhập đồng thời vào bean. Nội dung các biến của thể hiện không đảm bảo được duy trì trong suốt quá trình gọi phương thức. Session Bean trạng thái là các đối tượng phân tán có trạng thái. Trạng thái của nó không cố định, nhưng việc truy nhập vào bean bị giới hạn bởi một máy khách.
+Entity Bean là các đối tượng phân tán có trạng thái cố định. Trạng thái cố định này có thể hoặc không thể quản lý bởi thân bean đó. Các bean mà trong container của chúng kiểm soát trạng thái cố định được gọi là sử dụng Container-
Managed Persistence (CMP), trong đó bean quản chính trạng thái của nó được gọi
là sử dụng Bean-Managed Persistence (BMP).
+MessageDrivenBean là một điểm mới trong chuẩn EJB 2.0 (EJB 1.1 chỉ định nghĩa 2 loại bean là session và entity). Mục đích của MesssageDrivenBean là phục vụ cho nhu cầu về các asynchronous service của các component. Bởi vì session và entity bean chỉ phục vụ các dịch vụ loại synchronous. Do đó cách sử dụng MessageDrivenBean có phần giống với session stateless bean, chỉ khác ở cách gọi bean, với MDB thì client phải gửi message đến MDB đó để thực hiện các hàm trong MDB
+Có 2 loại session bean là: stateless và stateful. Stateless bean không giữ conversational state (tạm dịch là trạng thái giao tiếp) của client. Tuy nhiên không có nghĩa là stateless bean không thể giữ được trạng thái, nhưng trạng thái này không bảo đảm đủ để xác định client nào đã gọi đến bean này. Điều này có nghĩa là bạn có thể dùng stateless bean để thực hiện bất cứ hành động nào trong ứng dụng. Stateful bean có khả năng giữ conversational state (tạm dịch là trạng thái giao tiếp) của client. Tất nhiên là có nhiều cách để giử conversational state trong ứng dụng, nhưng nếu state đó cần phải gắn với business logic thì nó nên được lưu giữ trong stateful bean. Ví dụ điển hình nhất của session stateful bean là component shopping cart trong các ứng dụng mua hàng trực tuyến.
+Có 2 cách để 1 entity bean persist object: container-managed persistence (CMP) và bean-managed persistence (BMP). Trong CMP, container điều khiển việc cài đặt cần thiết cho các tác vụ chèn, đọc, ghi, cập nhật object trong một data source. Còn trong BMP, thì LTV phải tự cài đặt các code cho các tác vụ trên. CMP lý tưởng cho việc phát triển ứng dụng vì nó không đòi hỏi LTV phải thay đổi code mỗi khi data model thay đổi. Tuy nhiên để có được tính linh hoạt, CMP không cho phép sinh ra những câu lệnh SQL hiệuquả. Hiện nay các công cụ phục vụ việc mapping object với cơ sở dữ liệu vẫn còn đang trogn quá trình phát triển và chưa đủ chin muồi. Trong khi chờ đợi CMP phát triển hoàn thiện thì BMP cộng với pattern DAO có lẽ là 1 giải pháp khá tốt.