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 2010/01/21 18:23:50 UTC

svn commit: r901782 - in /myfaces/extensions/scripting/trunk: core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ core/core/src/main/groovy/org/apache/myfaces/groovyloader/core/ core/core/src/main/java/org/apache/myfaces/ext...

Author: werpu
Date: Thu Jan 21 17:23:48 2010
New Revision: 901782

URL: http://svn.apache.org/viewvc?rev=901782&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-48

adding better bean reloading behavior last bugfix, adding compiler component
adding layout to the compiler component

Added:
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponent.java   (with props)
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponentRenderer.java   (with props)
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BeanHandler.java   (with props)
Removed:
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationResult.java
Modified:
    myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/JSR199Compiler.java
    myfaces/extensions/scripting/trunk/core/core/src/main/groovy/org/apache/myfaces/groovyloader/core/StandardGroovyReloadingStrategy.groovy
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.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/ScriptingConst.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/groovy/compiler/GroovyCompilerFacade.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/Compiler.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/loaders/java/jdk5/JavacCompiler.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/ScriptingServletFilter.java
    myfaces/extensions/scripting/trunk/core/core/src/main/resources/META-INF/faces-config.xml
    myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/resources/styles/main.css

Modified: myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/JSR199Compiler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/JSR199Compiler.java?rev=901782&r1=901781&r2=901782&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/JSR199Compiler.java (original)
+++ myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/JSR199Compiler.java Thu Jan 21 17:23:48 2010
@@ -20,10 +20,13 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationResult;
 import org.apache.myfaces.scripting.api.DynamicCompiler;
 import org.apache.myfaces.scripting.api.CompilerConst;
+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;
 import org.apache.myfaces.scripting.loaders.java.RecompiledClassLoader;
 
 import javax.tools.*;
@@ -59,13 +62,12 @@
     private static final String FILE_SEPARATOR = File.separator;
 
     JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
