You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2014/03/12 08:58:33 UTC

git commit: DELTASPIKE-426 fallback for full state-saving

Repository: deltaspike
Updated Branches:
  refs/heads/master 6f37b12f0 -> 5815ea366


DELTASPIKE-426 fallback for full state-saving


Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/5815ea36
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/5815ea36
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/5815ea36

Branch: refs/heads/master
Commit: 5815ea3661d484d025e139055f7548e3fc55daac
Parents: 6f37b12
Author: gpetracek <gp...@apache.org>
Authored: Wed Mar 12 08:48:20 2014 +0100
Committer: gpetracek <gp...@apache.org>
Committed: Wed Mar 12 08:48:20 2014 +0100

----------------------------------------------------------------------
 .../jsf/api/config/JsfModuleConfig.java         | 10 ++++++
 .../AbstractContextualReferenceWrapper.java     | 36 ++++++++++++++++++--
 .../jsf/impl/injection/ConverterWrapper.java    |  8 +++--
 .../InjectionAwareApplicationWrapper.java       |  6 ++--
 .../jsf/impl/injection/ValidatorWrapper.java    |  8 +++--
 5 files changed, 59 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/5815ea36/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/JsfModuleConfig.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/JsfModuleConfig.java b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/JsfModuleConfig.java
index dec847d..e8077d7 100644
--- a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/JsfModuleConfig.java
+++ b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/JsfModuleConfig.java
@@ -91,6 +91,16 @@ public class JsfModuleConfig implements DeltaSpikeConfig
     }
 
     /**
+     * If #initialStateMarked (of the component) returns false, a fallback to full state-saving is possible.
+     * Therefore it's required to save additional meta-data even with partial state-saving.
+     * @return false to restrict additional meta-data required for a possible fallback, true otherwise
+     */
+    public boolean isFullStateSavingFallbackEnabled()
+    {
+        return true;
+    }
+
+    /**
      * If the window-handling of JSF 2.2+ is enabled,
      * {@link org.apache.deltaspike.jsf.spi.scope.window.ClientWindowConfig.ClientWindowRenderMode#DELEGATED}
      * will be returned. In all other cases <code>null</code> gets returned as application wide default value.

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/5815ea36/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/AbstractContextualReferenceWrapper.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/AbstractContextualReferenceWrapper.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/AbstractContextualReferenceWrapper.java
index 33e1258..49c8c0d 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/AbstractContextualReferenceWrapper.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/AbstractContextualReferenceWrapper.java
@@ -18,6 +18,10 @@
  */
 package org.apache.deltaspike.jsf.impl.injection;
 
+import org.apache.deltaspike.core.api.provider.BeanProvider;
+import org.apache.deltaspike.core.util.ClassUtils;
+import org.apache.deltaspike.jsf.api.config.JsfModuleConfig;
+
 import javax.faces.FacesWrapper;
 import javax.faces.component.PartialStateHolder;
 import javax.faces.component.StateHolder;
