2017-04-12 4 views
0

私はどのWARにどのようなEARを持っていますか&少数のJARS。最終的に私のWARの下にJARSはほんの少ししかありません。JSFマネージドBeanのスコープは、EAR、WAR、JAR間の可視性とアクセスに影響しますか

データオブジェクトのセットをJARとしてEAR内にパッケージ化しました。マネージドBeanの1つが '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は、セッション全体を通して、真実で利用可能なeagerフラグでセッションスコープにする必要があります。マネージドBean Bはリクエストスコープであり、Aのインスタンスを取得しようとします。唯一の問題は、戦争以外のJARにファイル 'A'を配置しても、耳の中にこの問題があるということです。一方、jarファイル内のファイル 'A'がWARのweb-inf内に置かれている場合、BはWebプロジェクトのJavaソースで構成されているため、libが解決します。 –

答えて

0

イーガーアプリケーションスコープの豆

マネージドBeanはいい加減にインスタンス化されています。つまり、アプリケーションから要求があったときにインスタンス化されます。

アプリケーションスコープのBeanをインスタンス化し、アプリケーションが開始され、要求が行われるとすぐにアプリケーションスコープに配置するには、管理対象Beanのeager属性をtrueに設定する必要があります。たとえば、次の

@ManagedBean(eager=true) 
@ApplicationScoped 

eagerプロパティは、コンテナがオンデマンドでアプリケーションの起動時にインスタンスを作成していないことを意味します。このインスタンスをアプリケーションスコープに入れることができます。 (この時点で他のスコープはありません)。従って熱心に作成されたマネージドBeanはApplicationScopedでなければなりません。

+0

ここでは、呼び出し元のファイルにはアプリケーション適用が要求されています。 –

+0

"名前が 'B'の管理対象Beanは、eager = trueをサポートするためにはアプリケーションスコープでなければなりません。ファイルについては何も言わない。それは言う:ビーン、Bと呼ばれるApplicationScopedする必要があります。マネージドBeanをスコープにバインドすることは意味がありますが、ファイルをスコープにバインドする方法はありますか? managed =スコープによって決定される寿命。 –

関連する問題