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 2012/03/15 14:06:22 UTC

svn commit: r1300967 - in /myfaces/extensions/scripting/trunk: extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/ extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/j...

Author: werpu
Date: Thu Mar 15 13:06:21 2012
New Revision: 1300967

URL: http://svn.apache.org/viewvc?rev=1300967&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-155 fixing a proxy issue with ext-val, fixing an issue with the dynamic class detection, some classes were loaded upfront with a different classloader which is a non issue, but needs to be taken into consideration

Modified:
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicDecorators/implementations/RenderkitProxy.java
    myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/pom.xml
    myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService.groovy
    myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService2.groovy
    myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/test/TestRenderer.groovy
    myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestComponent.java
    myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestRenderer1.java
    myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestRenderer2.java

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java?rev=1300967&r1=1300966&r2=1300967&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java Thu Mar 15 13:06:21 2012
@@ -25,6 +25,7 @@ import org.apache.myfaces.extensions.scr
 import org.apache.myfaces.extensions.scripting.core.engine.api.ClassScanner;
 import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
 import org.apache.myfaces.extensions.scripting.core.engine.api.ScriptingEngine;
+import org.apache.myfaces.extensions.scripting.core.engine.dependencyScan.loaders.ScannerClassloader;
 import org.apache.myfaces.extensions.scripting.core.loader.ThrowAwayClassloader;
 import org.apache.myfaces.extensions.scripting.core.monitor.ClassResource;
 import org.apache.myfaces.extensions.scripting.core.monitor.WatchedResource;
@@ -350,7 +351,8 @@ public class WeavingContext
 
     public boolean isDynamic(Class clazz)
     {
-        return clazz.getClassLoader() instanceof ThrowAwayClassloader;
+        return ((clazz.getClassLoader() instanceof ThrowAwayClassloader) || (clazz.getClassLoader() instanceof
+            ScannerClassloader));
     }
 
     /**

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicDecorators/implementations/RenderkitProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicDecorators/implementations/RenderkitProxy.java?rev=1300967&r1=1300966&r2=1300967&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicDecorators/implementations/RenderkitProxy.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/dynamicDecorators/implementations/RenderkitProxy.java Thu Mar 15 13:06:21 2012
@@ -18,7 +18,6 @@
  */
 package org.apache.myfaces.extensions.scripting.jsf.dynamicDecorators.implementations;
 
-
 import org.apache.myfaces.extensions.scripting.core.api.Decorated;
 import org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
 import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
@@ -31,6 +30,7 @@ import javax.faces.render.Renderer;
 import javax.faces.render.ResponseStateManager;
 import java.io.OutputStream;
 import java.io.Writer;
+import java.lang.reflect.Field;
 import java.util.Iterator;
 
 /**
@@ -40,16 +40,18 @@ import java.util.Iterator;
  *
  * @author Werner Punz
  */
