Enterprise JavaBean (EJB) là một trong số các Java API trên nền Java phiên bản Enterprise Edition. EJB là thành phần phía máy chủ đóng gói lớp Business Logic của một ứng dụng. Ban đầu EJB được phát triển bởi hãng Sun MicroSystems (EJB 1.0 và EJB 1.1), sau đó phát triển bởi hãng Java Community Process với JSR 19 (EJB 2.0), JSR 153 (EJB 2.1) và JSR 220 (EJB 3.0)
Đặc tả về EJB cho biết chi tiết làm thế nào một máy chủ ứng dụng cung cấp:
- Tính bền vững
- Việc xử lý các giao dịch
- Tự kiểm soát trùng lặp
- Các sự kiện sử dụng Java Message Service.
- Dịch vụ thư mục và đặt tên (JNDI)
- Bảo mật (JCE và JAAS)
- Triển khai các thành phần phần mềm trên máy chủ ứng dụng.
- Gọi thủ tục từ xa sử dụng RMI-IIOP hoặc CORBA.
Thêm vào đó, đặc tả về EJB còn định nghĩa vai trò của EJB container và các EJB phải như làm thế nào để triển khai các EJB trong một container.
EJB được triển khai trong một EJB container trên máy chủ ứng dụng. Các đặc tả này mô tả làm thế nào một EJB có thể tương tác với bản thân container đó và làm thế nào mã máy khách tương tác với tổ hợp container/EJB. Các lớp EJB sử dụng bởi các ứng dụng nằm trong gói javax.ejb. (Gói javax.ejb.spi là giao diện của nhà cung cấp dịch vụ chỉ sử dụng bởi sự triển khai các EJB container).
Mỗi EJB phải có một lớp thực thi (implementation) Java và 2 interface Java. EJB containter sẽ tạo mới bản sao của lớp thực thi Java để cung cấp sự thực thi EJB. Các interface Java được sử dụng bởi mã máy khách của EJB.
Có 2 interface, gọi là interface Home và interface Component xác định các chữ ký các phương thức từ xa của EJB. Các phương thức này chia thành 2 nhóm:
Lưu ý: Các interface Home và Component có thể local(cục bộ) hoặc remote (từ xa)
- Các phương thức không bị ràng buộc bởi một thể hiện cụ thể nào, như là các phương thức được sử dụng để tạo một thể hiện EJB hoặc để tìm kiếm một EJB thực thể đang tồn tại. chúng được khai báo trong interface Home.
- Các phương thức bị ràng buộc vào một thể hiện cụ thể thì được đặt vào interface Remote.
Bởi vì chúng đơn thuần là các interface Java chứ không phải các lớp rời rạc, EJB containter phải tạo ra các lớp cho các interface đó với vai trò như một proxy trên máy khách. Mã máy khách thực hiện một phương thức trên các proxy đã tạo ra, đó là nơi đặt vào các đối số của phương thức vào trong một thông điệp và gửi thông điệp đó cho máy chủ EJB. Các proxy sử dụng RMI-IIOP để giao tiếp với các máy chủ EJB. Máy chủ sẽ thực thi một phương thức tương ứng với bản sao của lớp thực thi Java để xử lý việc gọi phương thức từ xa.
Interface Home
Interface Home cho phép mã máy khách xử lý các phương thức của lớp chính xác (Nghĩa là các phương thức không liên quan tới bất kỳ một thể hiện cụ thể nào) của EJB. Một Interface EJB Home là extend của lớp javax.ejb.EJBHome hoặc của lớp javax.ejb.EJBLocalHome. EJB container cung cấp sự triển khai thực sự interface Home của một bean.
Đặc tả EJB 1.1 sửa các phương thức lớp có thể định nghĩa là các phương thức để tạo ra một EJB hay để tìm kiếm các EJB đang tồn tại nếu nó là một entity bean.
Đặc tả EJB 2.0 giúp các nhà phát triển ứng dụng định nghĩa các phương thức lớp mới dựa trên thao tác tạo, xóa và tìm kiếm.
Interface interface định nghĩa các phương thức vòng đời (lifecycle) trong lớp EJB bao gồm các thao tác tạo mới, khởi tạo và huỷ một thể hiện của EJB từ một container.
Interface Remote và local
Interface remote và local định nghĩa các phương thức trong một thể hiện cụ thể của lớp bean vốn có thể được gọi bởi mã của bean trên máy khách. Một bean được cung cấp interface remote, local hoặc cả hai. Interface local chỉ sử dụng bởi việc thực thi trên máy khách trong cùng một EJB container và cùng máy ảo Java, trong khi đó interface remote có thể sử dụng bởi cả máy khách cục bộ và phân tán.
Interface local xác định đối tượng sử dụng bởi mã khách cục bộ để gọi các phương thức trong EJB. Interface local là extend từ giao diện javax.ejb.EJBLocalObject.
Interface remote định nghĩa đối tượng remote sử dụng bởi mã máy khách để gọi các phương thức trong EJB. Interface remote là extend từ giao diện lớp javax.ejb.EJBObject. Không giống giao diện local, mỗi phương thức phải có khai báo “throws RemoteException”
Interface remote và local gọi phương thức khác nhau về mặt ngữ nghĩa. Interface local sử dụng lời gọi theo nghĩa tham chiếu các tham số của đối tượng cho các phương thức EJB, giống với gọi phương thức trong Java truyền thống. Interface remote sử dụng lời gọi thông qua việc gọi giá trị. Sự khác biệt giữa gọi qua tham chiếu và gọi qua giá trị trở nên rất quan trọng nếu EJB thay đổi trạng thái các tham số của đối tượng, việc thay đổi trạng thái thông qua tham số gọi qua giá trị chỉ thay đổi trạng thái bản sao đối tượng có trong phương thức, còn sự thay đổi trạng thái tham số gọi qua tham chiếu thay đổi trạng thái của đối tượng gốc.
Lớp triển khai EJB
Các lớp triển khai EJB được cung cấp bởi các nhà phát triển ứng dụng. Chúng chứa sự logic giao dịch hoặc chứa dữ liệu giao dịch đối với giao diện đối tượng. Chúng triển khai tất các các phương thức xác định bởi interface Remote, và trong đó có một số xác định bởi interface Home.
Sự tương ứng giữa các phương thức giao diện và các phương thức triển khai
Sự thực thi phương thức trong interface Home được ánh xạ tới các phương thức tương ứng trong lớp thực thi bean với 1) tiền tố ‘ejb’; 2) Từ đầu tiên của phương thức giao diện Home phải viết hoa; và 3) có kiểu dữ liệu hoàn toàn giống nhau.
Phân loại EJB:
EJB container có thể chứa 4 loại bean chính sau:
- Session Beans
- Session Beans phi trạng thái
- Session Beans có trạng thái
- Entity Beans
- Message Driven Beans (MDBs hoặc Message Beans)
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).
Message Bean là các đối tượng phân tán tương ứng với thông điệp JMS. Các bean này được thêm vào EJB 2.0 cung cấp các bean hướng sự kiện.
Giao tiếp từ xa
Đặc tả EJB yêu cầu các EJB container hỗ trọ việc truy nhập các EJB sử dụng RMI-IIOP. Các EJB có thể được truy nhập vào từ bất cứ ứng dụng CORBA nào.
Events
JMS được sử dụng để gửi các thông điệp từ các bean tới các đối tượng máy khách sẽ giúp các máy khách nhận các thông điệp không đồng bộ từ các bean này.
Các dịch vụ thư mục và đặt tên
Các máy khách của EJB đặt trong đối tượng triển khai interface Home sử dụng JNDI. Interface Home cũng có thể tìm thấy sử dụng dịch vụ tên CORBA. Từ interface Home, mã máy khách có thể tìm thấy các Entity Bean cũng như tạo ra và xóa các EJB đang tồn tại.
Security
EJB container chịu trách nhiệm đảm bảo mã máy khách phải có quyền truy nhập thích hợp tới một EJB.
Triển khai các EJB
Đặc tả EJB cũng định nghĩa một cơ chế cho phép EJB triển khai trong một hoàn cảnh tương tự không cần quan tâm đến nền EJB cụ thể nào được lựa chọn. Thông tin làm thế nào để bean được triển khai (như là tên của interface Home và Remote, hay là cách lưu trữ bean trong cơ sở dữ liệu…) được xác định trong trình mô tả triển khai.
Trình mô tả triển khai là một văn bản XML có một đầu vào cho mỗi EJB để triển khai. Văn bản XML này xác định các thông tin sau đây trong mỗi EJB:
- Tên của interface Home
- Lớp Java dành cho Bean
- Interface java cho interface Home
- Interface Java cho đối tượng
- Lưu trữ lâu dài
- Phân quyền và vai trò bảo mật
Các EJB container từ nhiều nhà cung cấp yêu cầu nhiều thông tin triển khai hơn là trong đặc tả về EJB. Chúng yêu cầu các thông tin phụ nữa như các file XML riêng biệt hoặc định dạng file cấu hình. Nhìn chung một nhà cung cấp nền EJB cung cấp chính các công cụ của họ để đọc các mô tả triển khai và có thể tạo ra một tập các lớp sẽ triển khai trong interface Home và Remote.
Mô hình lập trình được đề nghị
Các EJB sẽ được sử dụng trong hoàn cảnh phân tán và nhiều giao dịch mà khả năng thay đổi tỷ lệ là nhân tố then chốt. Trong mô hình lập trình được đề nghị bởi hãng Sun, các session bean trạng thái hay phi trạng thái được đóng gọi logic trong đó các entity bean được sử dụng để biểu diễn dữ liệu của giao dịch. Message Driven Bean biểu diễn tính logic của giao dịch.