Câu trả lời ngắn nhất cho câu hỏi của bạn là tất nhiên nó là một ý tưởng tốt để làm cho nó có thể cho các EJB để làm việc như Servlets và trong EJB 3.1 chúng tôi đã thêm một thành phần có thể làm chính xác điều đó: @Singleton
Một @Singleton
đậu có thể được đa luồng như một servlet, bởi một trong hai:
- Sử dụng
@ConcurrencyManagement(BEAN)
- Sử dụng
@ConcurrencyManagement(CONTAINER)
cùng với @Lock(READ)
về phương pháp trong trường hợp đồng thời là mong muốn và @Lock(WRITE)
trên các phương pháp không phải là chủ đề an toàn.
Một điều khác mà Servlets đã có trong nhiều năm mà EJB chưa từng có là <load-on-startup>
cho phép Servlet tải háo hức và làm việc lúc bắt đầu ứng dụng.
Để khớp với Servlet <load-on-start>
, chúng tôi đã thêm chú thích @Startup
có thể được thêm vào bất kỳ @Singleton
EJB nào và sẽ bắt đầu khi ứng dụng bắt đầu. Những hạt đậu này sẽ có phương thức @PostConstruct
được gọi khi ứng dụng bắt đầu và @PreDestroy
được gọi khi ứng dụng tắt. Thay vì sử dụng một số (<load-on-startup>1</load-on-startup>
) để chỉ ra thứ tự mà đậu được chú thích với số @Startup
bắt đầu, bạn có thể chú thích đậu với @DependsOn
và chỉ định danh sách các hạt cần phải bắt đầu trước bean được chú thích.
Và một khía cạnh ít được biết đến và hiểu hơn chúng tôi đã làm trong EJB 3.1 để căn chỉnh Servlets và EJB là cho phép EJB được đóng gói bên trong các tệp .war
- đó không phải là phần ít được biết đến hơn. chúng tôi lặng lẽ thay đổi định nghĩa của java:comp/env
để phù hợp với phương pháp Servlet.
Trước EJB 3.1 không có cách nào có thể có hai EJB chia sẻ không gian tên java:comp/env
(java:comp/env
là phạm vi đậu trong thông số EJB). Servlets, ngược lại, không bao giờ có bất kỳ cách nào để Servlets riêng lẻ có không gian tên riêng của riêng mình java:comp/env
(java:comp/env
được mô tả theo mô đun Servlet). Vì vậy, trong EJB 3.1 một EJB được đóng gói trong một cuộc chiến sẽ có cùng một không gian tên java:comp/env
phạm vi mô-đun tương tự như tất cả các Servlet và EJB khác trong webapp, một sự tương phản khá lớn với không gian tên đậu java:comp/env
đậu mà EJB nhận được khi được đóng gói một EAR bên ngoài chiến tranh. Chúng tôi tranh luận về điều đó một tuần.
Một chút thời gian ngắn để thưởng thức bạn bè của bạn.
Nguồn
2012-06-27 01:30:23
Tại sao chúng phải nhất quán? Họ làm những việc hoàn toàn khác nhau. – EJP
@EJP, Phải, họ giải quyết các mục đích khác nhau, nhưng họ có sự tương đồng về mặt không quốc tịch. Với sự tương tự này, các EJB có thể làm cho hiệu suất hoạt động hiệu quả hơn nhờ có các luồng thay vì chỉ có các cá thể. –
Nếu bạn quan tâm đến một servlet/một ví dụ - bạn hãy xem bài đăng này: http://piotrnowicki.com/2012/04/one-servlet-instance-to-rule-them-all/ –