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:38:54 UTC
svn commit: r952746 - in
/myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root:
extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/servlet/
extscript-myfaces12-extensions/src/main/java/org/apache/myfaces/extensi...
Author: werpu
Date: Tue Jun 8 17:38:54 2010
New Revision: 952746
URL: http://svn.apache.org/viewvc?rev=952746&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-134
Modified:
myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/servlet/CustomChainLoader.java
myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces12-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces12-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java
myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java
Modified: myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/servlet/CustomChainLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/servlet/CustomChainLoader.java?rev=952746&r1=952745&r2=952746&view=diff
==============================================================================
--- myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/servlet/CustomChainLoader.java (original)
+++ myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/servlet/CustomChainLoader.java Tue Jun 8 17:38:54 2010
@@ -44,7 +44,7 @@ public class CustomChainLoader extends C
public CustomChainLoader(ServletContext servletContext) {
_scriptingWeaver = WeavingContext.getWeaver();
}
-
+
public Class forName(String name) {
if(_scriptingWeaver == null || name == null) {
Modified: myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces12-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces12-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java?rev=952746&r1=952745&r2=952746&view=diff
==============================================================================
--- myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces12-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java (original)
+++ myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces12-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java Tue Jun 8 17:38:54 2010
@@ -49,18 +49,23 @@ import java.util.*;
public class ApplicationProxy extends Application implements Decorated {
volatile Application _delegate;
+ volatile static boolean elResolverAdded = false;
+ volatile static boolean varResolverAdded = false;
public ApplicationProxy(Application delegate) {
_delegate = delegate;
}
-
public void addELResolver(ELResolver elResolver) {
weaveDelegate();
-
- //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);
}
@@ -73,10 +78,7 @@ public class ApplicationProxy extends Ap
public ELResolver getELResolver() {
weaveDelegate();
ELResolver retVal = _delegate.getELResolver();
- if (!(retVal instanceof ELResolverProxy))
- retVal = new ELResolverProxy(retVal);
return retVal;
-
}
//TOD add a weaving for resource bundles
@@ -219,17 +221,16 @@ public class ApplicationProxy extends Ap
public VariableResolver getVariableResolver() {
weaveDelegate();
VariableResolver variableResolver = _delegate.getVariableResolver();
- if (!(variableResolver instanceof VariableResolverProxy))
- variableResolver = new VariableResolverProxy(variableResolver);
return variableResolver;
}
@SuppressWarnings("deprecation")
public void setVariableResolver(VariableResolver variableResolver) {
weaveDelegate();
- if (!(variableResolver instanceof VariableResolverProxy))
+ if (!varResolverAdded) {
variableResolver = new VariableResolverProxy(variableResolver);
-
+ varResolverAdded = true;
+ }
_delegate.setVariableResolver(variableResolver);
}
@@ -412,7 +413,7 @@ public class ApplicationProxy extends Ap
private boolean alreadyWovenInRequest(String clazz) {
//portlets now can be enabled thanks to the jsf2 indirections regarding the external context
- Map<String,Object> reqMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
+ Map<String, Object> reqMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
if (reqMap.get(ScriptingConst.SCRIPTING_REQUSINGLETON + clazz) == null) {
reqMap.put(ScriptingConst.SCRIPTING_REQUSINGLETON + clazz, "");
return false;
Modified: myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces12-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces12-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java?rev=952746&r1=952745&r2=952746&view=diff
==============================================================================
--- myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces12-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java (original)
+++ myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces12-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java Tue Jun 8 17:38:54 2010
@@ -25,7 +25,10 @@ import org.apache.myfaces.extensions.scr
import javax.el.ELContext;
import javax.el.ELException;
import javax.el.ELResolver;
+import java.io.IOException;
+import java.io.ObjectInputStream;
import java.util.Iterator;
+import java.util.logging.Logger;
/**
* EL Resolver which is scripting enabled
@@ -34,33 +37,30 @@ import java.util.Iterator;
*/
public class ELResolverProxy extends ELResolver implements Decorated {
+ Logger log = Logger.getLogger(ELResolverProxy.class.getName());
ELResolver _delegate = null;
+ // static ThreadLocal<Boolean> _getValue = new ThreadLocal<Boolean>();
+
public Object getValue(ELContext elContext, final Object base, final Object property) throws NullPointerException, ELException {
- //request, class is loaded anew hence we already have picked up the new code
Object retVal = _delegate.getValue(elContext, base, property);
+ Object newRetVal;
+
if (retVal != null && WeavingContext.isDynamic(retVal.getClass())) {
- //now here we have something special which is implicit
- //if the bean is only request scoped we dont have to reload anything
- //so just run through this code without having anything happening here
- //reloadScriptingInstance will return the same object we already had before
- //the reason is for request or none scoped beans we get a new
- //freshly reloaded and compiled instance on every request
- //the problem starts with session application or custom scoped beans
- //There nothing is compiled and we have to do the further bean processing
- Object newRetVal = WeavingContext.getWeaver().reloadScriptingInstance(retVal, ScriptingConst.ARTIFACT_TYPE_MANAGEDBEAN); /*once it was tainted or loaded by
- our classloader we have to recreate all the time to avoid classloader issues*/
+ newRetVal = WeavingContext.getWeaver().reloadScriptingInstance(retVal, ScriptingConst.ARTIFACT_TYPE_MANAGEDBEAN);
+
if (newRetVal != retVal) {
setValue(elContext, base, property, newRetVal);
}
+
return newRetVal;
+
}
return retVal;
-
}
public Class<?> getType(ELContext elContext, Object o, Object o1) throws NullPointerException, ELException {
@@ -71,12 +71,12 @@ public class ELResolverProxy extends ELR
return retVal;
}
- public void setValue(ELContext elContext, Object base, Object property, Object newRetVal) throws NullPointerException, ELException {
+ public void setValue(ELContext elContext, Object base, Object property, Object value) throws NullPointerException, ELException {
//now to more complex relations...
if (base != null) {
- WeavingContext.getRefreshContext().getDependencyRegistry().addDependency(ScriptingConst.ENGINE_TYPE_JSF_ALL, base.getClass().getName(), base.getClass().getName(), newRetVal.getClass().getName());
+ WeavingContext.getRefreshContext().getDependencyRegistry().addDependency(ScriptingConst.ENGINE_TYPE_JSF_ALL, base.getClass().getName(), base.getClass().getName(), value.getClass().getName());
}
- _delegate.setValue(elContext, base, property, newRetVal);
+ _delegate.setValue(elContext, base, property, value);
}
public boolean isReadOnly(ELContext elContext, Object o, Object o1) throws NullPointerException, ELException {
@@ -99,4 +99,11 @@ public class ELResolverProxy extends ELR
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());
+
+ }
+
}
Modified: myfaces/extensions/scripting/branches/1_0_final_prepare/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/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java?rev=952746&r1=952745&r2=952746&view=diff
==============================================================================
--- myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java (original)
+++ myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java Tue Jun 8 17:38:54 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/branches/1_0_final_prepare/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/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java?rev=952746&r1=952745&r2=952746&view=diff
==============================================================================
--- myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java (original)
+++ myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-myfaces2-extensions/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java Tue Jun 8 17:38:54 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,6 +94,7 @@ public class ELResolverProxy extends ELR
return _delegate.getCommonPropertyType(elContext, o);
}
+
public ELResolverProxy(ELResolver delegate) {
_delegate = delegate;
}
@@ -141,4 +103,13 @@ public class ELResolverProxy extends ELR
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());
+
+ }
+
}