Khái niệm EntityBean

Một phần của tài liệu Phát triển ứng dụng phần mềm trên máy chủ dựa trên công nghệ Java (Trang 39)

Trong các ứng dụng mức xí nghiệp sử dụng mô hình đa mức, có hai loại thành phần thường được sử dụng là:

Các thành phần thực hiện logic của ứng dụng: các thành phần này cung cấp các phương thức thực hiện các công việc xử lý thông thường. Ví dụ như:

• Thực hiện thanh toán trên thẻ tín dụng.

• Tính toán ma trận ngược.

Như vậy, có thể thấy các thành phần này thực hiện các hành động/hoạt động của hệ thống. Các thành phần này rất phù hợp với việc xử lý các tiến trình nghiệp vụ. Các thành phần Session Bean rất phù họp cho mục đích này. Các Session Bean thể hiện các hoạt độnẹ của người sử dụng cũng như các tiến trình xử lý trong mỗi phiên giao dịch.

Các thành phần dữ liệu bền vững: là các thành phần có khả năng lưu trữ dữ liệu trên các thiết bị lưu trữ. Các thành phần này sử dụng các cơ chế lưu trừ bền vững mà đã đề cập ở trên như lưu trữ đối tượng, sử dụng CSDL quan hệ, sử dụng CSDL hướng đối tượng. Các thành phần này thực hiện việc biểu diễn dữ liệu muốn lưu trữ. Ví dụ như:

• Các thông tin về Tài khoản ngân hàng như số tài khoản, số dư của tài khoản. • Các thông tin về Nhân sự như tên, phòng ban và mức lương của nhân viên. • Các thông tin Quản lý khách hàng như tên, địa chỉ, số điện thoại.

Các thành phần này biểu diễn các đổi tượng như con người, địa điểm, đồ vật, ... Các thành phần này phù hợp cho việc biểu diễn dừ liệu của ứng dụng.

Một câu hỏi được đặt ra là tại sao lại cần phải biểu diễn các dữ liệu dưới dạng các thành phần mà không làm việc trực tiếp với các dừ liệu. Ví dụ như làm việc trực tiếp với các bản ghi trong CSDL. Lý do của việc sử dụng các thành phần dữ liệu bên vừng bởi chúng giúp cho ứng dụng có thể được thực hiện đơn giản hơn, dễ quản lý hơn. Có thể thực hiện việc nhóm một lượng lớn dữ liệu dưới dạng một đối tượng thống nhất và thực hiện việc gán với các dữ liệu này các phương thức xử lý dữ liệu cần thiết. Hơn thế nữa, việc sử dụng các thành phần dữ liệu bền vững còn cho phép có thể sử dụng được các dịch vụ hệ thống cung cấp bởi các máy chủ ứng dụng như việc quản lý giao dịch, truy nhập qua mạng và bảo mật.

- 4 0 -

Entity Bean chính là các thành phần dừ liệu bền vững. Các Entity Bean có khả năng thực hiện việc lưu trữ dừ liệu của mình ra các thiết bị lưu trữ. Các Entity Bean thực hiện việc lưu trừ dữ liệu của mình dưới dạng các trường như các trường số tài khoản, số dư tài khoản, ... Và chúng có những phương thức gán với dữ liệu như

g e ĩ B a n k A c c o u n t B a l a n c e ( ), g e t B a n k A c c o u n t N u m b e r ( ) . [2]

2.5.3 Các file tạo thành Entity Bean

Các file tạo thành một Entity Bean bao gồm:

• Lớp Entity Bean: lớp Entity Bean thực hiện việc mô hình hóa dừ liệu. Lớp Entity Bean thực hiện ánh xạ từ mô tả Entity Bean tới cấu trúc của CSDL. Ví dụ, lớp Entity Bean có thể thực hiện ánh xạ giữa các thuộc tính của nó với các trường trong một bảng của CSDL quan hệ. Khi đó, mỗi biến thể của lớp Entity Bean sẽ tương ứne với một bản ghi của bảng đó trong CSDL. Ngoài ra, lớp Entity Bean có thể có một số phương thức đơn giản làm việc trên các dữ liệu đó. Tương tự như các Session Bean, các Entity Bean cũng phải cài đặt một số phương thức bắt buộc đế các bộ chứa EJB có thể thực hiện lời gọi tới các phương thức này.

