https://issues.apache.org/jira/browse/EXTSCRIPT-157 eliminating the scanner classloader
git-svn-id: https://svn.apache.org/repos/asf/myfaces/extensions/scripting/trunk@1302408 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java
index 1dbbae7..25ff4bf 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java
@@ -25,7 +25,6 @@
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;
@@ -351,8 +350,8 @@
public boolean isDynamic(Class clazz)
{
- return ((clazz.getClassLoader() instanceof ThrowAwayClassloader) || (clazz.getClassLoader() instanceof
- ScannerClassloader));
+ return (clazz.getClassLoader() instanceof ThrowAwayClassloader)/*<> || (clazz.getClassLoader() instanceof
+ ScannerClassloader))*/;
}
/**
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/BaseScanner.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/BaseScanner.java
index 5db635a..922b231 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/BaseScanner.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/BaseScanner.java
@@ -25,8 +25,8 @@
import org.apache.myfaces.extensions.scripting.core.engine.dependencyScan.StandardDependencyScanner;
import org.apache.myfaces.extensions.scripting.core.engine.dependencyScan.api.DependencyScanner;
import org.apache.myfaces.extensions.scripting.core.engine.dependencyScan.filter.WhitelistFilter;
-import org.apache.myfaces.extensions.scripting.core.engine.dependencyScan.loaders.ScannerClassloader;
import org.apache.myfaces.extensions.scripting.core.engine.dependencyScan.registry.ExternalFilterDependencyRegistry;
+import org.apache.myfaces.extensions.scripting.core.loader.ThrowAwayClassloader;
import java.security.AccessController;
import java.security.PrivilegedActionException;
@@ -106,13 +106,19 @@
{
try
{
- return AccessController.doPrivileged(new PrivilegedExceptionAction<ScannerClassloader>()
+ return AccessController.doPrivileged(new PrivilegedExceptionAction<ThrowAwayClassloader>()
{
- public ScannerClassloader run()
+ /*<> public ScannerClassloader run()
{
return new ScannerClassloader(Thread.currentThread().getContextClassLoader(), getEngineType(),
getFileEnding(), WeavingContext.getInstance().getConfiguration().getCompileTarget());
+ }*/
+
+ public ThrowAwayClassloader run()
+ {
+ return new ThrowAwayClassloader(Thread.currentThread().getContextClassLoader(),false);
}
+
});
}
catch (PrivilegedActionException e)
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/dependencyScan/loaders/ScannerClassloader.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/dependencyScan/loaders/ScannerClassloader.java
index 92a7860..0246ecb 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/dependencyScan/loaders/ScannerClassloader.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/dependencyScan/loaders/ScannerClassloader.java
@@ -30,8 +30,10 @@
/**
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
+ *
+ * TODO replace it with the ThrowAwayLoader
*/
-
+@Deprecated
public class ScannerClassloader extends ClassLoader
{
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/loader/ThrowAwayClassloader.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/loader/ThrowAwayClassloader.java
index f9a4391..c37738e 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/loader/ThrowAwayClassloader.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/loader/ThrowAwayClassloader.java
@@ -38,7 +38,13 @@
{
static final Logger _logger = Logger.getLogger(ThrowAwayClassloader.class.getName());
-
+ boolean _untaint = true;
+ public ThrowAwayClassloader(ClassLoader classLoader, boolean untaint)
+ {
+ super(classLoader);
+ _untaint = untaint;
+ }
+
public ThrowAwayClassloader(ClassLoader classLoader)
{
super(classLoader);
@@ -105,9 +111,11 @@
//TODO we might run into issues here with inner classes
Class retVal;
if (res != null) {
- retVal = (new ThrowAwayClassloader(getParent())).defineClass(className, fileContent, 0, fileLength);
- res.setAClass(retVal);
- res.setTainted(false);
+ retVal = (new ThrowAwayClassloader(getParent(),_untaint)).defineClass(className, fileContent, 0, fileLength);
+ if(_untaint) {
+ res.setAClass(retVal);
+ res.setTainted(false);
+ }
} else {
retVal = super.defineClass(className, fileContent, 0, fileLength);
}
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java
index 95a6e7c..6138d7e 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java
@@ -162,6 +162,10 @@
tainted = value;
}
+ public void setTainted(boolean value, boolean noLog)
+ {
+ tainted = value;
+ }
/**
* @return true if the source file has been modified compared to its classfile
*/
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/GenericAnnotationScanner.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/GenericAnnotationScanner.java
index 25d8619..15ec148 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/GenericAnnotationScanner.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/annotation/GenericAnnotationScanner.java
@@ -22,8 +22,9 @@
import org.apache.myfaces.extensions.scripting.core.api.ClassScanListener;
import org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
+import org.apache.myfaces.extensions.scripting.core.common.util.ClassUtils;
import org.apache.myfaces.extensions.scripting.core.engine.api.ClassScanner;
-import org.apache.myfaces.extensions.scripting.core.engine.dependencyScan.loaders.ScannerClassloader;
+import org.apache.myfaces.extensions.scripting.core.loader.ThrowAwayClassloader;
import javax.faces.context.FacesContext;
import java.util.*;
@@ -118,8 +119,12 @@
try {
if(!_weaver.isTainted(className)) continue;
- ScannerClassloader loader = new ScannerClassloader(Thread.currentThread().getContextClassLoader(),
- -1, null, _weaver.getConfiguration().getCompileTarget());
+ //TODO replace this with a direct call to our weavingContext
+ //<>ScannerClassloader loader = new ScannerClassloader(Thread.currentThread().getContextClassLoader(),
+ // -1, null, _weaver.getConfiguration().getCompileTarget());
+ ThrowAwayClassloader loader = new ThrowAwayClassloader(ClassUtils.getContextClassLoader(), false);
+
+
Class clazz;
//in case the class does not exist we have to load it from our weavingcontext
diff --git a/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService.groovy b/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService.groovy
index f164bd6..c21d1fa 100644
--- a/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService.groovy
+++ b/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService.groovy
@@ -22,7 +22,8 @@
import javax.faces.bean.ApplicationScoped
import javax.faces.bean.ManagedBean
-
+@ManagedBean(name = "blogService")
+@ApplicationScoped
public class BlogService {
List blogEntries = new ArrayList()
diff --git a/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService2.groovy b/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService2.groovy
index a7d59fc..675b9d9 100644
--- a/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService2.groovy
+++ b/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/groovy/org/apache/myfaces/groovyloader/blog/BlogService2.groovy
@@ -24,8 +24,7 @@
-@ManagedBean(name = "blogService")
-@ApplicationScoped
+
public class BlogService2 {
List blogEntries = new ArrayList()
diff --git a/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/validatorConverterTest/TestConverter1.java b/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/validatorConverterTest/TestConverter1.java
index 6d679d5..c588408 100644
--- a/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/validatorConverterTest/TestConverter1.java
+++ b/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/validatorConverterTest/TestConverter1.java
@@ -30,7 +30,6 @@
*
* A simple test converter which can be changed on the fly
*/
-@FacesConverter(value = "at.irian.CustomConverter")
public class TestConverter1 implements Converter {
public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
return value;
diff --git a/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/validatorConverterTest/TestConverter2.java b/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/validatorConverterTest/TestConverter2.java
index 8c9f953..6a1106c 100644
--- a/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/validatorConverterTest/TestConverter2.java
+++ b/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/validatorConverterTest/TestConverter2.java
@@ -28,7 +28,7 @@
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
*/
-
+@FacesConverter(value = "at.irian.CustomConverter")
public class TestConverter2 implements Converter {
public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
return "hello from converter 2";
diff --git a/src/site/xdoc/installation.xml b/src/site/xdoc/installation.xml
index 604d95e..077f4c9 100644
--- a/src/site/xdoc/installation.xml
+++ b/src/site/xdoc/installation.xml
@@ -192,8 +192,8 @@
</p>
<p>you can obtain both jars after the build from:
<ul>
- <li><yourbuilderoot>/extscript-bundles/xtscript-myfaces12-bundle/target/extscript-myfaces12-bundle-1.0-SNAPSHOT.jar</li>
- <li><yourbuilderoot>/extscript-bundles/xtscript-myfaces12-bundle/target/extscript-myfaces20-bundle-1.0-SNAPSHOT.jar</li>
+ <li><yourbuilderoot>/extscript-bundles/extscript-myfaces12-bundle/target/extscript-myfaces12-bundle-1.0-SNAPSHOT.jar</li>
+ <li><yourbuilderoot>/extscript-bundles/extscript-myfaces20-bundle/target/extscript-myfaces20-bundle-1.0-SNAPSHOT.jar</li>
</ul>
</p>
<p>After having done that you are ready to setup the rest of the Ext-Scripting configuration manually as