-    DiagnosticCollector<JavaFileObject> diagnosticCollector = new DiagnosticCollector();
     ContainerFileManager fileManager = null;
 
 
     public JSR199Compiler() {
         super();
-        fileManager = new ContainerFileManager(javaCompiler.getStandardFileManager(diagnosticCollector, null, null));
+        fileManager = new ContainerFileManager(javaCompiler.getStandardFileManager(new DiagnosticCollector(), null, null));
         if (javaCompiler == null) {
             //TODO add other compilers as fallbacks here eclipse ecq being the first
         }
@@ -123,6 +125,8 @@
      * @throws ClassNotFoundException in case of a compilation error
      */
     public File compileAllFiles(String sourceRoot, String classPath) throws ClassNotFoundException {
+        DiagnosticCollector<JavaFileObject> diagnosticCollector = new DiagnosticCollector();
+        
         getLog().info("[EXT-SCRIPTING] Doing a full recompile");
 
         List<File> sourceFiles = FileUtils.fetchSourceFiles(new File(sourceRoot), CompilerConst.JAVA_WILDCARD);
@@ -148,13 +152,18 @@
         if (diagnosticCollector.getDiagnostics().size() > 0) {
             Log log = LogFactory.getLog(this.getClass());
             StringBuilder errors = new StringBuilder();
+            CompilationResult result = new CompilationResult("");
             for (Diagnostic diagnostic : diagnosticCollector.getDiagnostics()) {
                 String error = createErrorMessage(diagnostic);
                 log.error(error);
+                result.getErrors().add(new CompilationResult.CompilationMessage(diagnostic.getLineNumber(), diagnostic.getMessage(Locale.getDefault())));
                 errors.append(error);
-
             }
+            WeavingContext.setCompilationResult(ScriptingConst.ENGINE_TYPE_JAVA, result);
+            
             throw new ClassNotFoundException("Compile error of java file:" + errors.toString());
+        } else {
+            WeavingContext.setCompilationResult(ScriptingConst.ENGINE_TYPE_JAVA, new CompilationResult(""));
         }
     }
 

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/groovy/org/apache/myfaces/groovyloader/core/StandardGroovyReloadingStrategy.groovy
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/groovy/org/apache/myfaces/groovyloader/core/StandardGroovyReloadingStrategy.groovy?rev=901782&r1=901781&r2=901782&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/groovy/org/apache/myfaces/groovyloader/core/StandardGroovyReloadingStrategy.groovy (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/groovy/org/apache/myfaces/groovyloader/core/StandardGroovyReloadingStrategy.groovy Thu Jan 21 17:23:48 2010
@@ -18,9 +18,8 @@
  */
 package org.apache.myfaces.groovyloader.core
 
-import org.apache.myfaces.scripting.api.ReloadingStrategy
+import org.apache.myfaces.scripting.api.BaseWeaver
 import org.apache.myfaces.scripting.core.reloading.SimpleReloadingStrategy
-import org.apache.myfaces.scripting.api.BaseWeaver;
 
 public class StandardGroovyReloadingStrategy extends SimpleReloadingStrategy {
 

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java?rev=901782&r1=901781&r2=901782&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java Thu Jan 21 17:23:48 2010
@@ -21,7 +21,9 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.myfaces.extensions.scripting.loader.ClassLoaderUtils;
+import org.apache.myfaces.scripting.api.ScriptingConst;
 import org.apache.myfaces.scripting.core.util.FileUtils;
+import org.apache.myfaces.scripting.core.util.WeavingContext;
 import org.codehaus.groovy.control.CompilationFailedException;
 import org.codehaus.groovy.control.CompilationUnit;
 import org.codehaus.groovy.control.CompilerConfiguration;
@@ -81,6 +83,8 @@
             compilationUnit.compile();
 
             result = new CompilationResult(compilerOutput.toString());
+            WeavingContext.setCompilationResult(ScriptingConst.ENGINE_TYPE_GROOVY, result);
+
         } catch (CompilationFailedException ex) {
             // Register all collected error messages from the Groovy compiler
             result = new CompilationResult(compilerOutput.toString());
@@ -123,6 +127,8 @@
             compilationUnit.compile();
 
             result = new CompilationResult(compilerOutput.toString());
+
+            WeavingContext.setCompilationResult(ScriptingConst.ENGINE_TYPE_GROOVY, result);
         } catch (CompilationFailedException ex) {
             // Register all collected error messages from the Groovy compiler
             result = new CompilationResult(compilerOutput.toString());

Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponent.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponent.java?rev=901782&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponent.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponent.java Thu Jan 21 17:23:48 2010
@@ -0,0 +1,103 @@
+package org.apache.myfaces.extensions.scripting.components;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.myfaces.scripting.api.ScriptingConst;
+
+import javax.el.ValueExpression;
+import javax.faces.component.UIOutput;
+import javax.faces.context.FacesContext;
+
+/**
+ * Compiler component which currently
+ * just shows the last compile output in the system
+ * <p/>
+ * Not to keep backwards compatibility to JSF 1.2
+ * we do not use the StateHelper but go the old route
+ * instead
+ */
+public class CompilerComponent extends UIOutput {
+
+    String _scriptingLanguage = null;
+    String _errorsLabel = null;
+    String _warningsLabel = null;
+
+    public CompilerComponent() {
+        super();
+        setRendererType("org.apache.myfaces.extensions.scripting.components.CompilerComponentRenderer");
+    }
+
+    @Override
+    public boolean isTransient() {
+        return true;
+    }
+
+    @Override
+    public Object saveState(FacesContext facesContext) {
+        Object values[] = new Object[4];
+        values[0] = super.saveState(facesContext);    //To change body of overridden methods use File | Settings | File Templates.
+        values[1] = _scriptingLanguage;
+        values[2] = _errorsLabel;
+        values[3] = _warningsLabel;
+        return values;
+    }
+
+    @Override
+    public void restoreState(FacesContext facesContext, Object state) {
+        Object[] values = (Object[]) state;
+        super.restoreState(facesContext, values[0]);
+
+        _scriptingLanguage = (String) values[1];
+        _errorsLabel = (String) values[2];
+        _warningsLabel = (String) values[3];
+    }
+
+    public String getScriptingLanguage() {
+        if (_scriptingLanguage != null) {
+            return _scriptingLanguage;
+        }
+        ValueExpression vb = getValueExpression("scriptingLanguage");
+        return vb != null ? ((String) vb.getValue(getFacesContext().getELContext())) : null;
+    }
+
+    public Integer getScriptingLanguageAsInt() {
+        if (StringUtils.isBlank(_scriptingLanguage)) {
+            return ScriptingConst.ENGINE_TYPE_ALL;
+        } else {
+            String scriptingLanguage = _scriptingLanguage.toLowerCase().trim();
+            if (scriptingLanguage.equals("java")) {
+                return ScriptingConst.ENGINE_TYPE_JAVA;
+            } else if (_scriptingLanguage.toLowerCase().trim().equals("groovy")) {
+                return ScriptingConst.ENGINE_TYPE_GROOVY;
+            }
+        }
+        return ScriptingConst.ENGINE_TYPE_NO_ENGINE;
+    }
+
+    public void setScriptingLanguage(String scriptingLanguage) {
+        _scriptingLanguage = scriptingLanguage;
+    }
+    
+    public String getErrorsLabel() {
+        if (_errorsLabel != null) {
+            return _errorsLabel;
+        }
+        ValueExpression vb = getValueExpression("errorsLabel");
+        return vb != null ? ((String) vb.getValue(getFacesContext().getELContext())) : null;
+    }
+
+    public void setErrorsLabel(String _errorsLabel) {
+        this._errorsLabel = _errorsLabel;
+    }
+
+    public String getWarningsLabel() {
+        if (_warningsLabel != null) {
+            return _warningsLabel;
+        }
+        ValueExpression vb = getValueExpression("warningsLabel");
+        return vb != null ? ((String) vb.getValue(getFacesContext().getELContext())) : null;
+    }
+
+    public void setWarningsLabel(String _warningsLabel) {
+        this._warningsLabel = _warningsLabel;
+    }
+}

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponent.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponent.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponentRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponentRenderer.java?rev=901782&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponentRenderer.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponentRenderer.java Thu Jan 21 17:23:48 2010
@@ -0,0 +1,132 @@
+package org.apache.myfaces.extensions.scripting.components;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationResult;
+import org.apache.myfaces.scripting.api.ScriptingConst;
+import org.apache.myfaces.scripting.core.util.WeavingContext;
+import org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import java.io.IOException;
+
+/**
+ * Renderer for the compiler component
+ * <p/>
+ * This renderer is responsible for rendering the last compiler output
+ * hosted in our weavingContext
+ */
+public class CompilerComponentRenderer extends HtmlTextRendererBase {
+    @Override
+    public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
+        super.encodeBegin(context, component);
+
+        ResponseWriter wrtr = FacesContext.getCurrentInstance().getResponseWriter();
+        CompilerComponent compilerComp = (CompilerComponent) component;
+
+        Integer scriptingLanguage = compilerComp.getScriptingLanguageAsInt();
+        CompilationResult result = null;
+        switch (scriptingLanguage) {
+            case ScriptingConst.ENGINE_TYPE_JAVA:
+                result = WeavingContext.getCompilationResult(ScriptingConst.ENGINE_TYPE_JAVA);
+                break;
+            case ScriptingConst.ENGINE_TYPE_GROOVY:
+                result = WeavingContext.getCompilationResult(ScriptingConst.ENGINE_TYPE_JAVA);
+                break;
+            case ScriptingConst.ENGINE_TYPE_ALL:
+                result = new CompilationResult("");
+                CompilationResult tempResult = WeavingContext.getCompilationResult(ScriptingConst.ENGINE_TYPE_JAVA);
+                if (tempResult != null) {
+                    copyCompilationResult(result, tempResult);
+                }
+
+                tempResult = WeavingContext.getCompilationResult(ScriptingConst.ENGINE_TYPE_GROOVY);
+                if (tempResult != null) {
+                    copyCompilationResult(result, tempResult);
+                }
+
+                break;
+            case ScriptingConst.ENGINE_TYPE_NO_ENGINE:
+                Log log = LogFactory.getLog(this.getClass());
+                log.warn("Warning engine not found");
+                break;
+
+        }
+
+        startDiv(component, wrtr, "errorBox");
+        if (result == null || (!result.hasErrors() && result.getWarnings().isEmpty())) {
+            wrtr.write("No compile errors");
+        } else {
+            writeErrorsLabel(component, wrtr, compilerComp);
+            writeErrors(component, wrtr, result);
+            writeWarningsLabel(component, wrtr, compilerComp);
+            writeWarnings(component, wrtr, result);
+        }
+        endDiv(wrtr);
+
+        wrtr.flush();
+
+    }
+
+    private void writeWarnings(UIComponent component, ResponseWriter wrtr, CompilationResult result) throws IOException {
+        startDiv(component, wrtr, "warnings");
+        for (CompilationResult.CompilationMessage msg : result.getWarnings()) {
+            startDiv(component, wrtr, "line");
+            writeDiv(component, wrtr, "lineNo", String.valueOf(msg.getLineNumber()));
+            writeDiv(component, wrtr, "message", msg.getMessage());
+            endDiv(wrtr);
+        }
+        endDiv(wrtr);
+    }
+
+    private void writeWarningsLabel(UIComponent component, ResponseWriter wrtr, CompilerComponent compilerComp) throws IOException {
+        if (!StringUtils.isBlank(compilerComp.getWarningsLabel())) {
+            startDiv(component, wrtr, "warningsLabel");
+            wrtr.write(compilerComp.getWarningsLabel());
+            endDiv(wrtr);
+        }
+    }
+
+    private void writeErrors(UIComponent component, ResponseWriter wrtr, CompilationResult result) throws IOException {
+        startDiv(component, wrtr, "errors");
+        for (CompilationResult.CompilationMessage msg : result.getErrors()) {
+            startDiv(component, wrtr, "line");
+            writeDiv(component, wrtr, "lineNo", String.valueOf(msg.getLineNumber()));
+            writeDiv(component, wrtr, "message", msg.getMessage());
+            endDiv(wrtr);
+        }
+        endDiv(wrtr);
+    }
+
+    private String writeDiv(UIComponent component, ResponseWriter wrtr, String styleClass, String value) throws IOException {
+        startDiv(component, wrtr, styleClass);
+        wrtr.write(value);
+        endDiv(wrtr);
+        return "";
+    }
+
+    private void endDiv(ResponseWriter wrtr) throws IOException {
+        wrtr.endElement("div");
+    }
+
+    private void startDiv(UIComponent component, ResponseWriter wrtr, String styleClass) throws IOException {
+        wrtr.startElement("div", component);
+        wrtr.writeAttribute("class", styleClass, null);
+    }
+
+    private void writeErrorsLabel(UIComponent component, ResponseWriter wrtr, CompilerComponent compilerComp) throws IOException {
+        if (!StringUtils.isBlank(compilerComp.getErrorsLabel())) {
+            startDiv(component, wrtr, "errorsLabel");
+            wrtr.write(compilerComp.getErrorsLabel());
+            endDiv(wrtr);
+        }
+    }
+
+    private void copyCompilationResult(CompilationResult result, CompilationResult tempResult) {
+        result.getErrors().addAll(tempResult.getErrors());
+        result.getWarnings().addAll(tempResult.getWarnings());
+    }
+}

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponentRenderer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponentRenderer.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

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=901782&r1=901781&r2=901782&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 Thu Jan 21 17:23:48 2010
@@ -2,12 +2,9 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.myfaces.config.RuntimeConfig;
-import org.apache.myfaces.config.element.ManagedBean;
 import org.apache.myfaces.scripting.core.reloading.GlobalReloadingStrategy;
 import org.apache.myfaces.scripting.core.util.ClassUtils;
 import org.apache.myfaces.scripting.core.util.FileUtils;
-import org.apache.myfaces.scripting.core.util.ReflectUtil;
 import org.apache.myfaces.scripting.core.util.WeavingContext;
 import org.apache.myfaces.scripting.refresh.ReloadingMetadata;
 import org.apache.myfaces.scripting.refresh.RefreshContext;
@@ -45,26 +42,28 @@
      */
 
     protected ReloadingStrategy _reloadingStrategy = null;
-    private static final String SCOPE_SESSION = "session";
-    private static final String SCOPE_APPLICATION = "application";
-    private static final String SCOPE_REQUEST = "request";
 
     protected DynamicCompiler _compiler = null;
-    protected Log _log = LogFactory.getLog(this.getClass());
-    protected String _classPath = "";
     protected ClassScanner _annotationScanner = null;
     protected ClassScanner _dependencyScanner = null;
+
+    private BeanHandler _beanHandler;
+    protected String _classPath = "";
+    protected Log _log = LogFactory.getLog(this.getClass());
+
     private String _fileEnding = null;
     private int _scriptingEngine = ScriptingConst.ENGINE_TYPE_NO_ENGINE;
 
     public BaseWeaver() {
         _reloadingStrategy = new GlobalReloadingStrategy(this);
+        _beanHandler = new MyFacesBeanHandler(getScriptingEngine());
     }
 
     public BaseWeaver(String fileEnding, int scriptingEngine) {
         this._fileEnding = fileEnding;
         this._scriptingEngine = scriptingEngine;
         _reloadingStrategy = new GlobalReloadingStrategy(this);
+        _beanHandler = new MyFacesBeanHandler(getScriptingEngine());
     }
 
     /**
@@ -211,6 +210,7 @@
         return _fileEnding;
     }
 
+    @SuppressWarnings("unused")
     public void setFileEnding(String fileEnding) {
         this._fileEnding = fileEnding;
     }
@@ -219,6 +219,7 @@
         return _scriptingEngine;
     }
 
+    @SuppressWarnings("unused")
     public void setScriptingEngine(int scriptingEngine) {
         this._scriptingEngine = scriptingEngine;
     }
@@ -250,146 +251,13 @@
             //and an inner check again to avoid unneeded compile triggers
             synchronized (RefreshContext.BEAN_SYNC_MONITOR) {
                 if (WeavingContext.getRefreshContext().isRecompileRecommended(getScriptingEngine())) {
-
                     recompileRefresh();
-
                     return;
                 }
             }
         }
-        personalScopeRefresh();
-
-    }
-
-    protected void refreshAllManagedBeans() {
-
-        if (FacesContext.getCurrentInstance() == null) {
-            return;//no npe allowed
-        }
-        Set<String> tainted = new HashSet<String>();
-        for (Map.Entry<String, ReloadingMetadata> it : WeavingContext.getFileChangedDaemon().getClassMap().entrySet()) {
-            if (it.getValue().getScriptingEngine() == getScriptingEngine() && it.getValue().isTainted()) {
-                tainted.add(it.getKey());
-            }
-        }
-        if (tainted.size() > 0) {
-            boolean managedBeanTainted = false;
-            //We now have to check if the tainted classes belong to the managed beans
-            Set<String> managedBeanClasses = new HashSet<String>();
-
-            Map<String, ManagedBean> mbeans = RuntimeConfig.getCurrentInstance(FacesContext.getCurrentInstance().getExternalContext()).getManagedBeans();
-            Map<String, ManagedBean> workCopy;
-
-            synchronized (RefreshContext.BEAN_SYNC_MONITOR) {
-                workCopy = makeSnapshot(mbeans);
-            }
-
-            for (Map.Entry<String, ManagedBean> entry : workCopy.entrySet()) {
-                managedBeanClasses.add(entry.getValue().getManagedBeanClassName());
-            }
-            for (String taintedClass : tainted) {
-                if (managedBeanClasses.contains(taintedClass)) {
-                    managedBeanTainted = true;
-                    break;
-                }
-            }
-
-            markSessionBeanRefreshRecommended();
-
-            getLog().info("[EXT-SCRIPTING] Tainting all beans to avoid classcast exceptions");
-            if (managedBeanTainted) {
-
-                for (Map.Entry<String, ManagedBean> entry : workCopy.entrySet()) {
-                    Class managedBeanClass = entry.getValue().getManagedBeanClass();
-                    if (WeavingContext.isDynamic(managedBeanClass)) {
-                        //managed bean class found we drop the class from our session
-                        removeBeanReferences(entry.getValue());
-                    }
-                    //one bean tainted we have to taint all dynamic beans otherwise we will get classcast
-                    //exceptions
-                    getLog().info("[EXT-SCRIPTING] Tainting ");
-                    ReloadingMetadata metaData = WeavingContext.getFileChangedDaemon().getClassMap().get(managedBeanClass.getName());
-                    if (metaData != null) {
-                        metaData.setTainted(true);
-                    }
-                }
-            }
-        }
-
-    }
-
-    /**
-     * refreshes all personal scoped beans (aka beans which
-     * have an assumed lifecycle <= session)
-     * <p/>
-     * This is needed for multiuser purposes because if one user alters some beans
-     * other users have to drop their non application scoped beans as well!
-     */
-    private void refreshPersonalScopedBeans() {
-        //the refreshing is only allowed if no compile is in progress
-        //and vice versa
-
-        synchronized (RefreshContext.BEAN_SYNC_MONITOR) {
-            Map<String, ManagedBean> mbeans = RuntimeConfig.getCurrentInstance(FacesContext.getCurrentInstance().getExternalContext()).getManagedBeans();
-            //the map is immutable but in between scanning might change it so we make a full copy of the map
-
-            //We can synchronized the refresh, but if someone alters
-            //the bean map from outside we still get race conditions
-            //But for most cases this mutex should be enough
-
-            Map<String, ManagedBean> workCopy;
-
-            workCopy = makeSnapshot(mbeans);
-
-            for (Map.Entry<String, ManagedBean> entry : workCopy.entrySet()) {
-
-                Class managedBeanClass = entry.getValue().getManagedBeanClass();
-                if (WeavingContext.isDynamic(managedBeanClass)) {
-                    String scope = entry.getValue().getManagedBeanScope();
-
-                    if (scope != null && !scope.equalsIgnoreCase(SCOPE_APPLICATION)) {
-                        if (scope.equalsIgnoreCase(SCOPE_REQUEST)) {
-                            //request, nothing has to be done here
-                            return;
-                        }
-
-                        if (scope.equalsIgnoreCase(SCOPE_SESSION)) {
-                            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(entry.getValue().getManagedBeanName());
-                        } else {
-                            removeCustomScopedBean(entry.getValue());
-                        }
-
-                    }
-
-                }
-            }
-            updateBeanRefreshTime();
-        }
-    }
-
-    /**
-     * removes the references from out static scope
-     * for jsf2 we probably have some kind of notification mechanism
-     * which notifies custom scopes
-     *
-     * @param bean the managed bean which all references have to be removed from
-     */
+        _beanHandler.personalScopeRefresh();
 
-    private void removeBeanReferences(ManagedBean bean) {
-        if (getLog().isInfoEnabled()) {
-            getLog().info("[EXT-SCRIPTING] JavaScriptingWeaver.removeBeanReferences(" + bean.getManagedBeanName() + ")");
-        }
-
-        String scope = bean.getManagedBeanScope();
-
-        if (scope != null && scope.equalsIgnoreCase(SCOPE_SESSION)) {
-            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(bean.getManagedBeanName());
-        } else if (scope != null && scope.equalsIgnoreCase(SCOPE_APPLICATION)) {
-            FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().remove(bean.getManagedBeanName());
-            //other scope
-        } else if (scope != null && !scope.equals(SCOPE_REQUEST)) {
-            removeCustomScopedBean(bean);
-        }
     }
 
     /**
@@ -442,7 +310,7 @@
     }
 
     protected boolean isRecompileRecommended() {
-        return WeavingContext.getRefreshContext().isRecompileRecommended(getScriptingEngine());    
+        return WeavingContext.getRefreshContext().isRecompileRecommended(getScriptingEngine());
     }
 
     protected boolean isFullyRecompiled() {
@@ -530,64 +398,6 @@
         return retVal;
     }
 
-    /**
-     * jsf2 helper to remove custom scoped beans
-     *
-     * @param bean the managed bean which has to be removed from the custom scope from
-     */
-    private void removeCustomScopedBean(ManagedBean bean) {
-        Object scopeImpl = FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().get(bean.getManagedBeanScope());
-        if (scopeImpl == null) return; //scope not implemented
-        //we now have to revert to introspection here because scopes are a pure jsf2 construct
-        //so we use a messaging pattern here to cope with it
-
-        ReflectUtil.executeMethod(scopeImpl, "remove", bean.getManagedBeanName());
-    }
-
-    /**
-     * MyFaces 2.0 keeps an immutable map over the session
-     * and request scoped beans
-     * if we alter that during our loop we get a concurrent modification exception
-     * taking a snapshot in time fixes that
-     *
-     * @param mbeans the internal managed bean map which has to be investigated
-     * @return a map with the class name as key and the managed bean info
-     *         as value of the current state of the internal runtime config bean map
-     */
-    private Map<String, ManagedBean> makeSnapshot(Map<String, ManagedBean> mbeans) {
-        Map<String, ManagedBean> workCopy;
-
-        workCopy = new HashMap<String, ManagedBean>(mbeans.size());
-        for (Map.Entry<String, ManagedBean> entry : mbeans.entrySet()) {
-            workCopy.put(entry.getKey(), entry.getValue());
-        }
-
-        return workCopy;
-    }
-
-    private void updateBeanRefreshTime() {
-        long sessionRefreshTime = System.currentTimeMillis();
-        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(ScriptingConst.SESS_BEAN_REFRESH_TIMER, sessionRefreshTime);
-    }
-
-    private void markSessionBeanRefreshRecommended() {
-        long sessionRefreshTime = System.currentTimeMillis();
-        WeavingContext.getRefreshContext().setPersonalScopedBeanRefresh(sessionRefreshTime);
-        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(ScriptingConst.SESS_BEAN_REFRESH_TIMER, sessionRefreshTime);
-    }
-
-    private void personalScopeRefresh() {
-        //shortcut to avoid heavier operations in the beginning
-        long globalBeanRefreshTimeout = WeavingContext.getRefreshContext().getPersonalScopedBeanRefresh();
-        if (globalBeanRefreshTimeout == -1l) return;
-
-        Map sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
-        Long timeOut = (Long) sessionMap.get(ScriptingConst.SESS_BEAN_REFRESH_TIMER);
-        if (timeOut == null || timeOut < globalBeanRefreshTimeout) {
-            refreshPersonalScopedBeans();
-        }
-    }
-
     private void recompileRefresh() {
         synchronized (RefreshContext.COMPILE_SYNC_MONITOR) {
             fullRecompile();
@@ -596,7 +406,21 @@
             fullClassScan();
         }
 
-        refreshAllManagedBeans();
+        /*
+         * we scan all intra bean dependencies
+         * which are not covered by our
+         * class dependency scan
+         */
+        _beanHandler.scanDependencies();
+
+        /*
+         * Now it is time to refresh the tainted managed beans
+         * by now we should have a good grasp about which beans
+         * need to to be refreshed (note we cannot cover all corner cases
+         * but our extended dependency scan should be able to cover
+         * most refreshing cases.
+         */
+        _beanHandler.refreshAllManagedBeans();
     }
 
     protected abstract DynamicCompiler instantiateCompiler();

Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BeanHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BeanHandler.java?rev=901782&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BeanHandler.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BeanHandler.java Thu Jan 21 17:23:48 2010
@@ -0,0 +1,40 @@
+package org.apache.myfaces.scripting.api;
+
+/**
+ * interface for a bean handler
+ * which in the long run will allow
+ * to hook different frameworks into the core
+ * (aka Mojarra, MyFaces)
+ */
+public interface BeanHandler {
+
+    /**
+     * scans all bean dependencies according to
+     * their IoC information stored by the runtime
+     * (in our case the MyFaces runtime confing)
+     * and adds those into our backward referencing dependency map
+     * to add further dependency information on IoC level
+     * (we can have IoC dependencies which are bound by object
+     * types, this is a corner case but it still can happen)
+     */
+    public void scanDependencies();
+
+    /**
+     * refreshes all managed beans,
+     * Application, Session,Request and Custom beans
+     * <p/>
+     * internally a check is performed whether the refresh has to be done or not
+     */
+    public void refreshAllManagedBeans();
+
+    /**
+     * refreshes all personal scoped beans (aka beans which
+     * have an assumed lifecycle <= session)
+     * <p/>
+     * This is needed for multiuser purposes because if one user alters some beans
+     * other users have to drop their non application scoped beans as well!
+     * <p/>
+     * internally a check is performed whether the refresh has to be performed or not
+     */
+    public void personalScopeRefresh();
+}

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BeanHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/BeanHandler.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=901782&r1=901781&r2=901782&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 Thu Jan 21 17:23:48 2010
@@ -71,4 +71,7 @@
     public static final String JAVA_FILE_ENDING = ".java";
     public static final String JSR199_COMPILER = "org.apache.myfaces.scripting.loaders.java.jsr199.JSR199Compiler";
     public static final String JAVA5_COMPILER = "org.apache.myfaces.scripting.loaders.java.jdk5.CompilerFacade";
+    public static final String SCOPE_SESSION = "session";
+    public static final String SCOPE_APPLICATION = "application";
+    public static final String SCOPE_REQUEST = "request";
 }

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=901782&r1=901781&r2=901782&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 Thu Jan 21 17:23:48 2010
@@ -20,6 +20,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationResult;
 import org.apache.myfaces.scripting.api.Configuration;
 import org.apache.myfaces.scripting.api.Decorated;
 import org.apache.myfaces.scripting.api.ScriptingWeaver;
@@ -28,12 +29,15 @@
 import org.apache.myfaces.scripting.refresh.FileChangedDaemon;
 import org.apache.myfaces.scripting.refresh.RefreshContext;
 
+import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
 import java.lang.ref.SoftReference;
 import java.lang.ref.WeakReference;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * A set of weaving context class called
@@ -53,6 +57,7 @@
         public Object _weaverHolder;
         public Object _refreshContextHolder;
         public Object _configurtion;
+        public Object _externalContext;
     }
 
     static ThreadLocalData _referenceThreadHolder = null;
