You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2010/06/08 19:28:24 UTC

svn commit: r952742 - in /myfaces/extensions/scripting/trunk/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations: ApplicationProxy.java ELResolverProxy.java

Author: werpu
Date: Tue Jun  8 17:28:24 2010
New Revision: 952742

URL: http://svn.apache.org/viewvc?rev=952742&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-134

Modified:
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java?rev=952742&r1=952741&r2=952742&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java Tue Jun  8 17:28:24 2010
@@ -122,22 +122,24 @@ public class ApplicationProxy extends Ap
      */
     Map<EventHandlerProxyEntry, EventHandlerProxyEntry> _eventHandlerIdx = new ConcurrentHashMap<EventHandlerProxyEntry, EventHandlerProxyEntry>();
 
+    volatile static boolean elResolverAdded = false;
+    volatile static boolean varResolverAdded = false;
+
+
     public ApplicationProxy(Application delegate) {
         _delegate = delegate;
     }
 
     public void addELResolver(ELResolver elResolver) {
         weaveDelegate();
-        //This can be problematic if several libraries add their own proxies
-        // that way then might get get a cyclic stack
-        //under normal circumstances this should not happen
-        //because addElResolver is called once and getElResolver
-        //does not change the stack afterwards in the worst case
-        //we might get 2 of our proxies in the delegate stack
-
-        //the same goes for the rest of the factory stuff
-        if (!(elResolver instanceof ELResolverProxy))
+        if(!elResolverAdded) {
+            //ordering hints are unsufficient here we make
+            //sure our proxy is added as second in the chain
+            //also this method works as well on
+            //jsf 1.2 while hints only work in jsf2
             elResolver = new ELResolverProxy(elResolver);
+            elResolverAdded = true;
+        }
         _delegate.addELResolver(elResolver);
     }
 
@@ -150,9 +152,6 @@ public class ApplicationProxy extends Ap
     public ELResolver getELResolver() {
         weaveDelegate();
         ELResolver retVal = _delegate.getELResolver();
-        if (!(retVal instanceof ELResolverProxy)) {
-            retVal = new ELResolverProxy(retVal);
-        }
         return retVal;
 
     }
@@ -265,8 +264,8 @@ public class ApplicationProxy extends Ap
         //defined in the setter to speed things up a little
         NavigationHandler retVal = _delegate.getNavigationHandler();
 
-        if (retVal != null && WeavingContext.isDynamic(retVal.getClass()))
-            retVal = new NavigationHandlerProxy(retVal);
+        //if (retVal != null && WeavingContext.isDynamic(retVal.getClass()))
+        //    retVal = new NavigationHandlerProxy(retVal);
         return retVal;
     }
 
@@ -293,18 +292,16 @@ public class ApplicationProxy extends Ap
     @SuppressWarnings("deprecation")
     public VariableResolver getVariableResolver() {
         weaveDelegate();
-        VariableResolver variableResolver = _delegate.getVariableResolver();
-        if (!(variableResolver instanceof VariableResolverProxy))
-            variableResolver = new VariableResolverProxy(variableResolver);
-        return variableResolver;
+        return _delegate.getVariableResolver();
     }
 
     @SuppressWarnings("deprecation")
     public void setVariableResolver(VariableResolver variableResolver) {
         weaveDelegate();
-        if (!(variableResolver instanceof VariableResolverProxy))
+        if(!varResolverAdded) {
             variableResolver = new VariableResolverProxy(variableResolver);
-
+            varResolverAdded = true;
+        }
         _delegate.setVariableResolver(variableResolver);
     }
 
@@ -653,14 +650,14 @@ public class ApplicationProxy extends Ap
     public ResourceHandler getResourceHandler() {
         weaveDelegate();
         ResourceHandler retVal = _delegate.getResourceHandler();
-        if(WeavingContext.isDynamic(retVal.getClass())) {
-            return new ResourceHandlerProxy(retVal);
-        }
 
-        //ResourceHandler newHandler = (ResourceHandler) reloadInstance(retVal, ScriptingConst.ARTIFACT_TYPE_RESOURCEHANDLER);
-        //if (newHandler != retVal) {
-        //    return _delegate.getResourceHandler();
-        //}
+        /*if (WeavingContext.isDynamic(retVal.getClass())) {
+           ResourceHandler newHandler = (ResourceHandler) reloadInstance(retVal, ScriptingConst.ARTIFACT_TYPE_RESOURCEHANDLER);
+           if (newHandler != retVal) {
+               _delegate.setResourceHandler(newHandler);
+               return newHandler;
+           }
+       } */
         return retVal;
     }
 
