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/01/15 17:47:24 UTC

svn commit: r899700 - in /myfaces/extensions/scripting/trunk: core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/ core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/ examples/myfaces20-example/src/main/we...

Author: werpu
Date: Fri Jan 15 16:47:23 2010
New Revision: 899700

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

fixes for jsf2 improved annotation handling now in place

Modified:
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/ScannerClassloader.java
    myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/GenericAnnotationScanner.java
    myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/renderer/JavaTestRenderer1.java
    myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean2.java
    myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean3.java

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/ScannerClassloader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/ScannerClassloader.java?rev=899700&r1=899699&r2=899700&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/ScannerClassloader.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/ScannerClassloader.java Fri Jan 15 16:47:23 2010
@@ -1,5 +1,7 @@
 package org.apache.myfaces.scripting.loaders.java;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.myfaces.scripting.core.util.ClassUtils;
 import org.apache.myfaces.scripting.core.util.FileUtils;
 import org.apache.myfaces.scripting.core.util.WeavingContext;
@@ -10,26 +12,24 @@
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.InputStream;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
 /**
  * A specialized non tainting classloader for our scanners
+ *
  */
 public class ScannerClassloader extends ClassLoader {
 
     File tempDir = null;
-    int _scriptingEngine;
-    String _engineExtension;
 
-    static Map<String, Class> _alreadyScanned = new HashMap<String, Class>();
+    Map<String, Class> _alreadyScanned = new HashMap<String, Class>();
 
     public ScannerClassloader(ClassLoader classLoader, int scriptingEngine, String engineExtension, File tempDir) {
         super(classLoader);
 
         this.tempDir = tempDir;
-        _scriptingEngine = scriptingEngine;
-        _engineExtension = engineExtension;
     }
 
     @Override
@@ -103,5 +103,9 @@
         }
 
     }
+
+
+
+
 }
 

Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/GenericAnnotationScanner.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/GenericAnnotationScanner.java?rev=899700&r1=899699&r2=899700&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/GenericAnnotationScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/GenericAnnotationScanner.java Fri Jan 15 16:47:23 2010
@@ -24,6 +24,8 @@
 import org.apache.myfaces.scripting.api.ScriptingWeaver;
 import org.apache.myfaces.scripting.core.util.WeavingContext;
 import org.apache.myfaces.scripting.loaders.groovy.GroovyScriptingWeaver;
+import org.apache.myfaces.scripting.loaders.java.RecompiledClassLoader;
+import org.apache.myfaces.scripting.loaders.java.ScannerClassloader;
 import org.apache.myfaces.scripting.refresh.ReloadingMetadata;
 
 import javax.faces.context.FacesContext;
@@ -49,7 +51,6 @@
 
     ScriptingWeaver _weaver = null;
 
-
     public GenericAnnotationScanner() {
         initDefaultListeners();
     }
@@ -63,7 +64,6 @@
         _sourcePaths.addFirst(sourcePath);
     }
 
-
     Collection<java.lang.annotation.Annotation> filterAnnotations(java.lang.annotation.Annotation[] anns) {
         List<java.lang.annotation.Annotation> retVal = new ArrayList<java.lang.annotation.Annotation>(anns.length);
         if (anns == null) {
@@ -117,28 +117,47 @@
         }
 
         for (String className : _weaver.loadPossibleDynamicClasses()) {
-            Class clazz = _weaver.loadScriptingClassFromName(className);
-            //called already by loadScriptingClassFromName
-
+            //TODO replace the standard scanner with our Scanning one here
 
-            //TODO unify this, problem is due to the initial class dependency scan
-            //we already have the classes but unlike in groovy they are not tainted
-            //hence we do not have the annotations yet scanned
-            //in groovy we have the initial scan not done hence
-            //the annotations are scanned on the fly!
-            if (clazz != null ) {
-                java.lang.annotation.Annotation[] anns = clazz.getAnnotations();
-                if (anns != null && anns.length > 0) {
-                    addOrMoveAnnotations(clazz);
+            //TODO we need another loader here which adds the meta information if not present to our
+            //managed beans
+            try {
+                ScannerClassloader loader = new ScannerClassloader(Thread.currentThread().getContextClassLoader(), -1, null, RecompiledClassLoader.tempDir);
+
+                Class clazz = null;
+                //in case the class does not exist we have to load it from our weavingcontext
+                //otherwise we do just a scan on the class to avoid side behavior
+                if (WeavingContext.getFileChangedDaemon().getClassMap().get(className) == null) {
+                    clazz = _weaver.loadScriptingClassFromName(className);
                 } else {
-                    removeAnnotations(clazz);
+                    clazz = loader.loadClass(className);
                 }
+
+                //TODO we have the problem here that this code
+                //in the worst case resets the class
+                //that causes a problem with our bean refreshes afterwards
+                //which have to take care of the problem
+
+                //TODO unify this, problem is due to the initial class dependency scan
+                //we already have the classes but unlike in groovy they are not tainted
+                //hence we do not have the annotations yet scanned
+                //in groovy we have the initial scan not done hence
+                //the annotations are scanned on the fly!
+                if (clazz != null) {
+                    java.lang.annotation.Annotation[] anns = clazz.getAnnotations();
+                    if (anns != null && anns.length > 0) {
+                        addOrMoveAnnotations(clazz);
+                    } else {
+                        removeAnnotations(clazz);
+                    }
+                }
+            } catch (ClassNotFoundException e) {
+                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
             }
         }
 
     }
 
-
     /**
      * add or moves a class level annotation
      * to a new place
@@ -185,7 +204,6 @@
         }
     }
 
-
     private void annotationMoved(Class clazz, java.lang.annotation.Annotation ann, AnnotationScanListener listener) {
         //case class exists but it has been moved to anoter annotation
         String registeredAnnotation = _registeredAnnotations.get(clazz.getName());
@@ -194,7 +212,6 @@
         }
     }
 
-
     public void clearListeners() {
         _listeners.clear();
     }

Modified: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/renderer/JavaTestRenderer1.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/renderer/JavaTestRenderer1.java?rev=899700&r1=899699&r2=899700&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/renderer/JavaTestRenderer1.java (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/renderer/JavaTestRenderer1.java Fri Jan 15 16:47:23 2010
@@ -42,8 +42,8 @@
  * the annotation is dynamic you can change it on the fly or move it from one
  * class to the other
  */
-
 @FacesRenderer(componentFamily = "javax.faces.Input", rendererType = "at.irian.JavaTestRenderer")
+
 public class JavaTestRenderer1 extends HtmlTextRendererBase {
 
     static Log log = LogFactory.getLog(JavaTestRenderer1.class);

Modified: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean2.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean2.java?rev=899700&r1=899699&r2=899700&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean2.java (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean2.java Fri Jan 15 16:47:23 2010
@@ -12,11 +12,9 @@
 import java.io.InputStreamReader;
 import java.io.IOException;
 
-
 public class TestBean2 {
 
-
-    String sayHello = "hello world test";
+    String sayHello = "hello world test xxx";
     String hello2 = "hello from added attribute";
     String hello3 = "hello from  added attribute 2";
  

Modified: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean3.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean3.java?rev=899700&r1=899699&r2=899700&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean3.java (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean3.java Fri Jan 15 16:47:23 2010
@@ -25,8 +25,9 @@
 
 
     
+
+    
     private String myText() {
-        
         return "Hello World from bean3";
     }