@@ -61,7 +66,7 @@
      * <p>
      * we push our _weaver into the thread local
      * to avoid too many calls into the
-     * context classloading hierarchy
+     * context class loading hierarchy
      * this should speed things up a little bit.
      * </p>
      * <p>
@@ -74,13 +79,31 @@
     static protected ThreadLocal _weaverHolder = new ThreadLocal();
     static protected ThreadLocal _refreshContextHolder = new ThreadLocal();
     static protected ThreadLocal _configuration = new ThreadLocal();
+    static protected ThreadLocal _externalContext = 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";
 
+    private static final Map<Integer, CompilationResult> _compilationResults = new ConcurrentHashMap<Integer, CompilationResult>();
 
     public static void init() {
 
     }
 
+    public static CompilationResult getCompilationResult(Integer scriptingEngine) {
+        return _compilationResults.get(scriptingEngine);
+    }
+
+    public static void setCompilationResult(Integer scriptingEngine, CompilationResult result) {
+        _compilationResults.put(scriptingEngine, result);
+    }
+
+    public static void setExternalContext(Object context) {
+        _externalContext.set(context);
+    }
+
+    public static Object getExternalContext() {
+        return _externalContext.get();
+    }
 
     /**
      * general shutdown clean
@@ -105,7 +128,6 @@
         _configuration.set(configuration);
     }
 
-
     /**
      * the weavers are set from outside
      * we have to provide the weaver facade
@@ -151,7 +173,6 @@
         return (ScriptingWeaver) _weaverHolder.get();
     }
 
-
     /**
      * we create a proxy to an existing object
      * which does reloading of the internal class
@@ -215,12 +236,10 @@
         return o;
     }
 
-
     public static boolean isDynamic(Class clazz) {
         return getWeaver().isDynamic(clazz);
     }
 
-
     /**
      * we push the threading data into
      * a shared queue
@@ -230,7 +249,7 @@
         data._configurtion = getConfiguration();
         data._refreshContextHolder = getRefreshContext();
         data._weaverHolder = getWeaver();
-
+        data._externalContext = getExternalContext();
         _referenceThreadHolder = data;
     }
 
@@ -239,6 +258,7 @@
         setConfiguration((Configuration) data._configurtion);
         setRefreshContext((RefreshContext) data._refreshContextHolder);
         setWeaver((ScriptingWeaver) data._weaverHolder);
+        setExternalContext(data._externalContext);
     }
 
     public static void cleanThreadingData() {

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyCompilerFacade.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyCompilerFacade.java?rev=901782&r1=901781&r2=901782&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyCompilerFacade.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyCompilerFacade.java Thu Jan 21 17:23:48 2010
@@ -20,7 +20,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.myfaces.extensions.scripting.compiler.CompilationException;
 import org.apache.myfaces.extensions.scripting.compiler.CompilationResult;
 import org.apache.myfaces.extensions.scripting.compiler.GroovyCompiler;
 import org.apache.myfaces.scripting.api.DynamicCompiler;

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/Compiler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/Compiler.java?rev=901782&r1=901781&r2=901782&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/Compiler.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/Compiler.java Thu Jan 21 17:23:48 2010
@@ -1,5 +1,6 @@
 package org.apache.myfaces.scripting.loaders.java.jdk5;
 
+import org.apache.myfaces.extensions.scripting.compiler.CompilationResult;
 
 import java.io.File;
 
@@ -18,13 +19,12 @@
      */
     public CompilationResult compile(File sourcePath, File targetPath, String file, String classPath) throws CompilationException;
 