@@ -679,11 +676,16 @@ public class ApplicationProxy extends Ap
     @Override
     public void setResourceHandler(ResourceHandler resourceHandler) {
         weaveDelegate();
-        _delegate.setResourceHandler(resourceHandler);
-        ResourceHandler handler = _delegate.getResourceHandler();
-        if (handler instanceof PurgedResourceHandler) {
-            WeavingContext.getWeaver().fullClassScan();
+        if (WeavingContext.isDynamic(resourceHandler.getClass())) {
+            ResourceHandler proxy = new ResourceHandlerProxy(resourceHandler);
+            resourceHandler = proxy;
         }
+
+        _delegate.setResourceHandler(resourceHandler);
+        //ResourceHandler handler = _delegate.getResourceHandler();
+        //if (handler instanceof PurgedResourceHandler) {
+        //    WeavingContext.getWeaver().fullClassScan();
+        //}
     }
 
     @Override

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java?rev=952742&r1=952741&r2=952742&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java Tue Jun  8 17:28:24 2010
@@ -18,7 +18,6 @@
  */
 package org.apache.myfaces.extensions.scripting.jsf.dynamicdecorators.implemetations;
 
-import org.apache.myfaces.config.RuntimeConfig;
 import org.apache.myfaces.extensions.scripting.api.Decorated;
 import org.apache.myfaces.extensions.scripting.api.ScriptingConst;
 import org.apache.myfaces.extensions.scripting.core.util.WeavingContext;
@@ -26,10 +25,9 @@ import org.apache.myfaces.extensions.scr
 import javax.el.ELContext;
 import javax.el.ELException;
 import javax.el.ELResolver;
-import javax.faces.context.FacesContext;
+import java.io.IOException;
+import java.io.ObjectInputStream;
 import java.util.Iterator;
-import java.util.Map;
-import java.util.logging.Level;
 import java.util.logging.Logger;
 
 /**
@@ -42,7 +40,7 @@ public class ELResolverProxy extends ELR
     Logger log = Logger.getLogger(ELResolverProxy.class.getName());
     ELResolver _delegate = null;
 
-    static ThreadLocal<Boolean> _getValue = new ThreadLocal<Boolean>();
+   // static ThreadLocal<Boolean> _getValue = new ThreadLocal<Boolean>();
 
     public Object getValue(ELContext elContext, final Object base, final Object property) throws NullPointerException, ELException {
 
@@ -60,50 +58,13 @@ public class ELResolverProxy extends ELR
 
             return newRetVal;
 
-        } /*else if (retVal == null) {
-            retVal = reloadAnnotatedBean(elContext, base, property, null);
-        }*/
+        } 
 
         return retVal;
     }
 
 
-    @Deprecated
-    //soon do be removed
-    private Object reloadAnnotatedBean(ELContext elContext, Object base, Object property, Object newRetVal) {
-        //Avoid recursive calls into ourselves here
-
-        try {
-            if (_getValue.get() != null && _getValue.get().equals(Boolean.TRUE)) {
-                return newRetVal;
-            }
-            _getValue.set(Boolean.TRUE);
-            //base == null means bean el
 
-            //TODO is this code still needed, the scan should have a proper
-            //information base at the time of the el consumption anyway
-            //since it is triggered already
-            //this looks like old code to me where we did the annotation scan two phased!
-            if (base == null) {
-                final FacesContext facesContext = FacesContext.getCurrentInstance();
-                RuntimeConfig config = RuntimeConfig.getCurrentInstance(facesContext.getExternalContext());
-                Map<String, org.apache.myfaces.config.element.ManagedBean> mbeans = config.getManagedBeans();
-                if (!((String)property).startsWith("javax_") && (!((String)property).startsWith("org_") && !mbeans.containsKey(property.toString()))) {
-                    if (log.isLoggable(Level.FINE)) {
-                        log.log(Level.FINE, "[EXT-SCRIPTING] ElResolverProxy.getValue old bean not existing we have to perform a full annotation scan");
-                    }
-                    setValue(elContext, base, property, null);
-
-                    //we only trigger this if the bean was deregistered, we now can reregister it again
-                    WeavingContext.getWeaver().fullClassScan();
-                    newRetVal = _delegate.getValue(elContext, base, property);
-                }
-            }
-        } finally {
-            _getValue.set(Boolean.FALSE);
-        }
-        return newRetVal;
-    }
 
     public Class<?> getType(ELContext elContext, Object o, Object o1) throws NullPointerException, ELException {
         Class<?> retVal = _delegate.getType(elContext, o, o1);
@@ -133,12 +94,26 @@ public class ELResolverProxy extends ELR
         return _delegate.getCommonPropertyType(elContext, o);
     }
 
+
     public ELResolverProxy(ELResolver delegate) {
         _delegate = delegate;
     }
 
+     public ELResolverProxy() {
+         
+     }
+
     public Object getDelegate() {
         return _delegate;  //To change body of implemented methods use File | Settings | File Templates.
     }
 
+
+   private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
+   {
+     // our "pseudo-constructor"
+     in.defaultReadObject();
+     log = Logger.getLogger(ELResolverProxy.class.getName());
+
+   }
+
 }