• Giao diện từ xa: là giao diện thông qua đó các ứng dụng khách có thế gọi các phương thức của Entity Bean. Giao diện từ xa này được cài đặt dưới dạne, là một đối tượng EJB. Các ứng dụng khách sẽ gọi các phương thức của Entity Bean thông qua đối tượng EJB này.

• Giao diện tại chỗ: là giao diện mà ứng dụng khách dùng để tạo, tìm kiếm và hủy bở các đối tượng Entity Bean. Có thể tạo ra nhiều phương thức khác nhau cho việc tạo, tìm kiếm và hủy bỏ này. Tương tự như đối với Session Bean, ứng dụng khách cũng phải thực hiện việc tìm kiếm giao diện tại chỗ thông qua JNDI.

• Lớp kh ó a c h í n h của Entity Bean: Lớp khóa chính là định danh duy nhất

đối tượng khóa chính có thể gồm một hoặc nhiều thuộc tính đế tạo thành định danh duy nhất cho các biến thể Entity Bean. EJB cho phép có thể xác định các định danh duy nhất này một cách rất linh động thông qua lớp khóa chính. Điều duy nhất mà lớp khóa chính này phải tuân thủ là nó có thể lưu trừ được bởi cơ chế lưu trữ đối tượng.

• Bộ mô tả triển khai của Entity Bean: Bộ mô tả triển khai chứa các thuộc tính cần thiết cho bộ chứa EJB tại thời điểm triển khai.

• Thuộc tính môi trường của Entity Bean: Các thuộc tính môi trường giúp có thể thay đổi các Entity Bean tại thời điểm triển khai. Các thuộc tính này là tùy chọn và việc sử dụng chúng hoàn toàn giống như đối với Session Bean. [2]

2.5.4 Các tính chắt của Entity Bean

