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/08/27 12:46:58 UTC

svn commit: r808361 - in /myfaces/extensions/scripting/trunk: core/src/main/groovy/org/apache/myfaces/groovyloader/core/ core/src/main/java/org/apache/myfaces/javaloader/core/ core/src/main/java/org/apache/myfaces/javaloader/core/jsr199/ core/src/main/...

Author: werpu
Date: Thu Aug 27 10:46:57 2009
New Revision: 808361

URL: http://svn.apache.org/viewvc?rev=808361&view=rev
Log:
first java reloading now working

https://issues.apache.org/jira/browse/EXTSCRIPT-5

Added:
    myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestClass2.java   (with props)
Modified:
    myfaces/extensions/scripting/trunk/core/src/main/groovy/org/apache/myfaces/groovyloader/core/GroovyWeaver.groovy
    myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/javaloader/core/JavaScriptingWeaver.java
    myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/javaloader/core/jsr199/CompilerFacade.java
    myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/api/DynamicCompiler.java
    myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/scratchpad/javaReloading/JavaReladingTest.java
    myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/scratchpad/jsr199/CompilerFacade.java
    myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java
    myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean.java
    myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/web.xml
    myfaces/extensions/scripting/trunk/examples/src/main/webapp/helloWorld.xhtml

Modified: myfaces/extensions/scripting/trunk/core/src/main/groovy/org/apache/myfaces/groovyloader/core/GroovyWeaver.groovy
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/src/main/groovy/org/apache/myfaces/groovyloader/core/GroovyWeaver.groovy?rev=808361&r1=808360&r2=808361&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/src/main/groovy/org/apache/myfaces/groovyloader/core/GroovyWeaver.groovy (original)
+++ myfaces/extensions/scripting/trunk/core/src/main/groovy/org/apache/myfaces/groovyloader/core/GroovyWeaver.groovy Thu Aug 27 10:46:57 2009
@@ -189,6 +189,7 @@
 
     public Class loadScriptingClassFromName(String className) {
         ReloadingMetadata metadata = classMap[className]
+
         if (metadata == null) {
             String groovyClass = className.replaceAll("\\.", File.separator) + ".groovy";
 
@@ -203,9 +204,11 @@
             }
 
         } else {
+            if(metadata.scriptingEngine != ScriptingConst.ENGINE_TYPE_GROOVY) {
+                return null;
+            }
             return reloadScriptingClass(metadata.aClass)
         }
-        return null
     }
 
     public void appendCustomScriptPath(String singlePath) {

Modified: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/javaloader/core/JavaScriptingWeaver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/javaloader/core/JavaScriptingWeaver.java?rev=808361&r1=808360&r2=808361&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/javaloader/core/JavaScriptingWeaver.java (original)
+++ myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/javaloader/core/JavaScriptingWeaver.java Thu Aug 27 10:46:57 2009
@@ -28,7 +28,9 @@
 import org.apache.myfaces.scripting.refresh.FileChangedDaemon;
 import org.apache.myfaces.scripting.refresh.ReloadingMetadata;
 
+import javax.servlet.ServletContext;
 import java.io.File;
+import java.io.FilenameFilter;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Iterator;
 import java.util.LinkedList;
@@ -49,7 +51,54 @@
      */
     List<String> scriptPaths = new LinkedList<String>();
     Log log = LogFactory.getLog(JavaScriptingWeaver.class);
+    String classPath = "";
 
+    /**
+         * helper to allow initial compiler classpath scanning
+         * @param servletContext
+         */
+    public JavaScriptingWeaver(ServletContext servletContext) {
+        super();
+        scanClasspath(servletContext);
+        //TODO move the directory scannint for the sources also in here
+    }
+
+    private void scanClasspath(ServletContext context) {
+        String webInf = context.getRealPath(File.separator+"WEB-INF");    
+        StringBuilder classPath = new StringBuilder(255);
+        File jarRoot = new File(webInf+File.separator+"lib");
+
+        classPath.append(webInf);
+        classPath.append(File.separator);
+        classPath.append("classes");
+        
+        if(jarRoot.exists()) {
+            log.info("Scanning paths for possible java compiler classpaths");
+            String [] fileNames = jarRoot.list(new FilenameFilter() {
+                public boolean accept(File dir,
+                      String name) {
+                      name = name.toLowerCase();
+                      name = name.trim();
+                      return name.endsWith(".jar") || name.endsWith(".zip");
+                }
+            });
+
+            for(String name: fileNames) {
+                classPath.append(File.pathSeparator);
+                classPath.append(webInf);
+                classPath.append(File.separator);
+                classPath.append("lib");
+                classPath.append(File.separator);
+                classPath.append(name);
+            }
+
+            this.classPath = classPath.toString();
+            //TODO also go one level up to scan for the lib dir of the ear container
+            //TODO add additional jar scan paths via configuration
+            //for now this should do it
+        }
+
+    }
 
     /**
      * add custom source lookup paths
@@ -132,7 +181,7 @@
      * condition which marks a metadata as reload candidate
      */
     private boolean isReloadCandidate(ReloadingMetadata reloadMeta) {
-        return reloadMeta != null && reloadMeta.getScriptingEngine() == ScriptingConst.ENGINE_TYPE_GROOVY && reloadMeta.isTaintedOnce();
+        return reloadMeta != null && reloadMeta.getScriptingEngine() == ScriptingConst.ENGINE_TYPE_JAVA && reloadMeta.isTaintedOnce();
     }
 
 
@@ -212,7 +261,7 @@
             //we initialize the compiler lazy
             //because the facade itself is lazy
             DynamicCompiler compiler = new CompilerFacade();
-            retVal = compiler.compileFile(sourceRoot, file);
+            retVal = compiler.compileFile(sourceRoot, classPath, file);
         } catch (ClassNotFoundException e) {
             //can be safely ignored
         }