-public class    RenderkitProxy extends RenderKit implements Decorated
+public class RenderkitProxy extends RenderKit implements Decorated
 {
 
     RenderKit _delegate = null;
 
-    public RenderkitProxy(RenderKit delegate) {
+    public RenderkitProxy(RenderKit delegate)
+    {
         _delegate = delegate;
     }
 
-    public void addRenderer(String componentFamily, String rendererType, Renderer renderer) {
+    public void addRenderer(String componentFamily, String rendererType, Renderer renderer)
+    {
         weaveDelegate();
         //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
@@ -59,23 +61,100 @@ public class    RenderkitProxy extends R
         _delegate.addRenderer(componentFamily, rendererType, renderer);
     }
 
-    public Renderer getRenderer(String componentFamily, String rendererType) {
+    /**
+     * unproxy renderer from different systems
+     *
+     * @return
+     */
+    private Renderer unproxy(Renderer proxiedObject)
+    {
+        Renderer oldProxiedObject = proxiedObject;
+        try
+        {
+            //extval
+
+            String name = proxiedObject.getClass().getName();
+            while (name.contains("ExtVal") && (name.contains("Wrapper") || name.contains("Proxy")))
+            {
+                Field proxiedField = proxiedObject.getClass().getDeclaredField("wrapped");
+                proxiedField.setAccessible(true);
+                proxiedObject = (Renderer) proxiedField.get(proxiedObject);
+
+                name = proxiedObject.getClass().getName();
+            }
+
+            // "getWrapped");
+        }
+        catch (IllegalAccessException e)
+        {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+        catch (NoSuchFieldException e)
+        {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File
+            // Templates.
+        }
+        return proxiedObject;
+    }
+
+    private Renderer proxy(Renderer proxy, Renderer toBeProxied)
+    {
+            Renderer oldProxiedObject = proxy;
+           try
+           {
+               //extval
+   
+               String name = proxy.getClass().getName();
+               while (name.contains("ExtVal") && (name.contains("Wrapper") || name.contains("Proxy")))
+               {
+                   Field proxiedField = proxy.getClass().getDeclaredField("wrapped");
+                   proxiedField.setAccessible(true);
+                   oldProxiedObject = proxy;
+                   proxy = (Renderer) proxiedField.get(proxy);
+                   name = proxy.getClass().getName();
+                   if(!name.contains("ExtVal") && !(name.contains("Wrapper") || name.contains("Proxy"))) {
+                       proxiedField.set(oldProxiedObject, proxy);
+                       return proxy;
+                   }
+
+               }
+           }
+           catch (IllegalAccessException e)
+           {
+               e.printStackTrace();
+           }
+           catch (NoSuchFieldException e)
+           {
+               e.printStackTrace();
+           }
+           return  toBeProxied;
+    }
+    public Renderer getRenderer(String componentFamily, String rendererType)
+    {
         weaveDelegate();
         Renderer rendr = _delegate.getRenderer(componentFamily, rendererType);
-        Renderer rendr2 = (Renderer) reloadInstance(rendr, ScriptingConst.ARTIFACT_TYPE_RENDERER);
-        if (rendr != rendr2) {
+        Renderer unproxiedRendr = unproxy(rendr);
+        if(unproxiedRendr.getClass().getName().contains("JavaTestRenderer1")) {
+            System.out.println("Debugpoint found");
+        }
+        //TODO extval proxy handling here
+        Renderer rendr2 = (Renderer) reloadInstance(unproxiedRendr, ScriptingConst.ARTIFACT_TYPE_RENDERER);
+        if (unproxiedRendr != rendr2)
+        {
             Renderer tempRenderer = _delegate.getRenderer(componentFamily, rendererType);
             /**<></>if (tempRenderer instanceof PurgedRenderer) {
-                return handleAnnotationChange(componentFamily, rendererType);
-            } */
-
+             return handleAnnotationChange(componentFamily, rendererType);
+             } */
+            //in case of a renderer proxy we have to weave the original object back in
+            rendr2 = proxy(rendr ,rendr2);
             _delegate.addRenderer(componentFamily, rendererType, rendr2);
             return rendr2;
         }
         return rendr;
     }
 
-    private ClientBehaviorRenderer handleAnnotationChangeBehaviorRenderer(String s) {
+    private ClientBehaviorRenderer handleAnnotationChangeBehaviorRenderer(String s)
+    {
         ClientBehaviorRenderer rendr2;
 
         rendr2 = _delegate.getClientBehaviorRenderer(s);
@@ -86,7 +165,8 @@ public class    RenderkitProxy extends R
         return rendr2;
     }
 
-    private Renderer handleAnnotationChange(String s, String s1) {
+    private Renderer handleAnnotationChange(String s, String s1)
+    {
         Renderer rendr2;
 
         //WeavingContext.getWeaver().fullClassScan();
@@ -98,23 +178,27 @@ public class    RenderkitProxy extends R
         return rendr2;
     }
 
-    public ResponseStateManager getResponseStateManager() {
+    public ResponseStateManager getResponseStateManager()
+    {
         weaveDelegate();
         return _delegate.getResponseStateManager();
     }
 
-    public ResponseWriter createResponseWriter(Writer writer, String s, String s1) {
+    public ResponseWriter createResponseWriter(Writer writer, String s, String s1)
+    {
         weaveDelegate();
         return (ResponseWriter) reloadInstance(_delegate.createResponseWriter(writer, s, s1), ScriptingConst.ARTIFACT_TYPE_RESPONSEWRITER);
     }
 
-    public ResponseStream createResponseStream(OutputStream outputStream) {
+    public ResponseStream createResponseStream(OutputStream outputStream)
+    {
         weaveDelegate();
         return (ResponseStream) reloadInstance(_delegate.createResponseStream(outputStream), ScriptingConst.ARTIFACT_TYPE_RESPONSESTREAM);
     }
 
     @Override
-    public void addClientBehaviorRenderer(String s, ClientBehaviorRenderer renderer) {
+    public void addClientBehaviorRenderer(String s, ClientBehaviorRenderer renderer)
+    {
 
         weaveDelegate();
         renderer = (ClientBehaviorRenderer) reloadInstance(renderer, ScriptingConst.ARTIFACT_TYPE_CLIENTBEHAVIORRENDERER);
@@ -122,11 +206,13 @@ public class    RenderkitProxy extends R
     }
 
     @Override
-    public ClientBehaviorRenderer getClientBehaviorRenderer(String s) {
+    public ClientBehaviorRenderer getClientBehaviorRenderer(String s)
+    {
         weaveDelegate();
         ClientBehaviorRenderer rendr = _delegate.getClientBehaviorRenderer(s);
         ClientBehaviorRenderer rendr2 = (ClientBehaviorRenderer) reloadInstance(rendr, ScriptingConst.ARTIFACT_TYPE_CLIENTBEHAVIORRENDERER);
-        if (rendr != rendr2) {
+        if (rendr != rendr2)
+        {
 
             rendr2 = _delegate.getClientBehaviorRenderer(s);
             /*<>if (rendr2 instanceof PurgedClientBehaviorRenderer) {
@@ -138,36 +224,44 @@ public class    RenderkitProxy extends R
     }
 
     @Override
-    public Iterator<String> getClientBehaviorRendererTypes() {
+    public Iterator<String> getClientBehaviorRendererTypes()
+    {
         weaveDelegate();
         return _delegate.getClientBehaviorRendererTypes();
     }
 
     @Override
-    public Iterator<String> getComponentFamilies() {
+    public Iterator<String> getComponentFamilies()
+    {
         weaveDelegate();
         return _delegate.getComponentFamilies();
     }
 
     @Override
-    public Iterator<String> getRendererTypes(String s) {
+    public Iterator<String> getRendererTypes(String s)
+    {
         weaveDelegate();
         return _delegate.getRendererTypes(s);
     }
 
-    public Object getDelegate() {
+    public Object getDelegate()
+    {
         return _delegate;
     }
 
-    private void weaveDelegate() {
+    private void weaveDelegate()
+    {
         _delegate = (RenderKit) WeavingContext.getInstance().reload(_delegate, ScriptingConst.ARTIFACT_TYPE_RENDERKIT);
     }
 
-    private Object reloadInstance(Object instance, int artefactType) {
-        if (instance == null) {
+    private Object reloadInstance(Object instance, int artefactType)
+    {
+        if (instance == null)
+        {
             return null;
         }
-        if (WeavingContext.getInstance().isDynamic(instance.getClass()) ) {
+        if (WeavingContext.getInstance().isDynamic(instance.getClass()))
+        {
             instance = WeavingContext.getInstance().reload(instance, artefactType);
             //now the add should be done properly if possible
         }

Modified: myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/pom.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/pom.xml?rev=1300967&r1=1300966&r2=1300967&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/pom.xml (original)
+++ myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/pom.xml Thu Mar 15 13:06:21 2012
@@ -113,33 +113,31 @@
              and/or MyFaces ext-val
          -->
 
-        
         <dependency>
             <groupId>org.apache.myfaces.extensions.validator</groupId>
             <artifactId>myfaces-extval-core</artifactId>
             <version>${extval.version}</version>
         </dependency>
-
-        <!--
+       <!--
         <dependency>
             <groupId>org.apache.myfaces.extensions.validator.validation-modules</groupId>
             <artifactId>myfaces-extval-property-validation</artifactId>
             <version>${extval.version}</version>
         </dependency>
         -->
-        
         <dependency>
             <groupId>org.apache.myfaces.extensions.validator.validation-modules</groupId>
             <artifactId>myfaces-extval-bean-validation</artifactId>
             <version>${extval.version}</version>
         </dependency>
 
-        
+
         <dependency>
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate-validator</artifactId>
             <version>4.0.0.GA</version>
         </dependency>
+
         <!-- Hibernate annotations needs sl4j as dependency -->
         <dependency>
             <groupId>org.slf4j</groupId>

Modified: myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService.groovy
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService.groovy?rev=1300967&r1=1300966&r2=1300967&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService.groovy (original)
+++ myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService.groovy Thu Mar 15 13:06:21 2012
@@ -26,7 +26,6 @@ import javax.faces.bean.ManagedBean
 
 @ManagedBean(name = "blogService")
 @ApplicationScoped
-
 public class BlogService {
   List blogEntries = new ArrayList()
 
@@ -36,7 +35,7 @@ public class BlogService {
 
   public void addEntry2(BlogEntry entry) {
     Logger log = Logger.getLogger(BlogService.class.getName())
-    log.info("Adding entry 2, topic: " + entry.topic)
+    log.info("Adding entry 2, topic:" + entry.topic)
 
     blogEntries.add(entry)
 

Modified: myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService2.groovy
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService2.groovy?rev=1300967&r1=1300966&r2=1300967&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService2.groovy (original)
+++ myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService2.groovy Thu Mar 15 13:06:21 2012
@@ -22,6 +22,8 @@ import java.util.logging.Logger
 import javax.faces.bean.ManagedBean
 import javax.faces.bean.ApplicationScoped
 
+
+
 public class BlogService2 {
   List blogEntries = new ArrayList()
 
@@ -32,7 +34,7 @@ public class BlogService2 {
 
   public void addEntry(def entry) {
     Logger log = Logger.getLogger(BlogService.class.getName())
-    log.info("Adding entry, topic xxx: " + entry.topic)
+    log.info("------Adding entry, topic: " + entry.topic)
     entry.topic = "topic from blogservice 2"
     blogEntries.add(entry)
 

Modified: myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/test/TestRenderer.groovy
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/test/TestRenderer.groovy?rev=1300967&r1=1300966&r2=1300967&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/test/TestRenderer.groovy (original)
+++ myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/test/TestRenderer.groovy Thu Mar 15 13:06:21 2012
@@ -36,9 +36,9 @@ public class TestRenderer extends HtmlTe
 
 
     facesContext.responseWriter.write """
-            <h1>Hello from a groovy JSF components renderer </h1>
+            <h1>Hello from a groovy JSF components renderer</h1>
 
-            <p> you can find my sources under WEB-INF/groovy/... </p>
+            <p> you can find my sources under WEB-INF/groovy/...</p>
 
             <p> you can edit the artefacts is running</p>
             <p> I will pick up the changes after you have hit the reload button </p>

Modified: myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestComponent.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestComponent.java?rev=1300967&r1=1300966&r2=1300967&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestComponent.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestComponent.java Thu Mar 15 13:06:21 2012
@@ -22,6 +22,7 @@ import org.apache.myfaces.javaloader.oth
 
 import javax.faces.component.UIInput;
 import javax.faces.component.FacesComponent;
+import javax.faces.component.UIOutput;
 
 /**
  * @author Werner Punz (latest modification by $Author$)
@@ -34,7 +35,7 @@ import javax.faces.component.FacesCompon
  */
 
 @FacesComponent("at.irian.JavaTestComponent")
-public class JavaTestComponent extends UIInput implements Markable {
+public class JavaTestComponent extends UIOutput implements Markable {
 
     String _testAttr;
 

Modified: myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestRenderer1.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestRenderer1.java?rev=1300967&r1=1300966&r2=1300967&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestRenderer1.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestRenderer1.java Thu Mar 15 13:06:21 2012
@@ -48,7 +48,7 @@ public class JavaTestRenderer1 extends H
         JavaTestComponent myComponent = (JavaTestComponent) component;
 
         ResponseWriter writer = context.getResponseWriter();
-        writer.write("<h3>Renderer Demo Java Renderer 1</h3>");
+        writer.write("<h3>Renderer Demo Java Renderer 1 aaa</h3>");
         //uncomment for demo 1
         test(myComponent, writer);
 

Modified: myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestRenderer2.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestRenderer2.java?rev=1300967&r1=1300966&r2=1300967&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestRenderer2.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/JavaTestRenderer2.java Thu Mar 15 13:06:21 2012
@@ -24,6 +24,7 @@ import org.apache.myfaces.extensions.scr
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
+import javax.faces.render.FacesRenderer;
 import java.io.IOException;
 
 /**
@@ -33,7 +34,6 @@ import java.io.IOException;
  *          This renderer can act as a drag and drop target for the annotation
  *          set in JavaTestRenderer1
  */
-
 public class JavaTestRenderer2 extends HtmlTextareaRendererBase {
 
     private static final String MSG = "<h2> Hello world ccc from Renderer 2 </h2>";