You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2011/02/05 23:23:31 UTC

svn commit: r1067542 - in /myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation: DefaultLifecycleProviderFactory.java LifecycleProviderFactory.java

Author: lu4242
Date: Sat Feb  5 22:23:31 2011
New Revision: 1067542

URL: http://svn.apache.org/viewvc?rev=1067542&view=rev
Log:
make LifecycleProviderFactory to be on servlet context attribute map, not bound to a static variable to ensure LifecycleProviderFactory.release to be executed correctly

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/DefaultLifecycleProviderFactory.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/LifecycleProviderFactory.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/DefaultLifecycleProviderFactory.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/DefaultLifecycleProviderFactory.java?rev=1067542&r1=1067541&r2=1067542&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/DefaultLifecycleProviderFactory.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/DefaultLifecycleProviderFactory.java Sat Feb  5 22:23:31 2011
@@ -58,31 +58,27 @@ public class DefaultLifecycleProviderFac
     @Override
     public LifecycleProvider getLifecycleProvider(ExternalContext externalContext)
     {
-        LifecycleProvider lifecycleProvider = (LifecycleProvider) externalContext.getApplicationMap().get(LIFECYCLE_PROVIDER_INSTANCE_KEY);
+        LifecycleProvider lifecycleProvider = null;
+        if (externalContext == null)
+        {
+            // Really in jsf 2.0, this will not happen, because a Startup/Shutdown
+            // FacesContext and ExternalContext are provided on initialization and shutdown,
+            // and in other scenarios the real FacesContext/ExternalContext is provided.
+            log.info("No ExternalContext using fallback LifecycleProvider.");
+            lifecycleProvider = resolveFallbackLifecycleProvider();
+        }
+        else
+        {
+            lifecycleProvider = (LifecycleProvider) externalContext.getApplicationMap().get(LIFECYCLE_PROVIDER_INSTANCE_KEY);
+        }
         if (lifecycleProvider == null)
         {
-            if (externalContext == null)
-            {
-                // Really in jsf 2.0, this will not happen, because a Startup/Shutdown
-                // FacesContext and ExternalContext are provided on initialization and shutdown,
-                // and in other scenarios the real FacesContext/ExternalContext is provided.
-                log.info("No ExternalContext using fallback LifecycleProvider.");
-                lifecycleProvider = resolveFallbackLifecycleProvider();
-            }
-            else
+            if (!resolveLifecycleProviderFromExternalContext(externalContext))
             {
-                if (!resolveLifecycleProviderFromExternalContext(externalContext))
+                if (!resolveLifecycleProviderFromService(externalContext))
                 {
-                    if (!resolveLifecycleProviderFromService(externalContext))
-                    {
-                        lifecycleProvider = resolveFallbackLifecycleProvider();
-                        externalContext.getApplicationMap().put(LIFECYCLE_PROVIDER_INSTANCE_KEY, lifecycleProvider);
-                    }
-                    else
-                    {
-                        //Retrieve it because it was resolved
-                        lifecycleProvider = (LifecycleProvider) externalContext.getApplicationMap().get(LIFECYCLE_PROVIDER_INSTANCE_KEY);
-                    }
+                    lifecycleProvider = resolveFallbackLifecycleProvider();
+                    externalContext.getApplicationMap().put(LIFECYCLE_PROVIDER_INSTANCE_KEY, lifecycleProvider);
                 }
                 else
                 {
@@ -90,6 +86,11 @@ public class DefaultLifecycleProviderFac
                     lifecycleProvider = (LifecycleProvider) externalContext.getApplicationMap().get(LIFECYCLE_PROVIDER_INSTANCE_KEY);
                 }
             }
+            else
+            {
+                //Retrieve it because it was resolved
+                lifecycleProvider = (LifecycleProvider) externalContext.getApplicationMap().get(LIFECYCLE_PROVIDER_INSTANCE_KEY);
+            }
             log.info("Using LifecycleProvider "+ lifecycleProvider.getClass().getName());
         }
         return lifecycleProvider;

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/LifecycleProviderFactory.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/LifecycleProviderFactory.java?rev=1067542&r1=1067541&r2=1067542&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/LifecycleProviderFactory.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/annotation/LifecycleProviderFactory.java Sat Feb  5 22:23:31 2011
@@ -31,7 +31,7 @@ import org.apache.myfaces.spi.impl.SpiUt
 public abstract class LifecycleProviderFactory {
     protected static final String FACTORY_DEFAULT = DefaultLifecycleProviderFactory.class.getName();
 
-    private static volatile LifecycleProviderFactory INSTANCE;
+    private static final String FACTORY_KEY = LifecycleProviderFactory.class.getName();
 
     public static LifecycleProviderFactory getLifecycleProviderFactory()
     {
@@ -41,7 +41,7 @@ public abstract class LifecycleProviderF
     
     public static LifecycleProviderFactory getLifecycleProviderFactory(ExternalContext ctx)
     {
-        LifecycleProviderFactory instance = INSTANCE;
+        LifecycleProviderFactory instance = (LifecycleProviderFactory) ctx.getApplicationMap().get(FACTORY_KEY);
         if (instance != null)
         {
             return instance;
@@ -77,7 +77,7 @@ public abstract class LifecycleProviderF
 
 
     public static void setLifecycleProviderFactory(LifecycleProviderFactory instance) {
-        INSTANCE = instance;
+        FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().put(FACTORY_KEY, instance);
     }
 
     public abstract LifecycleProvider getLifecycleProvider(ExternalContext externalContext);