2014-10-17 32 views
1

我需要通過我已有的服務從外部屬性文件加載init參數。 這部分是經過測試的,但我努力在應用程序啓動時注入我的init參數,並使它們可以被整個應用程序訪問。我應該使用applicationScoped託管bean嗎?programmaticaly JSF中的應用程序啓動時注入參數

在此先感謝

回答

1

如果你想與ManagedBean

急於申請作用域bean管理bean被實例化懶洋洋地工作。 也就是說,當從 應用程序發出請求時,它們被實例化。

要強制應用程序作用域的bean實例化和放置在 只要在應用程序啓動和 之前提出的任何請求的應用範圍,託管bean的渴望屬性應該是 設置爲true在下面的示例所示:

@ManagedBean(eager=true) 
@ApplicationScoped 

http://docs.oracle.com/javaee/6/tutorial/doc/girch.html

2

創建EJB啓動服務

@Startup 

引進單身還提供了EJB 應用程序初始化或 停機期間接收回調的便捷方式。默認情況下,容器決定何時實例化單例實例 。但是,您可以通過使用@Startup註釋強制容器在應用程序初始化 期間實例化單例實例 。這允許bean定義一個保證在啓動時調用的@PostConstruct方法 。 此外,無論使用懶惰實例化還是實例化 實例,單個元素的任何@PreDestroy方法都能保證在應用程序關閉時調用 。在懶惰的實例化中,單例沒有被實例化,直到它首先需要方法。在急切實例化中,單例在啓動時被實例化,不管它是否被使用。

@Singleton 
@Startup 
public class StartupBean { 

@PostConstruct 
private void startup() { ... } 

@PreDestroy 
private void shutdown() { ... } 
... 
} 

如果您是在集羣環境中,這可能不會對 開箱的工作,你。這隻適用於單個虛擬機。您將有 StartupBean在每個啓動的服務器實例上調用,或者 關閉。如果您有特殊的羣集要求(例如,對於整個羣集只初始化一次 ),則必須考慮通過使用數據庫來同步StartupBeans的 。可用於任何EJB 3.1兼容容器和高度便攜。這甚至應該與輕量級Java EE 6 Webprofile

工作

https://blogs.oracle.com/enterprisetechtips/entry/a_sampling_of_ejb_3

相關問題