@@ -27,10 +31,16 @@ import javax.faces.context.FacesContext;
 abstract class AbstractContextualReferenceWrapper<T> implements PartialStateHolder, FacesWrapper<T>
 {
     private T wrapped;
+    private transient Boolean fullStateSavingFallbackEnabled;
+
+    protected AbstractContextualReferenceWrapper()
+    {
+    }
 
-    protected AbstractContextualReferenceWrapper(T wrapped)
+    protected AbstractContextualReferenceWrapper(T wrapped, boolean fullStateSavingFallbackEnabled)
     {
         this.wrapped = wrapped;
+        this.fullStateSavingFallbackEnabled = fullStateSavingFallbackEnabled;
     }
 
     @Override
@@ -62,7 +72,19 @@ abstract class AbstractContextualReferenceWrapper<T> implements PartialStateHold
     {
         if (this.wrapped instanceof StateHolder)
         {
-            return ((StateHolder)wrapped).saveState(context);
+            Object[] result = new Object[2];
+
+            if (this.fullStateSavingFallbackEnabled == null)
+            {
+                this.fullStateSavingFallbackEnabled =
+                    BeanProvider.getContextualReference(JsfModuleConfig.class).isFullStateSavingFallbackEnabled();
+            }
+            if (this.fullStateSavingFallbackEnabled)
+            {
+                result[0] = this.getWrapped().getClass().getName();
+            }
+            result[1] = ((StateHolder)wrapped).saveState(context);
+            return result;
         }
 
         return null;
@@ -71,9 +93,17 @@ abstract class AbstractContextualReferenceWrapper<T> implements PartialStateHold
     @Override
     public void restoreState(FacesContext context, Object state)
     {
+        Object[] wrappedState = (Object[]) state;
+
+        if (this.wrapped == null) //fallback for full state-saving
+        {
+            //TODO check for @FacesConverter/@FacesValidator
+            //-> delegate to javax.faces.application.Application (+ unwrap it - since it will be wrapped again)
+            this.wrapped = (T)ClassUtils.tryToInstantiateClassForName((String)wrappedState[0]);
+        }
         if (this.wrapped instanceof StateHolder)
         {
-            ((StateHolder)this.wrapped).restoreState(context, state);
+            ((StateHolder) this.wrapped).restoreState(context, wrappedState[1]);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/5815ea36/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ConverterWrapper.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ConverterWrapper.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ConverterWrapper.java
index 0a362df..187f7a4 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ConverterWrapper.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ConverterWrapper.java
@@ -25,9 +25,13 @@ import javax.faces.convert.ConverterException;
 
 public class ConverterWrapper extends AbstractContextualReferenceWrapper<Converter> implements Converter
 {
-    public ConverterWrapper(Converter wrapped)
+    public ConverterWrapper()
     {
-        super(wrapped);
+    }
+
+    public ConverterWrapper(Converter wrapped, boolean fullStateSavingFallbackEnabled)
+    {
+        super(wrapped, fullStateSavingFallbackEnabled);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/5815ea36/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/InjectionAwareApplicationWrapper.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/InjectionAwareApplicationWrapper.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/InjectionAwareApplicationWrapper.java
index 2a76447..b18b36a 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/InjectionAwareApplicationWrapper.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/InjectionAwareApplicationWrapper.java
@@ -36,6 +36,7 @@ public class InjectionAwareApplicationWrapper extends ApplicationWrapper
     private final boolean containerManagedConvertersEnabled;
     private final boolean containerManagedValidatorsEnabled;
     private final boolean preDestroyViewMapEventFilterMode;
+    private final boolean fullStateSavingFallbackEnabled;
 
     public InjectionAwareApplicationWrapper(
         Application wrapped, JsfModuleConfig jsfModuleConfig, boolean preDestroyViewMapEventFilterMode)
@@ -43,6 +44,7 @@ public class InjectionAwareApplicationWrapper extends ApplicationWrapper
         this.wrapped = wrapped;
         this.containerManagedConvertersEnabled = jsfModuleConfig.isContainerManagedConvertersEnabled();
         this.containerManagedValidatorsEnabled = jsfModuleConfig.isContainerManagedValidatorsEnabled();
+        this.fullStateSavingFallbackEnabled = jsfModuleConfig.isFullStateSavingFallbackEnabled();
         this.preDestroyViewMapEventFilterMode = preDestroyViewMapEventFilterMode;
     }
 
@@ -77,7 +79,7 @@ public class InjectionAwareApplicationWrapper extends ApplicationWrapper
         }
         else
         {
-            return new ConverterWrapper(result);
+            return new ConverterWrapper(result, this.fullStateSavingFallbackEnabled);
         }
     }
 
@@ -106,7 +108,7 @@ public class InjectionAwareApplicationWrapper extends ApplicationWrapper
         }
         else
         {
-            return new ValidatorWrapper(result);
+            return new ValidatorWrapper(result, this.fullStateSavingFallbackEnabled);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/5815ea36/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ValidatorWrapper.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ValidatorWrapper.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ValidatorWrapper.java
index f306f8e..96bee8e 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ValidatorWrapper.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/injection/ValidatorWrapper.java
@@ -25,9 +25,13 @@ import javax.faces.validator.ValidatorException;
 
 public class ValidatorWrapper extends AbstractContextualReferenceWrapper<Validator> implements Validator
 {
-    public ValidatorWrapper(Validator wrapped)
+    public ValidatorWrapper()
     {
-        super(wrapped);
+    }
+
+    public ValidatorWrapper(Validator wrapped, boolean fullStateSavingFallbackEnabled)
+    {
+        super(wrapped, fullStateSavingFallbackEnabled);
     }
 
     @Override