0

我有 EAR,其中 WAR 和几个 JARS。最终,我的 WAR 下也多了几个 JARS。

我在 EAR 中将一组 DATA OBJECT 打包为 JAR,其中一个托管 Bean 位于“SessionScope”下,并且其属性 ->“eager = true”。说“A.Java”

现在,从我的 WAR 中,我有一个 ManagedBean,比如“B.java”,“RequestScope”试图获取 A.java 的一个实例,该实例返回为 NULL。从日志中,跟踪时出现以下异常:

The managed-bean with name 'B' must be application scoped to support eager=true.

是否存在托管 Bean 范围的层次结构,我们必须在存档和部署为 EAR 时确保这一点???

4

1 回答 1

0

Eager Application-Scoped Beans

托管 bean 被延迟实例化。也就是说,它们在应用程序发出请求时被实例化。

要在应用程序启动并且在发出任何请求之前强制实例化应用程序范围的 bean 并将其放置在应用程序范围内,托管 bean 的 eager 属性应设置为 true,如下例所示:

@ManagedBean(eager=true)
@ApplicationScoped

eager属性意味着容器在应用程序启动时创建实例,而不是按需创建。它可以将此实例放入应用程序范围内。(此时没有其他范围)。所以急切创建的托管 bean 必须是ApplicationScoped.

于 2017-04-12T19:29:52.563 回答