2.5,4. ỉ Các Entity Bean tồn tại lâu (lài

Các Session Bean chỉ tồn tại trong một phiên giao dịch của người sử dụng. Khi người sử dụng kết thúc một phiên giao dịch thì các Session Bean có thể bị hủy bỏ. Không giống như vậy, các Entity Bean tồn tại lâu dài hàng ngày, hàng tháng thậm chí hàng năm do nó mô hình hóa dữ liệu. [2]

2.5.4.2 Entity Bean có thể tồn tại qua các sự cố

Các Session Bean tồn tại trong một thời gian ngắn và bị phá hủy khi bộ chứa EJB hay hệ thốns gặp sự cố. Nhưng ngược lại, các Entity Bean được lưu trữ trên các thiết bị lưu trữ nên các Entity Bean này tồn tại cả khi hệ thống hay bộ chứa EJB bị sự c ố . [2]

2.5.4.3 E ntity Bean lù một vùng nhìn của CSDL

Sau khi thực hiện việc chuyển dữ liệu vào các biến thể của Entity Bean thì có thề thực hiện các thao tác trên các dừ liệu này trong bộ nhớ. v ề bản chất, các đối tượng trong bộ nhớ này và trong CSDL chỉ là một, có nghĩa là mọi thay đổi đối với

- 4 2 -

đối tượng trong bộ nhớ sẽ được tự động cập nhập vào CSDL. Nói cách khác, Entity Bean là một vùng nhìn của CSDL.

Trong thực tế, đó là nhiều bản sao vật lý của cùng một dữ liệu: một trong bộ nhớ và một trong CSDL. Chính vì vậy, cần một cơ chế để đồng bộ dữ liệu giữa các bản sao này. Chính vì vậy, các lớp Entity Bean phải thực hiện cài đặt hai phương thức

giúp đồng bộ dừ liệu là ejbLoad()ejbStore(). Việc gọi các hàm này do bộ chứa

EJB tự độne thực hiện. Như vậy, không phải quan tâm tới việc đồng bộ hai bản sao dữ liệu này. [2]

2.5.4.4 Nhiều Entity Bean có thể cùng biểu diễn một dữ liệu

Tương tự, như đối với Session Bean, mồi Entity Bean chỉ có thể phục vụ cho một ứng dụng khách tại một thời điểm mà thôi. Như vậy, để có thể phục vụ dược nhiều người sử dụng cùng một lúc cần phải có nhiều Entity Bean biểu diễn cho cùng một dừ liệu. Như vậy, các ứng dụng khách sử dụng cùng một dữ liệu có thể hoạt động song song với nhau.

Nhưng việc sử dụng nhiều Entity Bean biểu diễn cho cùng một dữ liệu có thể xảy ra tình trạng sai lạc dữ liệu, bởi khi đó có nhiều bản sao dữ liệu trong bộ nhớ. Đe các bản sao dữ liệu này được đồng bộ với nhau, thì các bản sao này phải được thường xuyên đồng bộ với CSDL. Bộ chứa EJB sẽ thực hiện công việc này qua việc

gọi các phương thức ejbLoad()ejbStore(). Tần suất của việc đồng bộ này do cơ

chế quản lý giao dịch quyết định. [2]

2.5.4.5 H a i cách lư u trừ Entity Bean

Để thực hiện việc lưu trữ các Entity Bean có thể tự thực hiện ánh xạ tới các CSDL. Cách thức này được gọi là cơ chế tự quản lý lưu trữ. Một cách khác là để cho bộ chứa EJB tự động thực hiện. Khi đó, không cần phải xác định ngay từ ban đâu cách thức lưu trữ dừ liệu của Entity Bean mà chỉ cần chỉ ra cho bộ chứa EJB các thuộc tính công cộng của Entity Bean là các trường được lưu trữ. Việc chỉ ra các thuộc tính này được thực hiện thông qua bộ mô tả triển khai của Entity Bean.

Sau khi đã chỉ ra các trường này, bộ chửa Entity Bean sẽ tự động thực hiện. Cơ chế này được gọi là cơ chế lưu trừ được quản lý bởi bộ chứa. [2]

2.5.5 Phát triển và sử dụng Entity Bean

Đe phát triển lớp Entity Bean, phải thực hiện cài đặt giao diện javax.ejb.EntityBean. Giao diện này định nghĩa một số phương thức bắt buộc phải cài đặt. Hầu hết các phương thức này do bộ chứa EJB quản lý. Định nghĩa giao diện javax. ejb. EntityBean như sau:

public interface javax. ejb. EntityBean implements javax. ejb. EnterpriseBean { public abtract void setEntityContext (javax. ejb. EntityContext);

public abtract void unsetEntityContect(); public abtract void ejbRemove();

public abtract void ejbPassivate(); public abtract void ejbActivateQ; public abtract void eb|Load(); public abtract void ejbStore();

}

Ngoài các phương thức trên, có thể cài đặt một sổ phương thức ejbCreate() để

tạo các Entity Bean mới hoặc ejbFind() để tìm kiếm các Entity Bean hiện có. [2]

2.5.5. ỉ Tạo một Entity Bean: ejbCreate()

Có thể xây dựng phương thức ejbCreate() để khởi tạo Entity Bean mới và tạo dữ

liệu mới trong CSDL. Một số điều cần chú ý khi xây dựng ejbCreate() là:

• Không bat buộc phải xây dựng phương thức ejbCreate('): Đối với Session

Bean phương thức ejbCreate() là bat buộc, còn đối với Entity Bean thì đây là

tùy chọn, bởi có thể tạo ra entity mới bằng cách thêm đữ liệu trực tiếp vào

CSDL. Chỉ cần xây dựng ejbCreate() khi muốn tạo dữ liệu mới thông qua

EJB.

• Có thể có nhiều phương thức ejbCreate() với nhiều bộ tham số khác nhau

- 4 4 -

• Cân phải lặp lại ejbCreate() trong giao diện tại chồ bởi các ứng dụng khách

không gọi các phương thức này trực tiếp mà thông qua phương thức create()

trong giao diện tại chỗ.

Ví dụ, có lớp Entity Bean là AccountBean, giao diện từ xa là Account, giao diện tại chỗ là AccountHome và lớp khóa chính là AccountPK. Khi đó

phương thức ejbCreateQ trong AccountBean và create() trong

AccountHome định nghĩa như sau:

public AccountPK ejbCreate (String accountlD, String o w n e r,...); public Account create (String accountID, String owner, ...);

Ở đây, phương thức ejbCreate() trả lại lớp khóa chính cho bộ chứa EJB để

bộ chứa EJB có thể định vị được Entity Bean. Khi có khóa chính, giao diện tại chỗ có thể tạo ra giao diện từ xa và chuyển cho ứng dụng khách. [2]

2.5.5.2 Tun kiếm Entity Bean: ejbFindQ

Các phương thức tim kiếm của lớp Entity Bean được sử dụng để tìm kiếm một Entity Bean hiện có trong hệ thống lưu trừ. Các phương thức tìm kiếm không tạo ra dữ liệu mới trong cơ sở dữ liệu - các phương thức này chỉ thuần tủy thực hiện việc tải dữ liệu của các Entity Bean vào bộ nhớ. Trong mỗi lớp Entity Bean, có thể có nhiều phương thức tìm kiếm khác nhau để tạo ra nhiều cách tìm kiểm khác nhau:

/* Tìm kiêm một tài khoàn duy nhãt theo khóa chính cúa nó */ public AccountPK ejbFindByPrimaryKey (AccountPK key)

/* Tìm tất cá các Entity Bean cho tất cả các sán phẩm và trá lại một tập hợp các khóa chính */

public Enumeration ejbFindAIIProducts()

/*Tìm tãt các tài khoản có sô dư tối thiếu được cho trdớc và trá lại tập hợp các khóa chính

*/

public Enumeration ejbFindBigAccount (int minimum) /* Tìm đơn đặt hàng mới nhất */

public OrderPK ejbFindMostRecentOrder()

Phải có ít nhất một phương thức tìm kiếm có tên là ejbFindByPrimaryKey().

Đây là phương thức tìm kiếm một biến thể Entity Bean duy nhất trong cơ sở dữ liệu theo khóa chính của nó. Lý do là tất cả các Entity Bean đều có thuộc tính khóa chính. Vì vậy, điều hoàn toàn hợp lý là phải có phương thức tìm kiếm theo khóa chính này.

Mồi lớp Entity Bean có thể có nhiều phương thức tìm kiếm khác nhau. Các phương thức tim kiếm này phải có tên và các tham số khác nhau.

Mồi phương thức tìm kiếm phải trả lại hoặc là khóa chính của biến thể Entity Bean mà nó tìm thấy, hoặc là một tập hợp các khóa chính của các biến thể Entity Bean mà nó tìm thấy.

Trong phương thức ejbCreate(), không được thực hiện lời gọi tới phương

thức tìm kiếm trên chính biến thể Entity Bean này. Các phương thức tìm kiếm cũng giống như các phương thức khác. Các ứng dụng khách không thực hiện việc gọi trực tiếp các phương thức mà thực hiện thông qua các phương thức tương ứng trong giao diện tại chỗ, sau đó được các bộ chứa EJB chuyển thành các lời gọi tới các phương thức tim kiểm này. Chính vì vậy, mỗi phương thức tìm kiếm trong lớp entiy bean phải có một phương thức tìm kiếm tương ứng trong giao diện tại chỗ. Các ứng dụng khách sẽ thực hiện lời gọi thông qua các phương thức tìm kiếm của giao diện tại chỗ. Ví dụ:

public Enumeration ejbFindAIIProducts()...

trong giao diện tại chồ phải có định nghĩa:

public Enumeration findAIIProducts()...

cũng tương tự như với phương thức ejbCreate(), nếu phương thức tìm kiếm

trả lại khóa chính của Entity Bean thì trong giao diện tại chỗ sẽ trả lại giao diện từ xa của Entity Bean. [2]

- 4 6 -

public AccountPK ejbFindBigAccounts (int minimum) throws ...

thi trong giao diện tại chỗ có định nghĩa:

public Account íindBigAccounts (int minimum) throws ...

2.5.5.3 Hủy bỏ Entity Bean

Đê hủy bỏ dừ liệu của Entity Bean trong cơ sở dừ liệu, ứn2 dụng khách phải

thực hiện lời gọi tới phương thức removeị) trong đối tượng EJB hoặc trong giao

diện tại chồ. Phương thức này sẽ yêu cầu bộ chứa EJB thực hiện phương thức

ejbRemove() trong Entity Bean.

Việc thực hiện phương thức ejbRemove() không có nghĩa là biến the EJB trong

bộ nhớ bị hủy bỏ, mà chỉ có dừ liệu trong cơ sở dữ liệu bị xóa bỏ. Bản thân biến thê Entity Bean có thể được tái sử dụns cho dữ liệu khác của cơ sở dữ liệu. Ví dụ, Entity Bear) cho một tài khoản ngân hàng khi đó có thể biểu diễn một tài khoản ngân hàng khác. Chính vì vậy, đối với các Entity Bean thì ứng dụne khác không

