相关疑难解决方法(0)

如何强制应用程序范围的bean在应用程序启动时实例化?

我似乎无法找到一种方法来强制在启动Web应用程序时实例化/初始化应用程序范围的托管bean.似乎应用程序范围的bean在第一次访问bean时会进行惰性实例化,而不是在启动Web应用程序时实例化.对于我的Web应用程序,当第一个用户第一次在Web应用程序中打开页面时,就会发生这种情况.

我想避免这种情况的原因是因为在我的应用程序范围的bean初始化期间发生了许多耗时的数据库操作.它必须从持久存储中检索一堆数据,然后以ListItem元素等形式缓存一些频繁显示给用户的数据.我不希望在第一个用户连接时发生这一切,因此导致长时间的延迟.

我的第一个想法是使用旧式ServletContextListener contextInitialized()方法,并从那里使用ELResolver手动请求我的托管bean的实例(从而强制初始化发生).不幸的是,我无法在此阶段使用ELResolver来触发初始化,因为ELResolver需要FacesContext并且FacesContext仅在请求的生命周期内存在.

有没有人知道另一种方法来实现这一目标?

我使用MyFaces 1.2作为JSF实现,目前无法升级到2.x.

jsf initialization startup managed-bean

37
推荐指数
2
解决办法
3万
查看次数

从Web服务访问FacesContext

我正在开发一个由我编写的客户调用的Web服务.在Web服务中,我需要使用应用程序范围的对象,这样可以减轻系统上应用程序的负担.我已经实现了我的应用程序范围的对象,如此问题所示.

我可以在jsf页面中使用我的对象,没有问题,如下所示.

MyObject mo = (MyObject) FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().get("MyObjectsName");
Run Code Online (Sandbox Code Playgroud)

但是当它在Web服务请求中使用它时FacesContext.getCurrentInstance()返回null.有没有办法在Web服务中使用FacesContext.

java jsf web-services

5
推荐指数
1
解决办法
3050
查看次数

标签 统计

jsf ×2

initialization ×1

java ×1

managed-bean ×1

startup ×1

web-services ×1