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/12/25 15:24:14 UTC
svn commit: r893856 - in /myfaces/extensions/scripting/trunk:
core/core/src/main/groovy/org/apache/myfaces/groovyloader/core/
core/core/src/main/java/org/apache/myfaces/scripting/api/
core/core/src/main/java/org/apache/myfaces/scripting/core/ core/core...
Author: werpu
Date: Fri Dec 25 14:24:13 2009
New Revision: 893856
URL: http://svn.apache.org/viewvc?rev=893856&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-39
integration of the class dependency scanning into the startup process
Added:
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanListener.java (with props)
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanner.java (contents, props changed)
- copied, changed from r892981, myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanner.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/ClassScanStrategy.java (with props)
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java (with props)
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/util/PackageStrategy.java (with props)
Removed:
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanner.java
Modified:
myfaces/extensions/scripting/trunk/core/core/src/main/groovy/org/apache/myfaces/groovyloader/core/GroovyWeaver.groovy
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanListener.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BaseWeaver.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingWeaver.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/CoreWeaver.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/DummyWeaver.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/FileChangedDaemon.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/StartupServletContextPluginChainLoader.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/GenericAnnotationScanner.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/startup/IntialScanAnnotationListener.java
myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/web.xml
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/groovy/org/apache/myfaces/groovyloader/core/GroovyWeaver.groovy
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/groovy/org/apache/myfaces/groovyloader/core/GroovyWeaver.groovy?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/groovy/org/apache/myfaces/groovyloader/core/GroovyWeaver.groovy (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/groovy/org/apache/myfaces/groovyloader/core/GroovyWeaver.groovy Fri Dec 25 14:24:13 2009
@@ -18,19 +18,16 @@
*/
package org.apache.myfaces.groovyloader.core
-import org.apache.myfaces.groovyloader.core.Groovy2GroovyObjectReloadingProxy
import org.apache.myfaces.scripting.api.ScriptingConst
import org.apache.myfaces.scripting.api.ScriptingWeaver
import org.codehaus.groovy.runtime.InvokerHelper
import org.apache.myfaces.scripting.api.BaseWeaver
import org.apache.myfaces.scripting.loaders.groovy.DynamicClassIdentifier
-import org.apache.myfaces.scripting.api.BaseWeaver
-import org.apache.myfaces.scripting.refresh.FileChangedDaemon
+
import org.apache.myfaces.scripting.core.util.WeavingContext
-import org.apache.myfaces.groovyloader.core.GroovyGlobalReloadingStrategy
-import org.apache.myfaces.scripting.api.AnnotationScanner
-import org.apache.myfaces.scripting.core.util.Cast
-import org.apache.myfaces.scripting.core.util.ReflectUtil
+
+import org.apache.myfaces.scripting.api.ClassScanner
+
import org.apache.myfaces.scripting.core.util.ClassUtils
/**
@@ -52,7 +49,7 @@
static ThreadLocal _groovyClassLoaderHolder = new ThreadLocal();
DynamicClassIdentifier identifier = new DynamicClassIdentifier()
- AnnotationScanner _scanner = null;
+ ClassScanner _scanner = null;
@@ -75,7 +72,7 @@
Class[] params = new Class[1];
params[0] = ScriptingWeaver.class;
this._scanner = scanner.getConstructor(params).newInstance(this);
- //this._scanner = (AnnotationScanner) ReflectUtil.instantiate(scanner, params);
+ //this._scanner = (ClassScanner) ReflectUtil.instantiate(scanner, params);
} catch (ClassNotFoundException e) {
//we do nothing here
@@ -165,7 +162,7 @@
}
- public void fullAnnotationScan() {
+ public void fullClassScan() {
if (_scanner == null) {
return;
}
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanListener.java?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanListener.java Fri Dec 25 14:24:13 2009
@@ -30,7 +30,7 @@
* meta data in the correct registry entries
*/
-public interface AnnotationScanListener {
+public interface AnnotationScanListener extends ClassScanListener {
/**
* returns true if the annotation marked by the incoming parameter is supported by this scanner
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BaseWeaver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BaseWeaver.java?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BaseWeaver.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BaseWeaver.java Fri Dec 25 14:24:13 2009
@@ -244,7 +244,7 @@
return null;
}
- public void fullAnnotationScan() {
+ public void fullClassScan() {
}
@@ -277,6 +277,7 @@
private void recompileRefresh() {
fullRecompile();
+
refreshAllManagedBeans();
}
Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanListener.java?rev=893856&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanListener.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanListener.java Fri Dec 25 14:24:13 2009
@@ -0,0 +1,11 @@
+package org.apache.myfaces.scripting.api;
+
+/**
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ * <p/>
+ * We use a code artefact observer here to register the
+ * meta data in the correct registry entries
+ */
+public interface ClassScanListener {
+}
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanListener.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Copied: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanner.java (from r892981, myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanner.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanner.java?p2=myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanner.java&p1=myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanner.java&r1=892981&r2=893856&rev=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/AnnotationScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanner.java Fri Dec 25 14:24:13 2009
@@ -4,20 +4,20 @@
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
* <p/>
- * Generic annotation scanner interface
- * which is a helper to plug in external annotation scanners
- * as adapters for the annotation handling
+ * Generic class scanner interface
+ * which is a helper to plug in external scanners
+ * as adapters for the annotation and dependency handling
* we cannot deal with annotations directly in the core
* because we are bound by the jsf 1.2 lower threshold limit
* hence this indirection
*/
-public interface AnnotationScanner {
+public interface ClassScanner {
public void scanPaths();
public void clearListeners();
- public void addListener(AnnotationScanListener listener);
+ public void addListener(ClassScanListener listener);
public void addScanPath(String scanPath);
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanner.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ClassScanner.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingWeaver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingWeaver.java?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingWeaver.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingWeaver.java Fri Dec 25 14:24:13 2009
@@ -102,7 +102,7 @@
* full annotation scan
* at startup once the system is initialized
*/
- public void fullAnnotationScan();
+ public void fullClassScan();
/**
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/CoreWeaver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/CoreWeaver.java?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/CoreWeaver.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/CoreWeaver.java Fri Dec 25 14:24:13 2009
@@ -110,9 +110,9 @@
return null;
}
- public void fullAnnotationScan() {
+ public void fullClassScan() {
for (ScriptingWeaver weaver : _weavers) {
- weaver.fullAnnotationScan();
+ weaver.fullClassScan();
}
}
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/DummyWeaver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/DummyWeaver.java?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/DummyWeaver.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/DummyWeaver.java Fri Dec 25 14:24:13 2009
@@ -65,7 +65,7 @@
return this; //To change body of implemented methods use File | Settings | File Templates.
}
- public void fullAnnotationScan() {
+ public void fullClassScan() {
}
public void fullRecompile() {
Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/ClassScanStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/ClassScanStrategy.java?rev=893856&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/ClassScanStrategy.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/ClassScanStrategy.java Fri Dec 25 14:24:13 2009
@@ -0,0 +1,38 @@
+package org.apache.myfaces.scripting.core.dependencyScan;
+
+import org.apache.myfaces.scripting.core.util.ClassUtils;
+import org.apache.myfaces.scripting.core.util.Strategy;
+import org.apache.myfaces.scripting.core.util.WeavingContext;
+
+import java.io.File;
+import java.util.Set;
+import java.util.regex.Matcher;
+
+/**
+ * A scan strategy for scanning class files within our api
+ */
+public class ClassScanStrategy implements Strategy {
+ Set<String> _whiteList;
+ DependencyScanner _scanner;
+ String _rootDir;
+
+
+ public ClassScanStrategy(String rootDir, Set<String> whiteList, DependencyScanner scanner) {
+ this._scanner = scanner;
+ this._rootDir = rootDir;
+ this._whiteList = whiteList;
+ }
+
+ public void apply(Object element) {
+ File foundFile = (File) element;
+ String fileName = foundFile.getName().toLowerCase();
+ if (!fileName.endsWith(".class")) return;
+
+ String className = ClassUtils.relativeFileToClassName(fileName.substring(_rootDir.length() + 1));
+ Set<String> classDependencies = _scanner.fetchDependencies(className, _whiteList);
+
+ WeavingContext.getFileChangedDaemon().getDependencyMap().addDependencies(className, classDependencies);
+ }
+
+
+}
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/ClassScanStrategy.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/ClassScanStrategy.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java?rev=893856&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java Fri Dec 25 14:24:13 2009
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.scripting.loaders.java;
+
+import org.apache.myfaces.scripting.api.ClassScanListener;
+import org.apache.myfaces.scripting.api.ClassScanner;
+import org.apache.myfaces.scripting.api.ScriptingWeaver;
+import org.apache.myfaces.scripting.core.dependencyScan.ClassScanStrategy;
+import org.apache.myfaces.scripting.core.dependencyScan.DefaultDependencyScanner;
+import org.apache.myfaces.scripting.core.dependencyScan.DependencyScanner;
+import org.apache.myfaces.scripting.core.util.FileUtils;
+import org.apache.myfaces.scripting.core.util.Strategy;
+import org.apache.myfaces.scripting.core.util.WeavingContext;
+import org.apache.myfaces.scripting.loaders.java.util.PackageStrategy;
+
+import java.io.File;
+import java.util.*;
+
+/**
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ * <p/>
+ * A dependency scanner which utilizes the scan infrastructure
+ * from the core
+ */
+public class JavaDependencyScanner implements ClassScanner {
+
+ List<String> _scanPaths = new LinkedList<String>();
+ DependencyScanner dependencyScanner = new DefaultDependencyScanner();
+
+ ScriptingWeaver _weaver;
+
+
+ public JavaDependencyScanner(ScriptingWeaver weaver) {
+ this._weaver = weaver;
+ }
+
+ public synchronized void scanPaths() {
+ Set<String> possibleDynamicClasses = new HashSet<String>(_weaver.loadPossibleDynamicClasses());
+ //TODO we have to probably set the context classloader upfront
+ //otherwise the classes are not found
+ try {
+ for (String dynamicClass : possibleDynamicClasses) {
+ Set<String> referrers = dependencyScanner.fetchDependencies(dynamicClass, possibleDynamicClasses);
+ WeavingContext.getFileChangedDaemon().getDependencyMap().addDependencies(dynamicClass, referrers);
+ }
+ } finally {
+
+ }
+ }
+
+
+ public void clearListeners() {
+ }
+
+ public void addListener(ClassScanListener listener) {
+
+ }
+
+ public void addScanPath(String scanPath) {
+ _scanPaths.add(scanPath);
+ }
+
+ public synchronized void scanClass(Class clazz) {
+ //not needed anymore since we only rely on full scans and full recompile now
+ }
+}
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java Fri Dec 25 14:24:13 2009
@@ -18,22 +18,16 @@
*/
package org.apache.myfaces.scripting.loaders.java;
-import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.myfaces.scripting.api.*;
import org.apache.myfaces.scripting.core.util.*;
-import org.apache.myfaces.scripting.refresh.FileChangedDaemon;
-import org.apache.myfaces.scripting.refresh.ReloadingMetadata;
-import org.apache.myfaces.config.element.ManagedBean;
-import org.apache.myfaces.config.RuntimeConfig;
//import org.apache.myfaces.scripting.loaders.java.jsr199.ReflectCompilerFacade;
import javax.servlet.ServletContext;
import javax.faces.context.FacesContext;
import java.io.File;
import java.io.Serializable;
-import java.lang.reflect.InvocationTargetException;
import java.util.*;
/**
@@ -63,7 +57,9 @@
private static final String JSR199_COMPILER = "org.apache.myfaces.scripting.loaders.java.jsr199.JSR199Compiler";
private static final String JAVA5_COMPILER = "org.apache.myfaces.scripting.loaders.java.jdk5.CompilerFacade";
- AnnotationScanner _scanner = null;
+ ClassScanner _annotationScanner = null;
+ ClassScanner _dependencyScanner = null;
+
DynamicCompiler compiler = null;
/**
@@ -77,20 +73,24 @@
//url classloader at the time myfaces is initialized
try {
Class scanner = ClassUtils.getContextClassLoader().loadClass("org.apache.myfaces.scripting.jsf2.annotation.GenericAnnotationScanner");
- this._scanner = (AnnotationScanner) ReflectUtil.instantiate(scanner, new Cast(ScriptingWeaver.class, this));
-
+ this._annotationScanner = (ClassScanner) ReflectUtil.instantiate(scanner, new Cast(ScriptingWeaver.class, this));
+
} catch (ClassNotFoundException e) {
//we do nothing here
}
+ this._dependencyScanner = new JavaDependencyScanner(this);
+
+
}
@Override
public void appendCustomScriptPath(String scriptPath) {
super.appendCustomScriptPath(scriptPath);
- if (_scanner != null) {
- _scanner.addScanPath(scriptPath);
+ if (_annotationScanner != null) {
+ _annotationScanner.addScanPath(scriptPath);
}
+ _dependencyScanner.addScanPath(scriptPath);
}
public JavaScriptingWeaver() {
@@ -110,7 +110,7 @@
@Override
protected Class loadScriptingClassFromFile(String sourceRoot, String file) {
//we load the scripting class from the given className
-
+
File currentClassFile = new File(sourceRoot + File.separator + file);
if (!currentClassFile.exists()) {
return null;
@@ -131,7 +131,7 @@
}
retVal = compiler.compileFile(sourceRoot, classPath, file);
- if(retVal == null) {
+ if (retVal == null) {
return retVal;
}
} catch (ClassNotFoundException e) {
@@ -154,8 +154,8 @@
* //we only deal with class level reloading here
* //the deregistration notification should happen on artefact level (which will be the next subtask)
*/
- if (_scanner != null && retVal != null) {
- _scanner.scanClass(retVal);
+ if (_annotationScanner != null && retVal != null) {
+ _annotationScanner.scanClass(retVal);
}
return retVal;
@@ -183,11 +183,15 @@
/**
* full scan, scans for all artefacts in all files
*/
- public void fullAnnotationScan() {
- if (_scanner == null) {
+ public void fullClassScan() {
+ _dependencyScanner.scanPaths();
+
+ if (_annotationScanner == null) {
return;
}
- _scanner.scanPaths();
+
+ _annotationScanner.scanPaths();
+
}
public void fullRecompile() {
Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/util/PackageStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/util/PackageStrategy.java?rev=893856&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/util/PackageStrategy.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/util/PackageStrategy.java Fri Dec 25 14:24:13 2009
@@ -0,0 +1,63 @@
+package org.apache.myfaces.scripting.loaders.java.util;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.myfaces.scripting.core.util.Strategy;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ * <p/>
+ * Java strategy pattern to filter out all fully qualified classes
+ * under a given dir (excluding the inner classes)
+ */
+
+public class PackageStrategy
+ implements Strategy
+
+{
+ String rootDir = "";
+ Set<String> _foundFiles;
+ Pattern rePattern;
+
+
+ public PackageStrategy(Set<String> target, String pattern) {
+ pattern = pattern.trim().replaceAll("\\.", "\\\\.");
+ pattern = "." + pattern;
+
+ _foundFiles = target;
+
+ rePattern = Pattern.compile(pattern);
+
+ }
+
+ //only directories with classes in it apply to be valid
+ //namespaces!
+
+ public void apply(Object element) {
+ File foundFile = (File) element;
+ String fileName = foundFile.getName().toLowerCase();
+ Matcher matcher = rePattern.matcher(fileName);
+
+ if (!matcher.matches()) return;
+
+ if (!foundFile.isDirectory()) {
+ String relativePath = foundFile.getPath().substring(rootDir.length() + 1);
+ relativePath = FilenameUtils.separatorsToUnix(relativePath);
+ _foundFiles.add(relativePath.replaceAll("\\/", "."));
+ }
+ }
+
+ public Set<String> getFoundFiles() {
+ return _foundFiles;
+ }
+
+ public void setFoundFiles(Set<String> foundFiles) {
+ _foundFiles = foundFiles;
+ }
+}
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/util/PackageStrategy.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/util/PackageStrategy.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/FileChangedDaemon.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/FileChangedDaemon.java?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/FileChangedDaemon.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/FileChangedDaemon.java Fri Dec 25 14:24:13 2009
@@ -22,6 +22,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.myfaces.scripting.api.ScriptingConst;
import org.apache.myfaces.scripting.api.ScriptingWeaver;
+import org.apache.myfaces.scripting.core.dependencyScan.ClassDependencies;
import java.io.File;
import java.util.*;
@@ -43,6 +44,8 @@
static FileChangedDaemon instance = null;
Map<String, ReloadingMetadata> classMap = new ConcurrentHashMap<String, ReloadingMetadata>(8, 0.75f, 1);
+ ClassDependencies dependencyMap = new ClassDependencies();
+
/**
* this map is a shortcut for the various scripting engines
@@ -163,5 +166,9 @@
public void setWeavers(ScriptingWeaver weavers) {
_weavers = weavers;
}
+
+ public ClassDependencies getDependencyMap() {
+ return dependencyMap;
+ }
}
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/StartupServletContextPluginChainLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/StartupServletContextPluginChainLoader.java?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/StartupServletContextPluginChainLoader.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/StartupServletContextPluginChainLoader.java Fri Dec 25 14:24:13 2009
@@ -60,6 +60,7 @@
WeavingContext.setRefreshContext(rContext);
log.info("[EXT-SCRIPTING] Compiling all sources for the first time");
weaver.requestRefresh();
+ weaver.fullClassScan();
//TODO do a first full recompile here at startup time before the bean etc... instantiation can kick in
}
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java Fri Dec 25 14:24:13 2009
@@ -339,7 +339,7 @@
weaveDelegate();
if (converterClass.equals(PurgedConverter.class.getName())) {
//purged case we do a full rescane
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
Converter componentToChange = _delegate.createConverter(converterId);
if (componentToChange instanceof PurgedConverter) {
//Null not allowed here, but we set a purted converter to make
@@ -418,7 +418,7 @@
weaveDelegate();
if (validatorClass.equals(PurgedValidator.class.getName())) {
//purged case we do a full rescane
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
Validator componentToChange = _delegate.createValidator(validatorId);
if (componentToChange instanceof PurgedValidator) {
//Null not allowed here, but we set a purted validator to make
@@ -460,7 +460,7 @@
if (behaviorClass.equals(PurgedValidator.class.getName())) {
//purged case we do a full rescane
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
Behavior behavior = (Behavior) _delegate.createBehavior(behaviorId);
_behaviors.put(behaviorId, behaviorClass);
if (behavior instanceof PurgedBehavior) {
@@ -618,7 +618,7 @@
_delegate.setResourceHandler(resourceHandler);
ResourceHandler handler = _delegate.getResourceHandler();
if (handler instanceof PurgedResourceHandler) {
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
}
}
@@ -676,7 +676,7 @@
private UIComponent handeAnnotationChange(UIComponent oldComponent, ValueExpression valueExpression, FacesContext facesContext, String componentType) {
UIComponent componentToChange = _delegate.createComponent(valueExpression, facesContext, componentType);
if (componentToChange instanceof PurgedComponent) {
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
//via an additional create component we can check whether a purged component
//was registered after the reload because the annotation has been removed
componentToChange = _delegate.createComponent(valueExpression, facesContext, componentType);
@@ -691,7 +691,7 @@
private UIComponent handeAnnotationChange(UIComponent oldComponent, String componentType) {
UIComponent componentToChange = _delegate.createComponent(componentType);
if (componentToChange instanceof PurgedComponent) {
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
//via an additional create component we can check whether a purged component
//was registered after the reload because the annotation has been removed
componentToChange = _delegate.createComponent(componentType);
@@ -704,7 +704,7 @@
private UIComponent handeAnnotationChange(UIComponent oldComponent, ValueBinding valueBinding, FacesContext context, String componentType) {
UIComponent componentToChange = _delegate.createComponent(valueBinding, context, componentType);
if (componentToChange instanceof PurgedComponent) {
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
//via an additional create component we can check whether a purged component
//was registered after the reload because the annotation has been removed
componentToChange = _delegate.createComponent(valueBinding, context, componentType);
@@ -717,7 +717,7 @@
private UIComponent handeAnnotationChange(UIComponent oldComponent, FacesContext context, Resource resource) {
UIComponent componentToChange = _delegate.createComponent(context, resource);
if (componentToChange instanceof PurgedComponent) {
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
//via an additional create component we can check whether a purged component
//was registered after the reload because the annotation has been removed
componentToChange = _delegate.createComponent(context, resource);
@@ -730,7 +730,7 @@
private UIComponent handeAnnotationChange(UIComponent oldComponent, FacesContext context, String componentType, String rendererType) {
UIComponent componentToChange = _delegate.createComponent(context, componentType, rendererType);
if (componentToChange instanceof PurgedComponent) {
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
//via an additional create component we can check whether a purged component
//was registered after the reload because the annotation has been removed
componentToChange = _delegate.createComponent(context, componentType, rendererType);
@@ -744,7 +744,7 @@
UIComponent componentToChange = _delegate.createComponent(valueExpression, facesContext, s, s1);
String family = oldComponent.getFamily();
if (componentToChange instanceof PurgedComponent) {
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
//via an additional create component we can check whether a purged component
//was registered after the reload because the annotation has been removed
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java Fri Dec 25 14:24:13 2009
@@ -88,7 +88,7 @@
_delegate.setValue(elContext, base, property, null);
//we only trigger this if the bean was deregistered, we now can reregister it again
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
newRetVal = _delegate.getValue(elContext, base, property);
}
}
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/RenderkitProxy.java Fri Dec 25 14:24:13 2009
@@ -81,7 +81,7 @@
private ClientBehaviorRenderer handleAnnotationChangeBehaviorRenderer(String s) {
ClientBehaviorRenderer rendr2;
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
rendr2 = _delegate.getClientBehaviorRenderer(s);
if (rendr2 instanceof PurgedClientBehaviorRenderer) {
throw new FacesException("Renderer not found");
@@ -93,7 +93,7 @@
private Renderer handleAnnotationChange(String s, String s1) {
Renderer rendr2;
- WeavingContext.getWeaver().fullAnnotationScan();
+ WeavingContext.getWeaver().fullClassScan();
rendr2 = _delegate.getRenderer(s, s1);
if (rendr2 instanceof PurgedRenderer) {
throw new FacesException("Renderer not found");
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=893856&r1=893855&r2=893856&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 Dec 25 14:24:13 2009
@@ -19,7 +19,8 @@
package org.apache.myfaces.scripting.jsf2.annotation;
import org.apache.myfaces.scripting.api.AnnotationScanListener;
-import org.apache.myfaces.scripting.api.AnnotationScanner;
+import org.apache.myfaces.scripting.api.ClassScanListener;
+import org.apache.myfaces.scripting.api.ClassScanner;
import org.apache.myfaces.scripting.api.ScriptingWeaver;
import org.apache.myfaces.scripting.core.util.WeavingContext;
import org.apache.myfaces.scripting.refresh.ReloadingMetadata;
@@ -36,9 +37,9 @@
* wherever possible
*/
-public class GenericAnnotationScanner extends BaseAnnotationScanListener implements AnnotationScanner {
+public class GenericAnnotationScanner extends BaseAnnotationScanListener implements ClassScanner {
- List<AnnotationScanListener> _listeners = new LinkedList<AnnotationScanListener>();
+ List<ClassScanListener> _listeners = new LinkedList<ClassScanListener>();
Map<String, String> _registeredAnnotations = new HashMap<String, String>();
LinkedList<String> _sourcePaths = new LinkedList<String>();
@@ -53,14 +54,14 @@
public GenericAnnotationScanner(ScriptingWeaver weaver) {
_weaver = weaver;
- initDefaultListeners();
+ initDefaultListeners();
}
public void addScanPath(String sourcePath) {
_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) {
@@ -85,7 +86,7 @@
removeAnnotations(clazz);
}
}
-
+
private void initDefaultListeners() {
_listeners.add(new BeanImplementationListener());
_listeners.add(new BehaviorImplementationListener());
@@ -102,7 +103,7 @@
public void scanPaths() {
//TODO move this over to a binary scan system
//https://issues.apache.org/jira/browse/EXTSCRIPT-33
- for(String className : _weaver.loadPossibleDynamicClasses()) {
+ for (String className : _weaver.loadPossibleDynamicClasses()) {
Class clazz = _weaver.loadScriptingClassFromName(className);
//called already by loadScriptingClassFromName
/*if(clazz != null) {
@@ -115,7 +116,7 @@
}*/
}
- }
+ }
/**
@@ -127,7 +128,8 @@
private void addOrMoveAnnotations(Class clazz) {
java.lang.annotation.Annotation[] anns = clazz.getAnnotations();
for (java.lang.annotation.Annotation ann : anns) {
- for (AnnotationScanListener listener : _listeners) {
+ for (ClassScanListener cListener : _listeners) {
+ AnnotationScanListener listener = (AnnotationScanListener) cListener;
if (listener.supportsAnnotation(ann.annotationType().getName())) {
listener.register(clazz, ann);
@@ -152,7 +154,8 @@
private void removeAnnotations(Class clazz) {
String registeredAnnotation = _registeredAnnotations.get(clazz.getName());
if (registeredAnnotation != null) {
- for (AnnotationScanListener listener : _listeners) {
+ for (ClassScanListener cListener : _listeners) {
+ AnnotationScanListener listener = (AnnotationScanListener) cListener;
if (listener.supportsAnnotation(registeredAnnotation)) {
listener.purge(clazz.getName());
_registeredAnnotations.remove(clazz.getName());
@@ -163,8 +166,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());
@@ -178,7 +179,7 @@
_listeners.clear();
}
- public void addListener(AnnotationScanListener listener) {
+ public void addListener(ClassScanListener listener) {
_listeners.add(listener);
}
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/startup/IntialScanAnnotationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/startup/IntialScanAnnotationListener.java?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/startup/IntialScanAnnotationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/startup/IntialScanAnnotationListener.java Fri Dec 25 14:24:13 2009
@@ -51,6 +51,6 @@
weaver.fullRecompile();
//we now do a full source or precompiled annotation scan
//the entire scripting subsystem should be initialized by now
- weaver.fullAnnotationScan();
+ weaver.fullClassScan();
}
}
Modified: myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/web.xml?rev=893856&r1=893855&r2=893856&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/web.xml (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/web.xml Fri Dec 25 14:24:13 2009
@@ -45,7 +45,7 @@
<param-value>org.apache.myfaces.scripting.servlet.StartupServletContextPluginChainLoader</param-value>
</context-param>
- <!--
+
<context-param>
<description>Additional comma separated loader paths to allow direct editing on the sources directory instead
of the deployment dir
@@ -65,7 +65,7 @@
/Users/werpu2/development/workspace/extensions-scripting3/examples/myfaces12-example/src/main/webapp/WEB-INF/java
</param-value>
</context-param>
- -->
+
<!--
<context-param>
<description>Additional comma separated loader paths to allow direct editing on the sources directory instead