còn truy nhập tới thực thể này trong một thời gian dài thì phương thức ejbRemoveQ

cũng sẽ không được tự động gọi, bởi nếu tự động gọi thì dừ liệu trong cơ sở dữ liệu sẽ bị hủy bỏ một cách bất hợp lý. [2]

2.5.6 Ngữ cảnh của Entity Bean

Các phần trước đã đề cập đến các đối tượng ngữ cảnh. Các đối tượng ngữ cảnh xác định các tham số môi trường của các EJB. Các EJB có thể truy nhập tới các đối tượng môi trường này để lấy các tham số về môi trường như các thông tin về các giao dịch và các thông tin về bảo mật. [2]

Đối với các Session Bean, giao diện của đối tượng ngữ cảnh là

javax.ejb.SessionContext. Đổi với Entity Bean thì giao diện này là

javax.ejb.EntityContext. Cả hai giao diện này đều được mở rộng từ giao diện javax.ejb.EJBContext.

Giao diện chung này được định nghĩa như sau:

public interface javax. ejb. EJBContext {

public abstract java. util. Properties getEnvironment(); public abstract java. security. Identity getCallerldentityO; public abstract boolean isCallerlnRole (java. security. Identity); public abstract javax. jts. UserTransaction getUserTransaction(); public abstract void setRollbackOnlyO;

public abstract boolean getRollbackOnlyO;

}

