2010-06-08 33 views

Trả lời

25

Điều đó không tồn tại đối với EJB cho đến 3.1. Với EJB 3.1, bạn có thể sử dụng một bean singleton để mô phỏng rằng:

Từ Application Startup/Shutdown Callbacks:

@Startup 
    @Singleton 
    public class FooBean { 

     @PostConstruct 
     void atStartup() { ... } 

     @PreDestroy 
     void atShutdown() { ... } 

    } 

Nếu không, bạn sẽ cần phải dựa vào các thủ thuật cũ tốt để sử dụng một ServletContextInitializer.

Có một số tiện ích mở rộng dành riêng cho ứng dụng, ví dụ: lifecycle listener cho Glassfish. Có thể có một thứ như vậy đối với JBoss.

Nhưng nếu tôi là bạn, tôi sẽ cố gắng dựa vào các tính năng tiêu chuẩn càng nhiều càng tốt. Vấn đề với tiện ích mở rộng không chuẩn là bạn không bao giờ biết chính xác những gì có thể được thực hiện hay không, ví dụ: bạn có thể bắt đầu giao dịch hay không, vv

+1

Ngoài ra, người ta luôn có thể sử dụng MBean với các phương pháp vòng đời khởi động/dừng. MBean được tiêm EJB cần thiết và gọi bất kỳ phương thức nào từ nó được yêu cầu. –

+0

Cảm ơn. Hai bài đăng tuyệt vời. Tôi đã kết thúc với một "ServletWrapper" thay thế. Nhưng một nhà tái cấu trúc là trong chương trình nghị sự. Chúc mừng! – Elijah

+0

Tôi đang sử dụng jboss 5.1 (không chắc chắn nếu nó hỗ trợ EJB3.1) tôi có thể sử dụng Technic này để gọi phương thức triển khai không? cảm ơn. – rayman

1

Đậu được quản lý có thể được sử dụng để thực hiện một số quy trình khi khởi động JBoss, bạn phải thêm mục nhập của bean được quản lý đó vào tệp cấu hình.

1

Bạn sẽ có thể thêm dòng sau vào phía trên cùng của phương pháp mà bạn muốn chạy lúc khởi động:

@Observer("org.jboss.seam.postInitialization") 
3

Nếu bạn đang nhắm mục tiêu JBoss AS 5.1, và bạn không nhớ bằng cách sử dụng JBoss EJB 3.0 Extensions, bạn có thể xây dựng một bean dịch vụ cho bootstrap EJB của bạn. Nếu dịch vụ của bạn triển khai một giao diện được chú thích bằng chú thích @Management và khai báo một phương thức có chữ ký public void start() throws Exception, JBoss sẽ gọi phương thức này khi nó bắt đầu dịch vụ. Sau đó bạn có thể gọi một init() phương pháp chuyên dụng trên EJB bạn muốn khởi tạo:

@Service 
public class BeanLauncher implements BeanLauncherManagement 
{ 
    @EJB private SessionBeanLocal sessionBean; 

    @Override 
    public void start() throws Exception 
    { 
     sessionBean.init(); 
    } 
} 

@Management 
public interface BeanLauncherManagement 
{ 
    public void start() throws Exception; 
} 

biết thêm thông tin về vấn đề này, trong đó có thêm các sự kiện cuộc sống-chu kỳ, có thể được tìm thấy here.

Các vấn đề liên quan