-
     /**
      * <p>Compiles the given sources and creates an according class files in the given target path.</p>
      *
      * @param sourcePath the path to the source directory
      * @param targetPath the path to the target directory
-     * @param file       the relative file name of the class you want to compile
+     * @param classPath  the classpath for the compiler
      * @return the compilation result, i.e. the compiler output, a list of errors and a list of warnings
      */
     public CompilationResult compile(File sourcePath, File targetPath, String classPath) throws CompilationException;

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=901782&r1=901781&r2=901782&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 Thu Jan 21 17:23:48 2010
@@ -20,6 +20,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationResult;
 import org.apache.myfaces.scripting.api.DynamicCompiler;
 import org.apache.myfaces.scripting.core.util.ClassUtils;
 import org.apache.myfaces.scripting.core.util.FileUtils;

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/JavacCompiler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/JavacCompiler.java?rev=901782&r1=901781&r2=901782&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/JavacCompiler.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/JavacCompiler.java Thu Jan 21 17:23:48 2010
@@ -2,9 +2,12 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationResult;
+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.api.CompilerConst;
+import org.apache.myfaces.scripting.core.util.WeavingContext;
 
 import java.io.File;
 import java.io.PrintWriter;
@@ -107,7 +110,7 @@
                 result.registerError(new CompilationResult.CompilationMessage(-1,
                         "Executing the javac compiler failed. The return code is '" + returnCode + "'." + compilerOutput.toString()));
             }
