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";