2017-04-12 3 views
0

Ich habe EAR mit in dem WAR & einige JARS. Irgendwann noch ein paar JARS unter meinem WAR.Beeinflusst JSF Managed Bean die Sichtbarkeit und den Zugriff zwischen EAR, WAR und JAR

Ich habe einen Satz von DATENOBJEKTEN in einem EAR als JAR verpackt, aus dem eines seiner Managed Bean unter "SessionScope" und mit seiner Eigenschaft -> "eifrig = wahr". Sagen Sie "A.Java"

Nun, von meinem Krieg habe ich eine ManagedBean, sagen "B.java", mit "RequestScope" versuchen, eine Instanz von A.java, die als NULL zurückgegeben wird. Wenn aus den Protokollen, verfolgt hätte die unten Ausnahme:

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

Gibt es eine Hierarchie von Managed Bean Scope, dass wir dafür sorgen müssen, während die Archivierung und als EAR Bereitstellung ???

+0

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

+0

@TheBitman die Dokumente sind klar genug. Aber das Problem ist hier umgekehrt ... Die gemanagte Bean A muss während der gesamten Session sein, eventuell ist die Session mit eifriger Flagge als wahr und verfügbar definiert. Die Bean B ist der Anforderungsbereich und versucht, eine Instanz von A zu erhalten. Das einzige Problem ist, wenn die Datei "A" in einer JAR außerhalb des Krieges platziert wird, aber in einem Ohr dieses Problem hat. Wenn hingegen die Datei 'A' in einem Jar in der Web-inf-Bibliothek des WAR platziert wird, wird die lib aufgelöst, da der B in der Java-Quelle des Webprojekts enthalten ist. –

Antwort

0

Eager Anwendungs ​​Scoped Bohnen

Managed Beans lazily instanziiert. Das heißt, dass sie instanziiert werden, wenn eine Anfrage von der Anwendung erfolgt.

Um zu erzwingen, dass ein Application-Scoped Bean instanziiert und in den Anwendungsbereich der Anwendung gestellt wird, sobald die Anwendung gestartet wird und bevor eine Anforderung erfolgt, sollte das Eager-Attribut der verwalteten Bean auf True gesetzt werden folgendes Beispiel:

@ManagedBean(eager=true) 
@ApplicationScoped 

die eager Eigenschaft bedeutet, dass der Behälter die Instanz beim Start der Anwendung und nicht auf Nachfrage schafft. Es kann diese Instanz nur in den Anwendungsbereich der Anwendung aufnehmen. (Zu dieser Zeit gibt es keine anderen Bereiche). Daher müssen die eifrig erstellten verwalteten Beans ApplicationScoped sein.

+0

Hier wird aufgerufen, dass die Datei APPLICATION SCOPED aufgerufen wird. –

+0

"Die verwaltete Bean mit dem Namen 'B' muss Anwendungsbereich sein, um eager = true zu unterstützen." Es sagt nichts über Dateien aus. es heißt: Die Bean, genannt B, sollte ApplicationScoped sein. Es gibt eine Bedeutung, eine verwaltete Bean an einen Bereich zu binden, aber wie würden Sie eine Datei an einen Bereich binden? verwaltet = seine Lebensdauer wird durch einen Bereich bestimmt. –

Verwandte Themen