以编程方式在JSF中的应用程序启动时注入参数

时间:2014-10-17 15:19:21

标签: jsf-2

我需要通过我已有的服务从外部属性文件加载init参数。 这部分是经过测试的,但是我很难在应用程序启动时注入我的init参数并使它们可以被整个应用程序访问。我应该使用applicationScoped托管bean吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

创建EJB启动服务

@Startup
  

单例的引入也为EJB提供了一种便捷的方式   应用程序初始化期间接收回调的应用程序   关掉。默认情况下,容器决定何时实例化   单身实例。但是,您可以强制容器   在应用程序初始化期间实例化单例实例   使用 @Startup 注释。这允许bean定义一个   保证在启动时调用的@PostConstruct方法。   此外,保证单身的任何@PreDestroy方法   在应用程序关闭时调用,无论是否   使用惰性实例化或急切实例化单例   实例。在惰性实例化中,单例不被实例化   直到首先需要它的方法。在急切的实例化中,   单例在启动时被实例化,无论它是否被使用。

@Singleton
@Startup
public class StartupBean {

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

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

如果您处于群集环境中,这可能不起作用   你开箱即用。这仅适用于单个VM。你将会有   你的StartupBean在每个服务器实例启动或调用时调用   关闭。如果您有特殊的群集要求(例如,仅限于此   初始化一次完整的集群)你必须考虑   使用数据库同步StartupBeans。适用于任何EJB   3.1兼容容器和高度便携。这甚至应该适用于轻量级Java EE 6 Webprofile

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

答案 1 :(得分:1)

  

如果您想使用ManagedBean

     

Eager Application-Scoped Beans托管bean被懒惰地实例化。   也就是说,当从请求发出请求时它们被实例化   应用

     

强制实例化应用程序范围的bean并将其放入   应用程序启动时及之前的应用程序范围   任何请求,托管bean的eager属性应该是   设置为true,如以下示例所示:

@ManagedBean(eager=true)
@ApplicationScoped

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