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:29:04 UTC
svn commit: r893858 - 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/dependency...
Author: werpu
Date: Fri Dec 25 14:29:03 2009
New Revision: 893858
URL: http://svn.apache.org/viewvc?rev=893858&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-39
java dependency scan in, but we introduced classloader issues by our changes in the last week
Added:
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/Configuration.java (with props)
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy_.java (contents, props changed)
- copied, changed from r893857, myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java
Removed:
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.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/BaseWeaver.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.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/dependencyScan/ClassDependencies.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DefaultDependencyScanner.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/util/WeavingContext.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.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/loaders/java/RecompiledClassLoader.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.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/refresh/ReloadingMetadata.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/ScriptingServletFilter.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/StartupServletContextPluginChainLoader.java
myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/DependencyScannerTest.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Blog.java
myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/BlogEntry.java
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=893858&r1=893857&r2=893858&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:29:03 2009
@@ -107,7 +107,7 @@
//we have to add the script path so that groovy can work out the kinks of other source files added
_groovyClassLoaderHolder.set(gcl)
- getScriptPaths().each {
+ WeavingContext.getConfiguration().getSourceDirs(ScriptingConst.ENGINE_TYPE_GROOVY).each {
gcl.addClasspath(it)
}
}
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=893858&r1=893857&r2=893858&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:29:03 2009
@@ -45,7 +45,7 @@
* only be set from the
* initialisation code so no thread safety needed
*/
- protected List<String> scriptPaths = new LinkedList<String>();
+
protected ReloadingStrategy _reloadingStrategy = null;
private static final String SCOPE_SESSION = "session";
@@ -73,7 +73,7 @@
scriptPath = scriptPath.substring(0, scriptPath.length() - 1);
}
- getScriptPaths().add(scriptPath);
+ WeavingContext.getConfiguration().addSourceDir(getScriptingEngine(), scriptPath);
}
@@ -164,7 +164,7 @@
String separator = FileUtils.getFileSeparatorForRegex();
String fileName = className.replaceAll("\\.", separator) + getFileEnding();
- for (String pathEntry : getScriptPaths()) {
+ for (String pathEntry : WeavingContext.getConfiguration().getSourceDirs(getScriptingEngine())) {
/**
* the reload has to be performed synchronized
@@ -189,7 +189,11 @@
}
//TODO move this into the classloader to cover dependend classes as well
+
protected void refreshReloadingMetaData(String sourceRoot, String file, File currentClassFile, Class retVal, int engineType) {
+ if(sourceRoot.endsWith(".java")) {
+ System.out.println("Debugpoint found");
+ }
ReloadingMetadata reloadingMetaData = new ReloadingMetadata();
reloadingMetaData.setAClass(retVal);
@@ -221,7 +225,7 @@
this.fileEnding = fileEnding;
}
- public int getScriptingEngine() {
+ public final int getScriptingEngine() {
return scriptingEngine;
}
@@ -234,9 +238,7 @@
public abstract boolean isDynamic(Class clazz);
- public List<String> getScriptPaths() {
- return scriptPaths;
- }
+
public ScriptingWeaver getWeaverInstance(Class weaverClass) {
if (getClass().equals(weaverClass)) return this;
@@ -277,7 +279,7 @@
private void recompileRefresh() {
fullRecompile();
-
+
refreshAllManagedBeans();
}
@@ -426,7 +428,7 @@
* @param bean
*/
private void removeBeanReferences(ManagedBean bean) {
- if(getLog().isInfoEnabled()) {
+ if (getLog().isInfoEnabled()) {
getLog().info("[EXT-SCRIPTING] JavaScriptingWeaver.removeBeanReferences(" + bean.getManagedBeanName() + ")");
}
@@ -465,7 +467,7 @@
*/
public Collection<String> loadPossibleDynamicClasses() {
- List<String> scriptPaths = getScriptPaths();
+ Collection<String> scriptPaths = WeavingContext.getConfiguration().getSourceDirs(getScriptingEngine());
List<String> retVal = new LinkedList<String>();
for (String scriptPath : scriptPaths) {
Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/Configuration.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/Configuration.java?rev=893858&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/Configuration.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/Configuration.java Fri Dec 25 14:29:03 2009
@@ -0,0 +1,41 @@
+package org.apache.myfaces.scripting.api;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.Map;
+import java.util.Collection;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * Configuration class keeping all the core elements of the configuration
+ * this class has to be thread save in its internal data structures!
+ * <p />
+ * since the end goal is that a single thread has to preinit the config
+ * we don«t have to synchronize its access!
+ * <p />
+ */
+public class Configuration {
+
+ Map<Integer, CopyOnWriteArrayList<String>> _sourceDirs = new ConcurrentHashMap<Integer, CopyOnWriteArrayList<String>>();
+ Map<Integer, String> _compileTarget = new ConcurrentHashMap<Integer, String>();
+
+ public Collection<String> getSourceDirs(int scriptingEngine) {
+ return _sourceDirs.get(scriptingEngine);
+ }
+
+ public void addSourceDir(int scriptingEngine, String sourceDir) {
+ CopyOnWriteArrayList dirs = _sourceDirs.get(scriptingEngine);
+ if (dirs == null) {
+ dirs = new CopyOnWriteArrayList();
+ _sourceDirs.put(scriptingEngine, dirs);
+ }
+ dirs.add(sourceDir);
+ }
+
+ public void addCompileTarget(int scriptingEngine, String target) {
+ _compileTarget.put(scriptingEngine, target);
+ }
+
+ public String getCompileTarget(int scriptingEngine) {
+ return _compileTarget.get(scriptingEngine);
+ }
+}
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/Configuration.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/Configuration.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java?rev=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java Fri Dec 25 14:29:03 2009
@@ -29,6 +29,7 @@
public static final String SCRIPTING_GROOVFACTORY = "org.apache.myfaces.SCRIPTING_GROOVYFACTORY";
public static final String SCRIPTING_REQUSINGLETON = "org.apache.myfaces.SCRIPTING_REQUSINGLETON";
+
public static final String RELOAD_MAP = "reloadMap";
public static final String SESS_BEAN_REFRESH_TIMER = "sessbeanrefrsh";
@@ -62,4 +63,5 @@
public static final int ARTEFACT_TYPE_CLIENTBEHAVIORRENDERER = 20;
public static final String CTX_REQUEST_CNT = "RequestCnt";
+ public static final String CTX_CONFIGURATION = "ExtScriptingConfig";
}
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=893858&r1=893857&r2=893858&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:29:03 2009
@@ -38,6 +38,7 @@
* appends a custom script search path to the original one
*
* @param scriptPaths
+ * @deprecates
*/
public void appendCustomScriptPath(String scriptPaths);
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/ClassDependencies.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/ClassDependencies.java?rev=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/ClassDependencies.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/ClassDependencies.java Fri Dec 25 14:29:03 2009
@@ -54,7 +54,7 @@
*
* @param clazz the referencing class to delete
*/
- public void removeReferencing(String clazz) {
+ public void removeReferrer(String clazz) {
List<String> emptyReferences = new ArrayList<String>(reverseIndex.size());
for (Map.Entry<String, Set<String>> entry : reverseIndex.entrySet()) {
Set<String> entrySet = entry.getValue();
@@ -69,8 +69,8 @@
}
- public Set<String> getReferencedClasses(String referencingClass) {
- return reverseIndex.get(referencingClass);
+ public Set<String> getReferringClasses(String referencedClass) {
+ return reverseIndex.get(referencedClass);
}
private final Set<String> getReverseDependencies(String dependency) {
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DefaultDependencyScanner.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DefaultDependencyScanner.java?rev=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DefaultDependencyScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DefaultDependencyScanner.java Fri Dec 25 14:29:03 2009
@@ -43,6 +43,8 @@
final ClassScanVisitor cp = new ClassScanVisitor();
Log log = LogFactory.getLog(this.getClass().getName());
+ public DefaultDependencyScanner() {
+ }
/**
* @param className
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/util/WeavingContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/util/WeavingContext.java?rev=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/util/WeavingContext.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/util/WeavingContext.java Fri Dec 25 14:29:03 2009
@@ -20,6 +20,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.scripting.api.Configuration;
import org.apache.myfaces.scripting.api.Decorated;
import org.apache.myfaces.scripting.api.ScriptingWeaver;
import org.apache.myfaces.scripting.core.DummyWeaver;
@@ -35,7 +36,7 @@
/**
* A set of weaving context class called
* by the various subsystems
- *
+ * <p/>
* TODO move this away from static methods into a singleton which is kept
* in the application context, to keep the context pattern.
*
@@ -59,21 +60,16 @@
* </p>
*/
static protected ThreadLocal _weaverHolder = new ThreadLocal();
-
- static protected ThreadLocal _eventProcessorHolder = new ThreadLocal();
-
- static protected ThreadLocal _externalContextHolder = new ThreadLocal();
-
static protected ThreadLocal _refreshContextHolder = new ThreadLocal();
+ static protected ThreadLocal _configuration = new ThreadLocal();
+ private static final String WARN_WEAVER_NOT_SET = "Scripting Weaver is not set. Disabling script reloading subsystem. Make sure you have the scripting servlet filter enabled in your web.xml";
-
public static void init() {
}
-
/**
* general shutdown clean
*/
@@ -89,19 +85,13 @@
return (RefreshContext) _refreshContextHolder.get();
}
- /**
- * fetches the generic request map if available
- *
- * @return the request map if available, null otherwise
- */
- public static Map<String, Object> getRequestAttributesMap() {
- FacesContext ctx = FacesContext.getCurrentInstance();
- if (ctx == null) return null;
- return ctx.getExternalContext().getRequestMap();
+ public static Configuration getConfiguration() {
+ return (Configuration) _configuration.get();
}
-
-
+ public static void setConfiguration(Configuration configuration) {
+ _configuration.set(configuration);
+ }
/**
@@ -143,7 +133,7 @@
ScriptingWeaver weaver = (ScriptingWeaver) _weaverHolder.get();
if (weaver == null) {
Log log = LogFactory.getLog(WeavingContext.class);
- log.warn("Scripting Weaver is not set. Disabling script reloading subsystem. Make sure you have the scripting servlet filter enabled in your web.xml");
+ log.warn(WARN_WEAVER_NOT_SET);
_weaverHolder.set(new DummyWeaver());
}
return (ScriptingWeaver) _weaverHolder.get();
@@ -165,8 +155,8 @@
*/
public static Object createMethodReloadingProxyFromObject(Object o, Class theInterface, int artefactType) {
return Proxy.newProxyInstance(o.getClass().getClassLoader(),
- new Class[]{theInterface},
- new MethodLevelReloadingHandler(o, artefactType));
+ new Class[]{theInterface},
+ new MethodLevelReloadingHandler(o, artefactType));
}
/**
@@ -180,8 +170,8 @@
*/
public static Object createConstructorReloadingProxyFromObject(Object o, Class theInterface, int artefactType) {
return Proxy.newProxyInstance(o.getClass().getClassLoader(),
- new Class[]{theInterface},
- new MethodLevelReloadingHandler(o, artefactType));
+ new Class[]{theInterface},
+ new MethodLevelReloadingHandler(o, artefactType));
}
public static FileChangedDaemon getFileChangedDaemon() {
Modified: 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=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java Fri Dec 25 14:29:03 2009
@@ -18,6 +18,8 @@
*/
package org.apache.myfaces.scripting.loaders.java;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.myfaces.scripting.api.ClassScanListener;
import org.apache.myfaces.scripting.api.ClassScanner;
import org.apache.myfaces.scripting.api.ScriptingConst;
@@ -26,10 +28,8 @@
import org.apache.myfaces.scripting.core.dependencyScan.DependencyScanner;
import org.apache.myfaces.scripting.core.util.WeavingContext;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
+import java.util.concurrent.Semaphore;
/**
* @author Werner Punz (latest modification by $Author$)
@@ -41,30 +41,77 @@
public class JavaDependencyScanner implements ClassScanner {
List<String> _scanPaths = new LinkedList<String>();
- DependencyScanner dependencyScanner = new DefaultDependencyScanner();
+ static final int MAX_PARALLEL_SCANS = 1;
+ //Semaphore threadCtrl = new Semaphore(MAX_PARALLEL_SCANS);
+
+ //we stack this to get an easier handling in a multithreaded environment
+ final Stack<DependencyScanner> dependencyScanner = new Stack<DependencyScanner>();
+
ScriptingWeaver _weaver;
+ Log log = LogFactory.getLog(JavaDependencyScanner.class.getName());
public JavaDependencyScanner(ScriptingWeaver weaver) {
this._weaver = weaver;
+ for (int cnt = 0; cnt < MAX_PARALLEL_SCANS; cnt++) {
+ dependencyScanner.push(new DefaultDependencyScanner());
+ }
}
public synchronized void scanPaths() {
- Set<String> possibleDynamicClasses = new HashSet<String>(_weaver.loadPossibleDynamicClasses());
+
+ if (log.isInfoEnabled()) {
+ log.info("[EXT-SCRITPING] starting class dependency scan");
+ }
+ long start = System.currentTimeMillis();
+ final Set<String> possibleDynamicClasses = new HashSet<String>(_weaver.loadPossibleDynamicClasses());
//TODO we have to probably set the context classloader upfront
//otherwise the classes are not found
- ClassLoader loader = new RecompiledClassLoader(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA);
-
+ final ClassLoader loader = new RecompiledClassLoader(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA);
+ String[] dynamicClassArr = new String[3];
for (String dynamicClass : possibleDynamicClasses) {
- Set<String> referrers = dependencyScanner.fetchDependencies(loader, dynamicClass, possibleDynamicClasses);
- //we make it in two ops because if we do the self dependency
- //removal in the scanner itself the code should not break
- referrers.remove(dynamicClass);
- if (!referrers.isEmpty()) {
- WeavingContext.getFileChangedDaemon().getDependencyMap().addDependencies(dynamicClass, referrers);
+ final String dynaClass = dynamicClass;
+
+ //TODO parallize this
+ //we have to shift the threadlocal data of the weaving context into
+ //every thread there is and push it into the threadlocals there
+ //I will leave this for now open for the next performance round
+
+ //prefill an array which keeps the in params
+ //try {
+ // threadCtrl.acquire();
+ //problem with the thread locals set we have to shift all the needed constats
+ //in and pass them into the thread
+
+ // (new Thread() {
+ // public void run()
+ // {
+
+ DependencyScanner depScanner = dependencyScanner.pop();
+ try {
+ Set<String> referrers = depScanner.fetchDependencies(loader, dynaClass, possibleDynamicClasses);
+ //we make it in two ops because if we do the self dependency
+ //removal in the scanner itself the code should not break
+ referrers.remove(dynaClass);
+ if (!referrers.isEmpty()) {
+ WeavingContext.getFileChangedDaemon().getDependencyMap().addDependencies(dynaClass, referrers);
+ }
+ } finally {
+ dependencyScanner.push(depScanner);
+ //threadCtrl.release();
}
+ // }
+ // }).start();
+ //} catch (InterruptedException e) {
+ // e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ //}
+
+ }
+ long end = System.currentTimeMillis();
+ if (log.isInfoEnabled()) {
+ log.info("[EXT-SCRITPING] class dependency scan finished, duration: " + (end - start) + " ms");
}
}
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=893858&r1=893857&r2=893858&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:29:03 2009
@@ -103,6 +103,8 @@
* note this method does not have to be thread safe
* it is called in a thread safe manner by the base class
*
+ * //TODO eliminate the source root we have the roots now somewhere else
+ *
* @param sourceRoot the source search lookup path
* @param file the filename to be compiled and loaded
* @return a valid class if it could be found, null if none was found
@@ -120,7 +122,7 @@
log.info("[EXT-SCRIPTING] Loading Java file:" + file);
}
- Iterator<String> it = scriptPaths.iterator();
+ Iterator<String> it = WeavingContext.getConfiguration().getSourceDirs(getScriptingEngine()).iterator();
Class retVal = null;
try {
@@ -203,7 +205,7 @@
compiler = (DynamicCompiler) ReflectUtil.instantiate(getScriptingFacadeClass());//new ReflectCompilerFacade();
}
- for (String scriptPath : getScriptPaths()) {
+ for (String scriptPath : WeavingContext.getConfiguration().getSourceDirs(getScriptingEngine())) {
//compile via javac dynamically, also after this block dynamic compilation
//for the entire length of the request,
try {
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java?rev=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java Fri Dec 25 14:29:03 2009
@@ -18,6 +18,9 @@
*/
package org.apache.myfaces.scripting.loaders.java;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.scripting.api.ScriptingConst;
import org.apache.myfaces.scripting.core.util.ClassUtils;
import org.apache.myfaces.scripting.core.util.FileUtils;
import org.apache.myfaces.scripting.core.util.WeavingContext;
@@ -27,6 +30,7 @@
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
+import java.util.Collection;
/**
* @author Werner Punz (latest modification by $Author$)
@@ -81,7 +85,7 @@
return super.getResourceAsStream(name);
}
}
- return super.getResourceAsStream(name);
+ return super.getResourceAsStream(name);
}
@Override
@@ -141,9 +145,25 @@
//store the filename
String separator = FileUtils.getFileSeparatorForRegex();
String fileName = className.replaceAll("\\.", separator) + ".java";
+ Collection<String> sourceDirs = WeavingContext.getConfiguration().getSourceDirs(ScriptingConst.ENGINE_TYPE_JAVA);
+ String rootDir = null;
+ for (String sourceDir : sourceDirs) {
+ String fullPath = sourceDir + File.separator + fileName;
+ if ((new File(fullPath)).exists()) {
+ rootDir = sourceDir;
+ break;
+ }
+ }
+
+ if (rootDir == null) {
+ Log log = LogFactory.getLog(this.getClass().getName());
+ log.warn("Warning source for class:" + className + " could not be found");
+ return retVal;
+ }
+
- reloadingMetaData.setFileName(sourceRoot + File.separator + fileName);
- reloadingMetaData.setSourcePath("");
+ reloadingMetaData.setFileName(fileName);
+ reloadingMetaData.setSourcePath(rootDir);
reloadingMetaData.setTimestamp(target.lastModified());
reloadingMetaData.setTainted(false);
reloadingMetaData.setTaintedOnce(true);
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java?rev=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java Fri Dec 25 14:29:03 2009
@@ -125,6 +125,7 @@
try {
CompilationResult result = compiler.compile(new File(sourceRoot), fileManager.getTempDir(), fileManager.getClassPath());
fileManager.refreshClassloader();
+ ((RecompiledClassLoader)fileManager.getClassLoader()).setSourceRoot(sourceRoot);
displayMessages(result);
return fileManager.getTempDir();
} catch (CompilationException e) {
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=893858&r1=893857&r2=893858&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:29:03 2009
@@ -112,21 +112,54 @@
File proxyFile = new File(it.getValue().getSourcePath() + File.separator + it.getValue().getFileName());
if (!it.getValue().isTainted() && isModified(it, proxyFile)) {
- it.getValue().setTainted(true);
+
systemRecompileMap.put(it.getValue().getScriptingEngine(), Boolean.TRUE);
+ it.getValue().setTainted(true);
it.getValue().setTaintedOnce(true);
printInfo(it, proxyFile);
it.getValue().setTimestamp(proxyFile.lastModified());
+ dependencyTainted(it.getValue().getAClass().getName());
}
}
}
}
+ /**
+ * recursive walk over our meta data to taint also the classes
+ * which refer to our refreshing class so that those
+ * are reloaded as well, this helps to avoid classcast
+ * exceptions caused by imports and casts on long running artefacts
+ *
+ * @param className the origin classname which needs to be walked recursively
+ */
+ private void dependencyTainted(String className) {
+ Set<String> referrers = dependencyMap.getReferringClasses(className);
+ if(referrers == null) return;
+ for (String referrer : referrers) {
+ ReloadingMetadata metaData = classMap.get(referrer);
+ if (metaData == null) continue;
+ if (metaData.isTainted()) continue;
+ printInfo(metaData);
+
+ metaData.setTainted(true);
+ metaData.setTaintedOnce(true);
+ dependencyTainted(metaData.getAClass().getName());
+
+ }
+ }
+
+
private final boolean isModified(Map.Entry<String, ReloadingMetadata> it, File proxyFile) {
return proxyFile.lastModified() != it.getValue().getTimestamp();
}
+ private void printInfo(ReloadingMetadata it) {
+ if (log.isInfoEnabled()) {
+ log.info("[EXT-SCRIPTING] Tainting Dependency:" + it.getFileName());
+ }
+ }
+
private void printInfo(Map.Entry<String, ReloadingMetadata> it, File proxyFile) {
if (log.isInfoEnabled()) {
log.info("[EXT-SCRIPTING] comparing" + it.getKey() + "Dates:" + proxyFile.lastModified() + "-" + it.getValue().getTimestamp());
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/ReloadingMetadata.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/ReloadingMetadata.java?rev=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/ReloadingMetadata.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/ReloadingMetadata.java Fri Dec 25 14:29:03 2009
@@ -95,6 +95,9 @@
}
public void setSourcePath(String sourcePath) {
+ if(sourcePath.endsWith(".java")) {
+ System.out.println("Debugpoint found");
+ }
this.sourcePath = sourcePath;
}
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java?rev=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java Fri Dec 25 14:29:03 2009
@@ -95,6 +95,9 @@
}
public Class forName(String name) {
+ if(name.endsWith(";")) {
+ name = name.substring(1, name.length() - 1);
+ }
if(name == null) {
return null;
}
@@ -106,7 +109,12 @@
return null;
else if (name.startsWith("sun.")) /*internal java specific namespace*/
return null;
-
+ else if (name.startsWith("org.apache") && !name.startsWith("org.apache.myfaces")) {
+ return null;
+ }
+ if(name.contains("Blog")) {
+ System.out.println("Debugpoint found");
+ }
return scriptingWeaver.loadScriptingClassFromName(name);
}
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/ScriptingServletFilter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/ScriptingServletFilter.java?rev=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/ScriptingServletFilter.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/ScriptingServletFilter.java Fri Dec 25 14:29:03 2009
@@ -18,6 +18,7 @@
*/
package org.apache.myfaces.scripting.servlet;
+import org.apache.myfaces.scripting.api.Configuration;
import org.apache.myfaces.scripting.api.ScriptingConst;
import org.apache.myfaces.scripting.core.util.WeavingContext;
import org.apache.myfaces.scripting.refresh.RefreshContext;
@@ -46,6 +47,7 @@
WeavingContext.setWeaver(context.getAttribute("ScriptingWeaver"));
WeavingContext.setRefreshContext((RefreshContext) context.getAttribute("RefreshContext"));
+ WeavingContext.setConfiguration((Configuration) context.getAttribute(ScriptingConst.CTX_CONFIGURATION));
filterChain.doFilter(servletRequest, servletResponse);
}
@@ -56,8 +58,8 @@
}
-
//we mark the request beginning and end for further synchronisation issues
+
private final AtomicInteger getRequestCnt() {
return (AtomicInteger) context.getAttribute(ScriptingConst.CTX_REQUEST_CNT);
}
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=893858&r1=893857&r2=893858&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:29:03 2009
@@ -22,6 +22,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.scripting.api.Configuration;
import org.apache.myfaces.webapp.StartupListener;
import org.apache.myfaces.scripting.core.util.ClassUtils;
import org.apache.myfaces.scripting.core.util.WeavingContext;
@@ -36,12 +37,18 @@
/**
* @author werpu
* @date: 14.08.2009
+ * <p/>
+ * Startup context plugin chainloader
+ * for myfaces 1.2.x,
+ * we hook ourselfs into the startup event
+ * system we have for myfaces 1.2.x+ to do the initial
+ * configuration before the myfaces init itself starts!
*/
public class StartupServletContextPluginChainLoader implements StartupListener {
+ final Log log = LogFactory.getLog(this.getClass());
public void preInit(ServletContextEvent servletContextEvent) {
- Log log = LogFactory.getLog(this.getClass());
log.info("[EXT-SCRIPTING] Instantiating StartupServletContextPluginChainLoader");
@@ -50,18 +57,77 @@
servletContext.setAttribute(ScriptingConst.CTX_REQUEST_CNT, new AtomicInteger(0));
- CustomChainLoader loader = new CustomChainLoader(servletContext);
- ClassUtils.addClassLoadingExtension(loader, true);
- ScriptingWeaver weaver = loader.getScriptingWeaver();
+ initConfig(servletContext);
+ CustomChainLoader loader = initChainLoader(servletContext);
+ ScriptingWeaver weaver = initScriptingWeaver(servletContext, loader);
+ initRefreshContext(servletContext);
- servletContext.setAttribute("ScriptingWeaver", weaver);
- RefreshContext rContext = new RefreshContext();
- servletContext.setAttribute("RefreshContext", rContext);
- WeavingContext.setRefreshContext(rContext);
+ initInitialCompileAndScan(weaver);
+ }
+
+
+ /**
+ * initiates the first compile and scan in the subsystem
+ *
+ * @param weaver our weaver which reveices the trigger calls
+ */
+ private final void initInitialCompileAndScan(ScriptingWeaver weaver) {
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
+ }
+
+ /**
+ * initialisation of the refresh context object
+ * the refresh context, is a context object which keeps
+ * the refresh information (refresh time, needs refresh) etc...
+ *
+ * @param servletContext the servlet context singleton which keeps
+ * the context for distribution
+ */
+ private final void initRefreshContext(ServletContext servletContext) {
+ RefreshContext rContext = new RefreshContext();
+ servletContext.setAttribute("RefreshContext", rContext);
+ WeavingContext.setRefreshContext(rContext);
+ }
+
+ /**
+ * The initialisation of our global weaver chain
+ * which triggers the various subweavers depending
+ * on the scripting engine plugged in.
+ *
+ * @param servletContext the application scoped holder for our weaver
+ * @param loader the chain loader which serves the weavers
+ * @return the weaver instance wich is generated and stored
+ */
+ private final ScriptingWeaver initScriptingWeaver(ServletContext servletContext, CustomChainLoader loader) {
+ ScriptingWeaver weaver = loader.getScriptingWeaver();
+ servletContext.setAttribute("ScriptingWeaver", weaver);
+ return weaver;
+ }
+
+ /**
+ * initializes our custom chain loader which gets plugged into
+ * the myfaces loading part for classes!
+ *
+ * @param servletContext
+ * @return
+ */
+ private final CustomChainLoader initChainLoader(ServletContext servletContext) {
+ CustomChainLoader loader = new CustomChainLoader(servletContext);
+ ClassUtils.addClassLoadingExtension(loader, true);
+ return loader;
+ }
+
+ /**
+ * initializes the central config storage!
+ *
+ * @param servletContext
+ */
+ private final void initConfig(ServletContext servletContext) {
+ Configuration conf = new Configuration();
+ servletContext.setAttribute(ScriptingConst.CTX_CONFIGURATION, conf);
+ WeavingContext.setConfiguration(conf);
}
public void postInit(ServletContextEvent evt) {
@@ -72,7 +138,8 @@
}
public void postDestroy(ServletContextEvent evt) {
- //context is destroyed we have to shut down our daemon as well
+ //context is destroyed we have to shut down our daemon as well, by giving it
+ //a hint to shutdown
RefreshContext rContext = (RefreshContext) evt.getServletContext().getAttribute("RefreshContext");
rContext.getDaemon().setRunning(false);
}
Modified: myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/DependencyScannerTest.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/DependencyScannerTest.java?rev=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/DependencyScannerTest.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/DependencyScannerTest.java Fri Dec 25 14:29:03 2009
@@ -81,10 +81,10 @@
dependencyMap.addDependencies(PROBE1, retVal);
- assertTrue("Dependency Test1", dependencyMap.getReferencedClasses(PROBE2).contains(PROBE1));
- assertTrue("Dependency Test2", dependencyMap.getReferencedClasses(PROBE3).contains(PROBE1));
- assertTrue("Dependency Test3", dependencyMap.getReferencedClasses(PROBE4).contains(PROBE1));
- assertTrue("Dependency Test4", dependencyMap.getReferencedClasses(PROBE_PAR).contains(PROBE1));
+ assertTrue("Dependency Test1", dependencyMap.getReferringClasses(PROBE2).contains(PROBE1));
+ assertTrue("Dependency Test2", dependencyMap.getReferringClasses(PROBE3).contains(PROBE1));
+ assertTrue("Dependency Test3", dependencyMap.getReferringClasses(PROBE4).contains(PROBE1));
+ assertTrue("Dependency Test4", dependencyMap.getReferringClasses(PROBE_PAR).contains(PROBE1));
}
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=893858&r1=893857&r2=893858&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:29:03 2009
@@ -79,8 +79,8 @@
//we might get 2 of our proxies in the delegate stack
//the same goes for the rest of the factory stuff
- if (!(elResolver instanceof ELResolverProxy))
- elResolver = new ELResolverProxy(elResolver);
+ if (!(elResolver instanceof ELResolverProxy_))
+ elResolver = new ELResolverProxy_(elResolver);
_delegate.addELResolver(elResolver);
}
@@ -93,8 +93,8 @@
public ELResolver getELResolver() {
weaveDelegate();
ELResolver retVal = _delegate.getELResolver();
- if (!(retVal instanceof ELResolverProxy)) {
- retVal = new ELResolverProxy(retVal);
+ if (!(retVal instanceof ELResolverProxy_)) {
+ retVal = new ELResolverProxy_(retVal);
}
return retVal;
Copied: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy_.java (from r893857, 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?p2=myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy_.java&p1=myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy.java&r1=893857&r2=893858&rev=893858&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:29:03 2009
@@ -36,9 +36,9 @@
*
* @author Werner Punz
*/
-public class ELResolverProxy extends ELResolver implements Decorated {
+public class ELResolverProxy_ extends ELResolver implements Decorated {
- Log log = LogFactory.getLog(ELResolverProxy.class);
+ Log log = LogFactory.getLog(ELResolverProxy_.class);
ELResolver _delegate = null;
static ThreadLocal<Boolean> _getValue = new ThreadLocal<Boolean>();
@@ -124,7 +124,7 @@
}
- public ELResolverProxy(ELResolver delegate) {
+ public ELResolverProxy_(ELResolver delegate) {
_delegate = delegate;
}
Propchange: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy_.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ELResolverProxy_.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Blog.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Blog.java?rev=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Blog.java (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/Blog.java Fri Dec 25 14:29:03 2009
@@ -93,8 +93,8 @@
* the same behavior you get from scripting engines!
*
*/
- //service.addEntry(entry);
- executeMethod(service, "addEntry", entry);
+ service.addEntry(entry);
+ //executeMethod(service, "addEntry", entry);
}
//we stay on the same page
Modified: myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/BlogEntry.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/BlogEntry.java?rev=893858&r1=893857&r2=893858&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/BlogEntry.java (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces12-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/blog/BlogEntry.java Fri Dec 25 14:29:03 2009
@@ -26,6 +26,7 @@
*/
public class BlogEntry {
+
String firstName = "";
String lastName = "";