2012-02-04 20 views

Trả lời

12

Như đã nêu trong FAQ on EJB restrictions, một trong những hạn chế đối với sử dụng EJB là:

enterprise bean không nên đọc hoặc viết các lĩnh vực tĩnh nonfinal

mở rộng hơn nữa trong discussion on static fields:

Các trường lớp tĩnh không chuẩn không được phép trong EJB vì các trường này tạo ra sự khác biệt về doanh nghiệp icult hoặc không thể phân phối. Các trường lớp tĩnh được chia sẻ giữa tất cả các cá thể của một lớp cụ thể, nhưng chỉ trong một Máy ảo Java (JVM) đơn. Việc cập nhật một trường tĩnh bao hàm ý định chia sẻ giá trị của trường trong tất cả các trường hợp của lớp. Nhưng nếu một lớp đang chạy trong một số JVM cùng một lúc, chỉ những cá thể chạy trong cùng một JVM như cá thể cập nhật mới có quyền truy cập vào giá trị mới. Nói cách khác, một trường tĩnh nonfinal sẽ hoạt động khác nếu chạy trong một JVM đơn lẻ, hơn là nó sẽ chạy trong nhiều JVM. Thùng chứa EJB bảo lưu tùy chọn phân phối các bean doanh nghiệp trên nhiều JVM (chạy trên cùng một máy chủ hoặc trên bất kỳ nhóm máy chủ nào). Các trường lớp tĩnh không phải là không được phép vì các cá thể bean nghiệp vụ sẽ hoạt động khác nhau tùy thuộc vào việc chúng có được phân phối hay không.

Thực tiễn có thể chấp nhận là sử dụng các trường lớp tĩnh nếu các trường đó được đánh dấu là cuối cùng. Vì các trường cuối cùng không thể được cập nhật, các cá thể của bean doanh nghiệp có thể được phân phối bởi vùng chứa mà không quan tâm đến các giá trị của các trường đó trở nên không đồng bộ.

+0

Câu trả lời hay. Thật không may các liên kết bị hỏng. – Algiz

+1

@Algiz nó đã được khắc phục ngay bây giờ, cảm ơn bạn đã chỉ ra! –

+0

Và còn về Bộ sưu tập cuối cùng tĩnh thì sao? Họ cũng được phép? – botchniaque

1

static nghĩa duy nhất cho một lớp OR cho tất cả đó là các đối tượng.

Hiện tại, javabeans được cho là có dữ liệu người dùng cụ thể, các trường static không có ý nghĩa gì đối với các trường này.

Một người dùng chỉnh sửa một biến, kiến ​​nó sẽ được cập nhật cho tất cả người dùng khác. (miễn phí :-)).

Tuy nhiên, nếu bạn muốn có hành vi tĩnh đối với những hành vi này (tức là sử dụng cùng một dữ liệu cho tất cả người dùng), bạn có application cho mục đích đó.

5

Đó là cơ bản. Theo điều này sun documenation,

Các trường lớp tĩnh không chuẩn không được phép trong EJB vì các trường này làm cho hạt doanh nghiệp khó phân phối hoặc không thể phân phối. Các trường lớp tĩnh được chia sẻ giữa tất cả các cá thể của một lớp cụ thể, nhưng chỉ trong một Máy ảo Java (JVM) đơn. *

+0

Trong bean phiên không trạng thái, nếu mã của tôi gọi hàm Resources.getSingleton(), và trả về đối tượng Tài nguyên tĩnh, đó cũng là không có không? – djb