2014-02-18 39 views
0

我有一個帶有CDI/Weld的Java SE應用程序(從org.jboss.weld.environment.se.StartMain開始,沒有任何應用程序服務器)。 在它內部啓動後臺服務的正確方法是什麼?CDI的後臺服務

我試過創建一個@Singleton bean,它觀察ContainerInitialized事件(如下所示),但我不確定容器何時會銷燬此服務bean。它安全嗎?有沒有更好的辦法?

@Singleton 
public class BackgroundService { 

    public void onStart(@Observes ContainerInitialized event) { 
     // starting other threads etc. 
    } 
} 

回答

1

我個人會用@ApplicationScoped@Singleton。生命週期將在容器關閉時關閉對象。如果你想開始一個線程,這將是一個可能的選擇放置代碼。

默認情況下它不是異步的,所以你需要自己啓動線程。