-
+            WeavingContext.setCompilationResult(ScriptingConst.ENGINE_TYPE_JAVA, result);
             return result;
         } catch (NoSuchMethodException ex) {
             throw new IllegalStateException("The Javac compiler class '" + compilerClass + "' doesn't provide the method " +
@@ -154,7 +157,7 @@
                 result.registerError(new CompilationResult.CompilationMessage(-1,
                         "Executing the javac compiler failed. The return code is '" + returnCode + "'." + compilerOutput.toString()));
             }
-
+            WeavingContext.setCompilationResult(ScriptingConst.ENGINE_TYPE_JAVA, result);
             return result;
         } catch (NoSuchMethodException ex) {
             throw new IllegalStateException("The Javac compiler class '" + compilerClass + "' doesn't provide the method " +

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=901782&r1=901781&r2=901782&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 Thu Jan 21 17:23:48 2010
@@ -115,11 +115,12 @@
 
 
                     systemRecompileMap.put(it.getValue().getScriptingEngine(), Boolean.TRUE);
-                    it.getValue().setTainted(true);
-                    it.getValue().setTaintedOnce(true);
+                    ReloadingMetadata meta = it.getValue();
+                    meta.setTainted(true);
+                    meta.setTaintedOnce(true);
                     printInfo(it, proxyFile);
-                    it.getValue().setTimestamp(proxyFile.lastModified());
-                    dependencyTainted(it.getValue().getAClass().getName());
+                    meta.setTimestamp(proxyFile.lastModified());
+                    dependencyTainted(meta.getAClass().getName());
                 }
             //}
         }

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=901782&r1=901781&r2=901782&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 Thu Jan 21 17:23:48 2010
@@ -49,7 +49,7 @@
         WeavingContext.setRefreshContext((RefreshContext) context.getAttribute("RefreshContext"));
         WeavingContext.setConfiguration((Configuration) context.getAttribute(ScriptingConst.CTX_CONFIGURATION));
         WeavingContext.getRefreshContext().setCurrentlyRunningRequests(getRequestCnt());
