2010-04-25 27 views
20

EJB dường như được nạp lazily - bất cứ khi nào được truy cập.Eager/tải tự động EJB/tải EJB khi khởi động (trên JBoss)

Tuy nhiên, tôi muốn khởi tạo chúng một cách háo hức - tức là bất cứ khi nào container bắt đầu. Làm thế nào để đạt được điều này (trong JBoss nói riêng)

This topic đưa ra một số gợi ý, nhưng không hoàn toàn thỏa đáng.

Trả lời

21

Tính đến EJB 3.1, đậu singleton có thể được thông báo về mô-đun bắt đầu và dừng lại:

@Singleton 
@Startup 
public class StartupBean { 
    @PostConstruct 
    private void postConstruct() { /* ... */ } 

    @PreDestroy 
    private void preDestroy() { /* ... */ } 
} 

Trước EJB 3.1, không có tiêu chuẩn, EJB chỉ giải pháp. Tôi muốn đề nghị thêm một WAR vào EAR của bạn và sử dụng một servlet-context-listener.

+0

Tôi nhận thấy rằng ứng dụng của mình trong GlassFish 3.1, @Singleton @Startup EJB đã nhận được @PersistenceContext EntityManager bị đóng. Cách giải quyết của tôi là có một bộ đếm thời gian trong EJB thực hiện 2 giây sau đó. (duh!) –

+3

Nghe có vẻ như là một lỗi đối với tôi; Tôi sẽ khuyên bạn nên báo cáo nó. –

17

Theo Patterns Real World Java EE Adam Biên - Xem xét lại Thực tiễn tốt nhất (xem một summary of the patterns) và mô hình Dịch vụ Starter, nó thực sự là như bkail gợi ý

  • với Java EE 6 = EJB 3.1 @Singleton sử dụng với @Startup (và có lẽ cũng với @DependsOn)
  • trước đó, cách tiêu chuẩn và di động duy nhất là sử dụng API Servlet, ví dụ một HttpServlet bắt đầu các EJB trong phương thức init() của nó và tải-on-startup được đặt thành 1 trong web.xml.
Các vấn đề liên quan