Ngừ cảnh của Entity Bean thực hiện mở rộng thêm với 2 phương thức sau:

2.5.6. ỉ g e tE J B Object()

Phương thức này trả lại đối tượng EJB của ứng dụng khách được gán với Entity Bean này. Các ứng dụng khách khôna thực hiện việc gọi trực tiểp các phương thức của Entity Bean, mà gọi thông qua đối tượng EJB. Chính vì vậy, việc sử dụne phương thức này sẽ cho đối tượng EJB là một cách thức đế lấy tham chiểu tới chính đôi tượng này, giúp mô phỏng tham chiếu this của các đối tượng trong Java.

Phương thức getEJBObject() hoạt động giống như vậy đối với Session Bean. [2]

2.5.6.2 getPrimaryKeyO

Phương thức getPrimaryKeyO là một phương thức riêng của Entity Bean.

Phương thức này trả lại khóa chính gán với biến thể Entity Bean. Các khóa chính xác định duy nhất biến the Entity Bean. Khi Entity Bean được lưu trữ trên các thiết bị lưu trữ thì khóa chính là cơ chế cho phép lấy được một biến thể Entity Bean duy nhất tương ứng với nó, bởi không thể có dữ liệu của 2 biến thể Entity Bean có cùng

Một phần của tài liệu Phát triển ứng dụng phần mềm trên máy chủ dựa trên công nghệ Java (Trang 39)

Tải bản đầy đủ (PDF)

(97 trang)