-
+        WeavingContext.setExternalContext(context);
 
         try {
             filterChain.doFilter(servletRequest, servletResponse);

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/resources/META-INF/faces-config.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/resources/META-INF/faces-config.xml?rev=901782&r1=901781&r2=901782&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/resources/META-INF/faces-config.xml (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/resources/META-INF/faces-config.xml Thu Jan 21 17:23:48 2010
@@ -25,4 +25,17 @@
     <lifecycle>
         <phase-listener>org.apache.myfaces.scripting.jsf.RefreshPhaseListener</phase-listener>
     </lifecycle>
+
+    <component>
+        <component-type>org.apache.myfaces.extensions.scripting.components.CompilerComponent</component-type>
+        <component-class>org.apache.myfaces.extensions.scripting.components.CompilerComponent</component-class>
+    </component>
+
+    <render-kit>
+        <renderer>
+            <component-family>javax.faces.Output</component-family>
+            <renderer-type>org.apache.myfaces.extensions.scripting.components.CompilerComponentRenderer</renderer-type>
+            <renderer-class>org.apache.myfaces.extensions.scripting.components.CompilerComponentRenderer</renderer-class>
+        </renderer>
+    </render-kit>
 </faces-config>
\ No newline at end of file

Modified: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/resources/styles/main.css
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/resources/styles/main.css?rev=901782&r1=901781&r2=901782&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/resources/styles/main.css (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/resources/styles/main.css Thu Jan 21 17:23:48 2010
@@ -1,3 +1,59 @@
 #hello {
     background-color: yellow;
-}
\ No newline at end of file
+}
+
+/*==================================================
+    Basic CSS information for our compiler
+    output component
+====================================================*/
+
+div.errorsLabel {
+    font-size: large;
+    padding-top: 5px;
+    padding-bottom: 10px;
+    padding-left: 5px;
+}
+
+div.warningsLabel {
+    font-size: large;
+    padding-top: 5px;
+    padding-bottom: 10px;
+    padding-left: 5px;
+}
+
+div.errorBox {
+    width: 800px;
+    heigh: 200px;
+    display: block;
+    overflow: auto;
+    border: 1px solid black;
+    background-color: #ffffcc;
+}
+
+div.errorBox .line {
+    display: table;
+    width: 100%;
+    padding-bottom: 5px;
+    margin-bottom: 5px;
+    border-bottom: 1px solid silver;
+}
+
+div.errorBox .line .lineNo {
+    width: 40px;
+    float: left;
+    color: red;
+}
+
+div.errorBox .line .lineNo {
+    width: 30px;
+    float: left;
+    padding-left: 5px;
+    font-weight: bold;
+    font-size: large;
+}
+
+div.errorBox .line .message {
+    width: 758px;
+    display: block;
+    float: left;
+}