You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by an...@apache.org on 2012/03/14 21:27:53 UTC

svn commit: r1300709 - in /myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application: ViewDeclarationLanguageFactoryImpl.java ViewHandlerImpl.java

Author: andys
Date: Wed Mar 14 20:27:52 2012
New Revision: 1300709

URL: http://svn.apache.org/viewvc?rev=1300709&view=rev
Log:
Checkpoint: more error handling cleanup.  Also, moved code that protects against non-skin pregen requests from ViewDeclarationLanguageFactory to ViewHandlerImpl.

Modified:
    myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/ViewDeclarationLanguageFactoryImpl.java
    myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/ViewHandlerImpl.java

Modified: myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/ViewDeclarationLanguageFactoryImpl.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/ViewDeclarationLanguageFactoryImpl.java?rev=1300709&r1=1300708&r2=1300709&view=diff
==============================================================================
--- myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/ViewDeclarationLanguageFactoryImpl.java (original)
+++ myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/ViewDeclarationLanguageFactoryImpl.java Wed Mar 14 20:27:52 2012
@@ -34,7 +34,6 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
 
-import javax.faces.FacesException;
 import javax.faces.application.Resource;
 import javax.faces.component.UIViewRoot;
 import javax.faces.context.ExternalContext;
@@ -49,7 +48,6 @@ import org.apache.myfaces.trinidad.chang
 import org.apache.myfaces.trinidad.context.RequestContext;
 import org.apache.myfaces.trinidad.logging.TrinidadLogger;
 import org.apache.myfaces.trinidad.render.InternalView;
-import org.apache.myfaces.trinidadinternal.skin.pregen.SkinPregenerationService;
 
 
 public class ViewDeclarationLanguageFactoryImpl
@@ -72,14 +70,11 @@ public class ViewDeclarationLanguageFact
     
     _internalViewStrategy = new InternalViewHandlingStrategy(finder);
     
-    _skinPregenerationEnabled = SkinPregenerationService.isEnabled();
   }
 
   @Override
   public ViewDeclarationLanguage getViewDeclarationLanguage(String viewId)
   {
-    _checkSkinPregeneration(viewId);
-
     FacesContext context = FacesContext.getCurrentInstance();
     if (_getInternalView(context, viewId) != null)
       return _internalViewStrategy;
@@ -278,23 +273,9 @@ public class ViewDeclarationLanguageFact
     return uri;
   }
   
-  // We do not allow random requests into the application when the skin
-  // pregeneration service is enabled.  Only skin pregeneration requests
-  // are allowed.
-  private void _checkSkinPregeneration(String viewId)
-  {
-    if (_skinPregenerationEnabled && !SkinPregenerationService.VIEW_ID.equals(viewId))
-    {
-      // Prevent further processing of this request - only skin pregeneration
-      // requests are allowed.
-      throw new FacesException(_LOG.getMessage("SKIN_PREGEN_ENABLED"));
-    }
-  }
-
   private final ViewDeclarationLanguageFactory _wrapped;
   private final InternalViewHandlingStrategy _internalViewStrategy;
   private Map<String, InternalView> _internalViews;
-  private final boolean _skinPregenerationEnabled;
   
   private final static Object _NOT_FOUND = new Object();
   private final static String _VIEWID_MAPPING = "org.apache.myfaces.trinidadinternal.application.viewIdMapping";

Modified: myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/ViewHandlerImpl.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/ViewHandlerImpl.java?rev=1300709&r1=1300708&r2=1300709&view=diff
==============================================================================
--- myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/ViewHandlerImpl.java (original)
+++ myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/ViewHandlerImpl.java Wed Mar 14 20:27:52 2012
@@ -29,6 +29,7 @@ import javax.faces.application.ProjectSt
 import javax.faces.application.ViewHandler;
 import javax.faces.application.ViewHandlerWrapper;
 import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
 
 import javax.faces.view.ViewDeclarationLanguage;
@@ -41,6 +42,7 @@ import org.apache.myfaces.trinidad.util.
 import org.apache.myfaces.trinidadinternal.context.RequestContextImpl;
 import org.apache.myfaces.trinidadinternal.context.TrinidadPhaseListener;
 import org.apache.myfaces.trinidadinternal.share.config.Configuration;
+import org.apache.myfaces.trinidadinternal.skin.pregen.SkinPregenerationService;
 
 /**
  * ViewHandler that adds modification detection to the existing ViewHandler,
@@ -64,6 +66,7 @@ public class ViewHandlerImpl extends Vie
   {
     _delegate = delegate;
     _timestamps = new HashMap<String, Long>();
+    _skinPregenerationEnabled = SkinPregenerationService.isEnabled();    
   }
 
   public ViewHandler getWrapped()
@@ -75,6 +78,8 @@ public class ViewHandlerImpl extends Vie
   @Override
   public UIViewRoot createView(FacesContext context, String viewId)
   {
+    _checkSkinPregeneration(context, viewId);
+
     _initIfNeeded(context);
 
     if (_checkTimestamp(context, viewId))
@@ -409,6 +414,37 @@ public class ViewHandlerImpl extends Vie
     return Long.valueOf(URLUtils.getLastModified(url));
   }
 
+  // We do not allow random requests into the application when the skin
+  // pregeneration service is enabled.  Only skin pregeneration requests
+  // are allowed.
+  private void _checkSkinPregeneration(FacesContext context, String viewId)
+  {
+    if (_skinPregenerationEnabled && !SkinPregenerationService.VIEW_ID.equals(viewId))
+    {
+      ExternalContext external = context.getExternalContext();
+      String message = _LOG.getMessage("SKIN_PREGEN_ENABLED");
+      _LOG.severe(message);
+      _sendError(external, message);
+      
+      // We don't explicitly short-circuit/exception out.  Calling
+      // responseComplete() achieves the same result (ie. prevents
+      // subsequent processing/rendering) more gracefully.
+      context.responseComplete();
+    }
+  }
+
+  // Sends a response error to the client
+  private static void _sendError(ExternalContext external, String message)
+  {
+    try
+    {
+      external.responseSendError(500, message);
+    }
+    catch (IOException e)
+    {
+      _LOG.warning(e);
+    }
+  }
 
   private Boolean           _checkTimestamp;
   // Mostly final, but see _initIfNeeded()
@@ -416,6 +452,8 @@ public class ViewHandlerImpl extends Vie
   private final Map<String, Long> _timestamps;
   private boolean           _inited;
 
+  private final boolean _skinPregenerationEnabled;
+
   private static final TrinidadLogger _LOG = TrinidadLogger.createTrinidadLogger(ViewHandlerImpl.class);
   private static final Long   _NOT_FOUND = Long.valueOf(0);
   private static final String _RENDER_VIEW_MARKER = "__trRenderViewEntry";