2017-04-12 75 views
0

我有EAR,其中几个JARS都是WAR。在我的WAR下最终还有更少的JARS。JSF Managed Bean范围是否影响EAR,WAR和JAR之间的可见性和访问

我已经将一组数据对象封装在一个EAR中作为JAR,它的一个Managed 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 ???

+0

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

+0

@TheBitman文档很清楚。但是这里的问题反之亦然......托管bean A需要在整个会话期间进行,最终会话会话的作用域与渴望标志一样真实且可用。托管bean B是请求范围并试图获取A的实例。唯一的问题是,如果将文件“A”放置在战争之外的JAR中,但耳朵内部存在此问题。而如果jar中的文件'A'被放置在WAR的web-inf lib中,则解析为B在web项目的Java源代码中构成。 –

回答

0

急于应用程序作用域豆

管理豆懒洋洋地实例化。也就是说,当从应用程序发出请求时它们被实例化。

要强制一个应用程序范围的bean被实例化,并在应用程序启动之后并且在发出任何请求之前立即放置在应用程序范围内,那么托管bean的eager属性应该设置为true,如下面的例子:

@ManagedBean(eager=true) 
@ApplicationScoped 

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

+0

这里调用文件被要求应用程序范围。 –

+0

“名称为'B'的托管bean必须是应用程序范围以支持eager = true。”它没有提到关于文件的任何信息。它说:这个名为B的bean应该是ApplicationScoped。将托管bean绑定到作用域是有意义的,但是如何将文件绑定到作用域?管理=它的使用寿命由一个范围决定。 –