Modified: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/javaloader/core/jsr199/CompilerFacade.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/javaloader/core/jsr199/CompilerFacade.java?rev=808361&r1=808360&r2=808361&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/javaloader/core/jsr199/CompilerFacade.java (original)
+++ myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/javaloader/core/jsr199/CompilerFacade.java Thu Aug 27 10:46:57 2009
@@ -1,11 +1,14 @@
 package org.apache.myfaces.javaloader.core.jsr199;
 
 import org.apache.myfaces.scripting.api.DynamicCompiler;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
 
 import javax.tools.*;
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.Arrays;
+import java.util.Locale;
 
 /**
  * A compiler facade encapsulating the JSR 199
@@ -86,15 +89,29 @@
     }
 
 
-    public Class compileFile(String sourceRoot, String filePath) throws ClassNotFoundException {
+    public Class compileFile(String sourceRoot, String classPath, String filePath) throws ClassNotFoundException {
         Iterable<? extends JavaFileObject> fileObjects = fileManager.getJavaFileObjects(sourceRoot + FILE_SEPARATOR + filePath);
 
         //TODO add the core jar from our lib dir
         //the compiler otherwise cannot find the file
-        String[] options = new String[]{"-d", tempDir.getAbsolutePath(), "-sourcepath", sourceRoot, "-g"};
+        String[] options = new String[]{"-cp",classPath,"-d", tempDir.getAbsolutePath(), "-sourcepath", sourceRoot, "-g"};
         compiler.getTask(null, fileManager, diagnosticCollector, Arrays.asList(options), null, fileObjects).call();
         //TODO collect the diagnostics and if an error was issued dump it on the log
         //and throw an unmanaged exeption which routes later on into myfaces
+        if(diagnosticCollector.getDiagnostics().size() > 0) {
+            Log log = LogFactory.getLog(this.getClass());
+            StringBuilder errors = new StringBuilder();
+            for (Diagnostic diagnostic : diagnosticCollector.getDiagnostics())  {
+                String error = "Error on line" +
+                                  diagnostic.getMessage(Locale.getDefault())+"------"+
+                                  diagnostic.getLineNumber()+" File:"+
+                                  diagnostic.getSource().toString();
+                log.error(error);
+                errors.append(error);
+
+            }
+            throw new ClassNotFoundException("Compile error of java file:"+errors.toString());
+        }
 
         ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
         if (!(oldClassLoader instanceof RecompiledJavaClassloader)) {

Modified: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/api/DynamicCompiler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/api/DynamicCompiler.java?rev=808361&r1=808360&r2=808361&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/api/DynamicCompiler.java (original)
+++ myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/api/DynamicCompiler.java Thu Aug 27 10:46:57 2009
@@ -35,5 +35,5 @@
      * @throws ClassNotFoundException in case of the class neither could be found
      * in our sources nor could be referenced in binary form from the classloader
      */
-    Class compileFile(String sourceRoot, String filePath) throws ClassNotFoundException;
+    Class compileFile(String sourceRoot, String classPath, String filePath) throws ClassNotFoundException;
 }

Modified: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/scratchpad/javaReloading/JavaReladingTest.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/scratchpad/javaReloading/JavaReladingTest.java?rev=808361&r1=808360&r2=808361&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/scratchpad/javaReloading/JavaReladingTest.java (original)
+++ myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/scratchpad/javaReloading/JavaReladingTest.java Thu Aug 27 10:46:57 2009
@@ -13,7 +13,7 @@
           // TempFileClassLoader classLoader = new TempFileClassLoader(Thread.currentThread().getContextClassLoader(), true, "/home/werpu/development/workspace/myfaces-groovy/core/src/main/java");
            DynamicCompiler compiler = new CompilerFacade();
            try {
-               Class clazz = compiler.compileFile("/home/werpu/development/workspace/myfaces-groovy/core/src/main/java","org/apache/myfaces/scripting/scratchpad/probes/TestClass.java");
+               Class clazz = compiler.compileFile("/home/werpu/development/workspace/myfaces-groovy/core/src/main/java","","org/apache/myfaces/scripting/scratchpad/probes/TestClass.java");
                ITestClass proxy = (ITestClass) clazz.newInstance();
                proxy.helloWorld();
                

Modified: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/scratchpad/jsr199/CompilerFacade.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/scratchpad/jsr199/CompilerFacade.java?rev=808361&r1=808360&r2=808361&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/scratchpad/jsr199/CompilerFacade.java (original)
+++ myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/scratchpad/jsr199/CompilerFacade.java Thu Aug 27 10:46:57 2009
@@ -86,10 +86,10 @@
     }
 
 
