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;
+}