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>