2017-04-12 78 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綁定到作用域是有意義的,但是如何將文件綁定到作用域?管理=它的使用壽命由一個範圍決定。 –