2012-07-13 17 views
10

Tôi muốn một bean được quản lý chạy trong nội bộ khi khởi động trong ứng dụng web JSF của tôi khi ứng dụng tải. Làm thế nào tôi có thể viết lớp này và cấu hình trong Glassfish?Cách định cấu hình bean được quản lý khởi động?

+0

Bạn đã thử '@ManagedBean (eager = true)'? Nếu bạn đang sử dụng CDI (@Nam thay vì @ManagedBean) thì bạn sẽ phải "Quan sát" khởi tạo ứng dụng ... với một cái gì đó như thế này ... 'public void init (@Observes @Initialized WebApplication webApplication) {//do Something} ' (thực ra tôi chưa thử điều này trong glassfish, tôi đã sử dụng nó trong jBoss AS 7 và bạn có thể cần một số cấu hình trên các máy chủ khác ... kiểm tra [this] (http://stackoverflow.com/ câu hỏi/7347516/khởi động-pojo-on-a-hàn-seam3-ứng dụng) ra ... – FMQ

Trả lời

16

Trong JSF với CDI, observe số initialization của số application scope.

@Named 
@ApplicationScoped 
public class App { 

    public void startup(@Observes @Initialized(ApplicationScoped.class) Object context) { 
     // ... 
    } 

    public void shutdown(@Observes @Destroyed(ApplicationScoped.class) Object context) { 
     // ... 
    } 

} 

Khi có OmniFaces ở bàn tay, điều này có thể được đơn giản hóa với @Eager.

@Named 
@Eager 
@ApplicationScoped 
public class App { 

    @PostConstruct 
    public void startup() { 
     // ... 
    } 

    @PreDestroy 
    public void shutdown() { 
     // ... 
    } 
} 

Trong JSF 2.2- với now deprecatedjavax.faces.bean chú thích, sử dụng một application scopedmanaged bean đó là eagerly khởi tạo.

@ManagedBean(eager=true) 
@ApplicationScoped 
public class App { 

    @PostConstruct 
    public void startup() { 
     // ... 
    } 

    @PreDestroy 
    public void shutdown() { 
     // ... 
    } 
}