-    public Class compileFile(String sourceRoot, String filePath) throws ClassNotFoundException {
+    public Class compileFile(String sourceRoot, String classPath, String filePath) throws ClassNotFoundException {
         Iterable<? extends JavaFileObject> fileObjects = fileManager.getJavaFileObjects(sourceRoot + FILE_SEPARATOR + filePath);
 
-        String[] options = new String[]{"-d", tempDir.getAbsolutePath(), "-sourcepath", sourceRoot, "-g"};
+        String[] options = new String[]{"-cp",classPath,"-d", tempDir.getAbsolutePath(), "-sourcepath", sourceRoot, "-g"};
         compiler.getTask(null, fileManager, diagnosticCollector, Arrays.asList(options), null, fileObjects).call();
         //TODO collect the diagnostics and if an error was issued dump it on the log
         //and throw an unmanaged exeption which routes later on into myfaces

Modified: myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java?rev=808361&r1=808360&r2=808361&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java (original)
+++ myfaces/extensions/scripting/trunk/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java Thu Aug 27 10:46:57 2009
@@ -52,7 +52,7 @@
 
     public CustomChainLoader(ServletContext servletContext) {
         ScriptingWeaver groovyWeaver = new GroovyWeaver();
-        ScriptingWeaver javaWeaver = new JavaScriptingWeaver();
+        ScriptingWeaver javaWeaver = new JavaScriptingWeaver(servletContext);
 
         //this.scriptingWeaver = new GroovyWeaver();
 

Modified: myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean.java?rev=808361&r1=808360&r2=808361&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean.java (original)
+++ myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean.java Thu Aug 27 10:46:57 2009
@@ -4,14 +4,19 @@
 
 @ScriptingClass
 public class TestBean {
-    String sayHello = "hello world";
+    String sayHello = "hello worldgggg";
+    String hello2 = "hello from added attribute";
 
     public String getSayHello() {
-        return sayHello;
+        return "hello 1"+TestClass2.hello2;
+    }
+      public String getSayHello2() {
+        return hello2;
     }
 
     public void setSayHello(String hello) {
         this.sayHello = hello;
+        System.out.println("hello world");
     }
 
 }
\ No newline at end of file

Added: myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestClass2.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestClass2.java?rev=808361&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestClass2.java (added)
+++ myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestClass2.java Thu Aug 27 10:46:57 2009
@@ -0,0 +1,6 @@
+package org.apache.myfaces.javaloader.test;
+
+
+public class TestClass2 {
+    public static String hello2 = "hello world from testClass2";
+}
\ No newline at end of file

Propchange: myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestClass2.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestClass2.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/web.xml?rev=808361&r1=808360&r2=808361&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/web.xml (original)
+++ myfaces/extensions/scripting/trunk/examples/src/main/webapp/WEB-INF/web.xml Thu Aug 27 10:46:57 2009
@@ -59,8 +59,8 @@
         <param-name>org.apache.myfaces.scripting.java.LOADER_PATHS</param-name>
         <param-value>/home/werpu/development/workspace/scriptingextensions/examples/src/main/webapp/WEB-INF/java</param-value>
     </context-param>
-     -->
-
+    -->
+    
     <context-param>
         <description>State saving method: "client" or "server" (= default)
             See JSF Specification 2.5.3

Modified: myfaces/extensions/scripting/trunk/examples/src/main/webapp/helloWorld.xhtml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/src/main/webapp/helloWorld.xhtml?rev=808361&r1=808360&r2=808361&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/src/main/webapp/helloWorld.xhtml (original)
+++ myfaces/extensions/scripting/trunk/examples/src/main/webapp/helloWorld.xhtml Thu Aug 27 10:46:57 2009
@@ -23,7 +23,7 @@
                 <grv:testcomponent />
                 <h:message id="message1" for="input1" />
                 <h:outputFormat value="#{testbean.xxx}"/>
-               
+                <h:outputFormat value="#{javatestbean.sayHello}"/>
                         <h:commandButton value="Press me dynamic" action="#{testbean.doit}"/>
                         
             </h:panelGrid>