world mkyong hello example ejemplo jsf-2 thread-safety facescontext

jsf 2 - mkyong - Lifecycle of FacesContext?



primefaces (1)

¿Esto significa que FacesContext nunca irá a la recolección de basura, y la instancia se destruirá solo cuando la aplicación weba actual se detenga (el servidor está detenido)?

No, lo lees mal. FacesContext vive tanto como una sola solicitud HTTP. Será (en realidad, "puede" es una palabra mejor) no ser inmediatamente GC si hace una referencia incorrecta en cualquier parte de su propio código más allá de su alcance. Por ejemplo, como propiedad de un bean gestionado de ámbito de sesión que dura más que una sola solicitud HTTP:

@ManagedBean @SessionScoped public class BadSessionBean { // Bad Example! Never do this! Not threadsafe and instance can''t be GC''ed by end of request! private FacesContext context = FacesContext.getCurrentInstance(); }

Si no está haciendo eso en ninguna parte de su código y, por lo tanto, siempre está obteniendo la instancia actual en el alcance local del método, entonces tendrá la oportunidad de recibir una GC adecuada.

@ManagedBean @SessionScoped public class GoodSessionBean { public void someMethod() { // OK! Declared in method local scope and thus threadsafe. FacesContext context = FacesContext.getCurrentInstance(); } }

Tenga en cuenta que este comportamiento de GC no es específico de JSF / FacesContext , sino que es específico de Java básico en general.

¿ FacesContext sigue el patrón singleton? En ese caso, ¿cómo se comportará cuando se solicite varias veces y se presente simultáneamente la respuesta de renderizado, ya que solo atiende una solicitud por vez?

No, definitivamente no es un singleton. Es una instancia de ThreadLocal creada por FacesServlet inmediatamente después de que el método FacesServlet ingresa y destruye el FacesServlet service() antes de FacesServlet el método service() . Por lo tanto, solo hay una instancia por solicitud (y, por lo tanto, no por solicitud). Tenga en cuenta que una solicitud HTTP cuenta como una cadena separada. Puede haber múltiples hilos (leer: solicitudes) y, por lo tanto, puede haber múltiples instancias de FacesContext durante la vida de la aplicación. Su patrón principal es el patrón de fachada , pero eso además no está relacionado con que sea un ThreadLocal .

Ver también:

Mientras FacesContext el javadoc de FacesContext , me encontré con esta frase

La instancia permanece activa hasta que se invoca su método de liberación (), después de lo cual no se permiten más referencias a esta instancia. Mientras una instancia de FacesContext está activa, no se debe hacer referencia a ella desde ningún hilo que no sea el sobre el que se utiliza el contenedor de servlets que ejecuta esta aplicación web para el procesamiento de esta solicitud.

¿Esto significa que FacesContext nunca irá a la recolección de basura, y la instancia se destruirá solo cuando la aplicación weba actual se detenga (el servidor está detenido)?

¿ FacesContext sigue el patrón singleton? En ese caso, ¿cómo se comportará cuando se solicite de manera múltiple y se presente simultáneamente la respuesta de renderizado, ya que solo atiende una solicitud por vez?