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 2009/09/11 13:58:46 UTC
svn commit: r813787 -
/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/
Author: werpu
Date: Fri Sep 11 11:58:43 2009
New Revision: 813787
URL: http://svn.apache.org/viewvc?rev=813787&view=rev
Log:
http://issues.apache.org/jira/browse/EXTSCRIPT-1
ongoing jsf2 integration
Removed:
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ResourceHandlerProxy.java
Modified:
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/LifefcycleProxy.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/NavigationHandlerProxy.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java?rev=813787&r1=813786&r2=813787&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java Fri Sep 11 11:58:43 2009
@@ -32,10 +32,9 @@
import javax.faces.convert.Converter;
import javax.faces.el.*;
import javax.faces.event.ActionListener;
-import javax.faces.event.SystemEventListener;
import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
import javax.faces.validator.Validator;
-import javax.servlet.ServletRequest;
import java.lang.reflect.Proxy;
import java.util.*;
@@ -50,17 +49,10 @@
Application _delegate = null;
- private boolean alreadyWovenInRequest(String clazz) {
- //todo also enable portlets here
- ServletRequest req = (ServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
- if (req.getAttribute(ScriptingConst.SCRIPTING_REQUSINGLETON + clazz) == null) {
- req.setAttribute(ScriptingConst.SCRIPTING_REQUSINGLETON + clazz, "");
- return false;
- }
- return false;
+ public ApplicationProxy(Application delegate) {
+ _delegate = delegate;
}
- //TODO add a proxy for the el resolvers as well
public void addELResolver(ELResolver elResolver) {
weaveDelegate();
@@ -285,12 +277,7 @@
* code, in the renderer we do it on method base
* due to the fact that our renderers are recycled via
* a flyweight pattern*/
- if (ProxyUtils.isDynamic(component.getClass()) && !alreadyWovenInRequest(component.toString())) {
- /*once it was tainted we have to recreate all the time*/
- component = (UIComponent) ProxyUtils.getWeaver().reloadScriptingInstance(component);
- alreadyWovenInRequest(component.toString());
- }
- return component;
+ return (UIComponent) reloadInstance(component);
}
public UIComponent createComponent(ValueBinding valueBinding, FacesContext facesContext, String s) throws FacesException {
@@ -298,16 +285,11 @@
UIComponent component = _delegate.createComponent(valueBinding, facesContext, s);
/*we are reweaving on the fly because we cannot be sure if
- * the class is not recycled all the time in the creation
- * code, in the renderer we do it on method base
- * due to the fact that our renderers are recycled via
- * a flyweight pattern*/
- if (ProxyUtils.isDynamic(component.getClass()) && !alreadyWovenInRequest(component.toString())) {
- /*once it was tainted we have to recreate all the time*/
- component = (UIComponent) ProxyUtils.getWeaver().reloadScriptingInstance(component);
- alreadyWovenInRequest(component.toString());
- }
- return component;
+ * the class is not recycled all the time in the creation
+ * code, in the renderer we do it on method base
+ * due to the fact that our renderers are recycled via
+ * a flyweight pattern*/
+ return (UIComponent) reloadInstance(component);
}
public Iterator<String> getComponentTypes() {
@@ -387,6 +369,7 @@
public Validator createValidator(String s) throws FacesException {
weaveDelegate();
+
Validator retVal = _delegate.createValidator(s);
if (ProxyUtils.isDynamic(retVal.getClass()) && !Proxy.isProxyClass(retVal.getClass())) {
retVal = (Validator) ProxyUtils.createMethodReloadingProxyFromObject(retVal, Validator.class);
@@ -429,6 +412,10 @@
//be enough for behavior replacements on the user side, which this mechanism should
//cover for now
boolean isDynamic = ProxyUtils.isDynamic(retVal.getClass());
+ //TODO Check how often the behavior is really created if only once
+ //we have to operate over reloading proxies nevertheless
+ //the add and remove behavior listeners being protected might
+ //be a showstopper because we cannot provide the same in our proxies
if (!isDynamic) {
return retVal;
} else if (retVal instanceof BehaviorBase) {
@@ -455,7 +442,7 @@
@Override
public UIComponent createComponent(ValueExpression valueExpression, FacesContext facesContext, String s, String s1) {
weaveDelegate();
- return _delegate.createComponent(valueExpression, facesContext, s, s1);
+ return (UIComponent) reloadInstance(_delegate.createComponent(valueExpression, facesContext, s, s1));
}
@Override
@@ -490,15 +477,7 @@
public ResourceHandler getResourceHandler() {
weaveDelegate();
ResourceHandler retVal = _delegate.getResourceHandler();
- if (ProxyUtils.isDynamic(retVal.getClass())) {
- //we use a proxy here to limit the reloads to some central
- //points which have a lower calling frequency which is high enough
- //to get it reloaded upon every request, but which should not drag
- //down the entire system speedwise
- retVal = (ResourceHandler) new ResourceHandlerProxy(retVal);
- setResourceHandler(retVal);
- }
- return retVal;
+ return (ResourceHandler) reloadInstance(retVal);
}
@Override
@@ -543,12 +522,31 @@
_delegate.unsubscribeFromEvent(aClass, systemEventListener);
}
- public ApplicationProxy(Application delegate) {
- _delegate = delegate;
- }
-
public Object getDelegate() {
return _delegate; //To change body of implemented methods use File | Settings | File Templates.
}
+
+ private final Object reloadInstance(Object instance) {
+ if (instance == null) {
+ return null;
+ }
+ if (ProxyUtils.isDynamic(instance.getClass()) && !alreadyWovenInRequest(instance.toString())) {
+ instance = ProxyUtils.getWeaver().reloadScriptingInstance(instance);
+ alreadyWovenInRequest(instance.toString());
+ }
+ return instance;
+ }
+
+
+ private final boolean alreadyWovenInRequest(String clazz) {
+ //portlets now can be enabled thanks to the jsf2 indirections regarding the external context
+ Map<String, Object> req = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
+ if (req.get(ScriptingConst.SCRIPTING_REQUSINGLETON + clazz) == null) {
+ req.put(ScriptingConst.SCRIPTING_REQUSINGLETON + clazz, "");
+ return false;
+ }
+ return true;
+ }
+
}
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java?rev=813787&r1=813786&r2=813787&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java Fri Sep 11 11:58:43 2009
@@ -38,10 +38,9 @@
* @author Werner Punz
*/
public class ELResolverProxy extends ELResolver implements Decorated {
- Log log = LogFactory.getLog(ELResolverProxy.class);
-
- //Map reinstantiated = new HashMap();
+ Log log = LogFactory.getLog(ELResolverProxy.class);
+ ELResolver _delegate = null;
public Object getValue(ELContext elContext, final Object base, final Object property) throws NullPointerException, PropertyNotFoundException, ELException {
@@ -94,7 +93,6 @@
_delegate = delegate;
}
- ELResolver _delegate = null;
public Object getDelegate() {
return _delegate; //To change body of implemented methods use File | Settings | File Templates.
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/LifefcycleProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/LifefcycleProxy.java?rev=813787&r1=813786&r2=813787&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/LifefcycleProxy.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/LifefcycleProxy.java Fri Sep 11 11:58:43 2009
@@ -33,7 +33,7 @@
*/
public class LifefcycleProxy extends Lifecycle implements Decorated {
- // GroovyWeaver ProxyUtils.getWeaver() = ProxyUtils.getWeaver();
+ Lifecycle _delegate = null;
private void weaveDelegate() {
if(_delegate != null)
@@ -74,7 +74,6 @@
_delegate.render(facesContext);
}
- Lifecycle _delegate = null;
public Object getDelegate() {
return _delegate; //To change body of implemented methods use File | Settings | File Templates.
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/NavigationHandlerProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/NavigationHandlerProxy.java?rev=813787&r1=813786&r2=813787&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/NavigationHandlerProxy.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/NavigationHandlerProxy.java Fri Sep 11 11:58:43 2009
@@ -31,6 +31,8 @@
*/
public class NavigationHandlerProxy extends NavigationHandler implements Decorated {
+ NavigationHandler _delegate;
+
private void weaveDelegate() {
_delegate = (NavigationHandler) ProxyUtils.getWeaver().reloadScriptingInstance(_delegate);
}
@@ -45,7 +47,7 @@
_delegate.handleNavigation(facesContext, s, s1);
}
- NavigationHandler _delegate;
+
public Object getDelegate() {
return _delegate; //To change body of implemented methods use File | Settings | File Templates.
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java?rev=813787&r1=813786&r2=813787&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java Fri Sep 11 11:58:43 2009
@@ -33,32 +33,16 @@
import java.io.OutputStream;
import java.util.Iterator;
import java.util.Map;
-import javax.servlet.ServletRequest;
/**
* Weaving renderkit which
* acts as a proxy factory for
- * our internal reloading renerers
+ * our internal reloading referers
*
* @author Werner Punz
*/
public class RenderkitProxy extends RenderKit implements Decorated {
-
- private void weaveDelegate() {
- _delegate = (RenderKit) ProxyUtils.getWeaver().reloadScriptingInstance(_delegate);
- }
-
- private boolean alreadyWovenInRequest(String clazz) {
- //portlets now can be enabled thanks to the jsf2 indirections regarding the external context
- Map<String, Object> req = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
- if (req.get(ScriptingConst.SCRIPTING_REQUSINGLETON + clazz) == null) {
- req.put(ScriptingConst.SCRIPTING_REQUSINGLETON + clazz, "");
- return false;
- }
- return true;
- }
-
RenderKit _delegate = null;
@@ -66,26 +50,18 @@
_delegate = delegate;
}
+
public void addRenderer(String s, String s1, Renderer renderer) {
weaveDelegate();
- if (ProxyUtils.isDynamic(renderer.getClass()) && !alreadyWovenInRequest(renderer.toString())) {
- renderer = (Renderer) ProxyUtils.getWeaver().reloadScriptingInstance(renderer);
- alreadyWovenInRequest(renderer.toString());
- }
-
+ //wo do it brute force here because we have sometimes casts and hence cannot rely on proxies
+ //renderers itself are flyweight patterns which means they are shared over objects
+ renderer = (Renderer) reloadInstance(renderer);
_delegate.addRenderer(s, s1, renderer);
}
public Renderer getRenderer(String s, String s1) {
weaveDelegate();
- Renderer retVal = _delegate.getRenderer(s, s1);
-
- if (retVal != null && ProxyUtils.isDynamic(retVal.getClass()) && !alreadyWovenInRequest(retVal.toString())) {
- retVal = (Renderer) ProxyUtils.getWeaver().reloadScriptingInstance(retVal);
- alreadyWovenInRequest(retVal.toString());
- _delegate.addRenderer(s, s1, retVal);
- }
- return retVal;
+ return (Renderer) reloadInstance(_delegate.getRenderer(s, s1));
}
public ResponseStateManager getResponseStateManager() {
@@ -95,25 +71,28 @@
public ResponseWriter createResponseWriter(Writer writer, String s, String s1) {
weaveDelegate();
- return _delegate.createResponseWriter(writer, s, s1);
+ return (ResponseWriter) reloadInstance(_delegate.createResponseWriter(writer, s, s1));
}
public ResponseStream createResponseStream(OutputStream outputStream) {
weaveDelegate();
- return _delegate.createResponseStream(outputStream);
+ return (ResponseStream) reloadInstance( _delegate.createResponseStream(outputStream));
}
//TODO add full support for myfaces 2.0 here
@Override
- public void addClientBehaviorRenderer(String s, ClientBehaviorRenderer clientBehaviorRenderer) {
+ public void addClientBehaviorRenderer(String s, ClientBehaviorRenderer renderer) {
+
weaveDelegate();
- _delegate.addClientBehaviorRenderer(s, clientBehaviorRenderer);
+ renderer = (ClientBehaviorRenderer) reloadInstance(renderer);
+ _delegate.addClientBehaviorRenderer(s, renderer);
}
+
@Override
public ClientBehaviorRenderer getClientBehaviorRenderer(String s) {
weaveDelegate();
- return _delegate.getClientBehaviorRenderer(s);
+ return (ClientBehaviorRenderer) reloadInstance(_delegate.getClientBehaviorRenderer(s));
}
@Override
@@ -135,6 +114,34 @@
}
public Object getDelegate() {
- return _delegate; //To change body of implemented methods use File | Settings | File Templates.
+ return _delegate;
}
+
+
+ private final void weaveDelegate() {
+ _delegate = (RenderKit) ProxyUtils.getWeaver().reloadScriptingInstance(_delegate);
+ }
+
+ private final Object reloadInstance(Object instance) {
+ if(instance == null) {
+ return null;
+ }
+ if (ProxyUtils.isDynamic(instance.getClass()) && !alreadyWovenInRequest(instance.toString())) {
+ instance = ProxyUtils.getWeaver().reloadScriptingInstance(instance);
+ alreadyWovenInRequest(instance.toString());
+ }
+ return instance;
+ }
+
+
+ private final boolean alreadyWovenInRequest(String clazz) {
+ //portlets now can be enabled thanks to the jsf2 indirections regarding the external context
+ Map<String, Object> req = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
+ if (req.get(ScriptingConst.SCRIPTING_REQUSINGLETON + clazz) == null) {
+ req.put(ScriptingConst.SCRIPTING_REQUSINGLETON + clazz, "");
+ return false;
+ }
+ return true;
+ }
+
}