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/03/02 17:40:29 UTC
svn commit: r918108 - in /myfaces/extensions/scripting/trunk:
core/core/src/main/java/org/apache/myfaces/scripting/api/
core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/
examples/myfaces20-example/src/main/webapp/WEB-...
Author: werpu
Date: Tue Mar 2 16:40:29 2010
New Revision: 918108
URL: http://svn.apache.org/viewvc?rev=918108&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-78
https://issues.apache.org/jira/browse/EXTSCRIPT-79
fix for both issues
Modified:
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/MyFacesBeanHandler.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java
myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean2.java
myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean3.java
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/MyFacesBeanHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/MyFacesBeanHandler.java?rev=918108&r1=918107&r2=918108&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/MyFacesBeanHandler.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/MyFacesBeanHandler.java Tue Mar 2 16:40:29 2010
@@ -19,6 +19,16 @@
* Bean handler implementation
* which encapsulates the myfaces specific parts
* of the bean processing
+ *
+ *
+ * TODO bug multiuser handling not yet working
+ * due to tainted being reset for beans once the
+ * first user has run through the refresh,
+ * others do not drop their code...
+ *
+ * we need a bean taint history so that
+ * users refreshing get a blend of all tainted classes
+ * since their last local refresh
*/
public class MyFacesBeanHandler implements BeanHandler {
@@ -26,6 +36,8 @@
* scripting engine for this bean handler
*/
int _scriptingEngine;
+ private static final String JAVA_POINT = "java.";
+ private static final String JAVAX_POINT = "javax.";
/**
* constructor
@@ -71,6 +83,10 @@
//older versions
it = (Iterator) retVal;
}
+
+ //create dependency graph on IOC level, to cover areas where
+ //the class dependency cannot work (object-object dependencies,
+ // source->binary->source references on call level
while (it.hasNext()) {
ManagedProperty prop = (ManagedProperty) it.next();
String propClass = prop.getPropertyClass();
@@ -95,7 +111,7 @@
while (iter.hasNext()) {
Object value = ((Map.Entry) iter.next()).getValue();
String valueClass = value.getClass().getName();
- if (valueClass.startsWith("java.") || valueClass.startsWith("javax.")) {
+ if (valueClass.startsWith(JAVA_POINT) || valueClass.startsWith(JAVAX_POINT)) {
continue;
}
handleObjectDependency(dynamicClasses, entry.getValue().getManagedBeanClassName(), valueClass);
@@ -117,7 +133,7 @@
while (iter.hasNext()) {
Object value = iter.next();
String valueClass = value.getClass().getName();
- if (valueClass.startsWith("java.") || valueClass.startsWith("javax.")) {
+ if (valueClass.startsWith(JAVA_POINT) || valueClass.startsWith(JAVAX_POINT)) {
continue;
}
handleObjectDependency(dynamicClasses, entry.getValue().getManagedBeanClassName(), valueClass);
@@ -141,6 +157,12 @@
/**
* Refreshes all managed beans
* session, and personal scoped ones
+ * <p/>
+ * personal scoped beans are beans which
+ * have either
+ * <li> session scope </li>
+ * <li> page scope </li>
+ * <li> custom scope </li>
*/
public void refreshAllManagedBeans() {
if (FacesContext.getCurrentInstance() == null) {
@@ -168,6 +190,7 @@
getLog().info("[EXT-SCRIPTING] Tainting all beans to avoid classcast exceptions");
if (managedBeanTainted) {
globalManagedBeanRefresh(mbeansSnapshotView);
+ //personalScopeRefresh();
}
}
}
@@ -182,7 +205,7 @@
Map sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
Long timeOut = (Long) sessionMap.get(ScriptingConst.SESS_BEAN_REFRESH_TIMER);
- if (timeOut == null || timeOut < globalBeanRefreshTimeout) {
+ if (timeOut == null || timeOut <= globalBeanRefreshTimeout) {
refreshPersonalScopedBeans();
}
}
@@ -272,19 +295,8 @@
Class managedBeanClass = entry.getValue().getManagedBeanClass();
if (hasToBeRefreshed(tainted, managedBeanClass)) {
- String scope = entry.getValue().getManagedBeanScope();
-
- if (scope != null && !scope.equalsIgnoreCase(ScriptingConst.SCOPE_APPLICATION)) {
- if (scope.equalsIgnoreCase(ScriptingConst.SCOPE_REQUEST)) {
- //request, nothing has to be done here
- break;
- }
- if (scope.equalsIgnoreCase(ScriptingConst.SCOPE_SESSION)) {
- FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(entry.getValue().getManagedBeanName());
- } else {
- removeCustomScopedBean(entry.getValue());
- }
- }
+ FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(entry.getValue().getManagedBeanName());
+ removeCustomScopedBean(entry.getValue());
}
}
updateBeanRefreshTime();
@@ -300,20 +312,20 @@
*/
private void removeBeanReferences(ManagedBean bean) {
- if (getLog().isLoggable(Level.INFO)) {
- getLog().log(Level.INFO,"[EXT-SCRIPTING] JavaScriptingWeaver.removeBeanReferences({0})", bean.getManagedBeanName());
+ if (getLog().isLoggable(Level.FINE)) {
+ getLog().log(Level.FINE, "[EXT-SCRIPTING] JavaScriptingWeaver.removeBeanReferences({0})", bean.getManagedBeanName());
}
String scope = bean.getManagedBeanScope();
- if (scope != null && scope.equalsIgnoreCase(ScriptingConst.SCOPE_SESSION)) {
- FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(bean.getManagedBeanName());
- } else if (scope != null && scope.equalsIgnoreCase(ScriptingConst.SCOPE_APPLICATION)) {
- FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().remove(bean.getManagedBeanName());
- //other scope
- } else if (scope != null && !scope.equals(ScriptingConst.SCOPE_REQUEST)) {
- removeCustomScopedBean(bean);
- }
+ //if (scope != null && scope.equalsIgnoreCase(ScriptingConst.SCOPE_SESSION)) {
+ FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(bean.getManagedBeanName());
+ //} else if (scope != null && scope.equalsIgnoreCase(ScriptingConst.SCOPE_APPLICATION)) {
+ FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().remove(bean.getManagedBeanName());
+ //other scope
+ //} else if (scope != null && !scope.equals(ScriptingConst.SCOPE_REQUEST)) {
+ removeCustomScopedBean(bean);
+ //}
}
/**
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java?rev=918108&r1=918107&r2=918108&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java Tue Mar 2 16:40:29 2010
@@ -60,11 +60,15 @@
String beanName = annCasted.name();
beanName = beanName.replaceAll("\"", "");
+ //we need to reregister for every bean due to possible managed prop
+ //and scope changes
+ ManagedBean mbean = null;
if (!hasToReregister(beanName, clazz)) {
- return;
+ mbean = (ManagedBean) _alreadyRegistered.get(beanName);
+ } else {
+ mbean = new ManagedBean();
}
- ManagedBean mbean = new ManagedBean();
mbean.setBeanClass(clazz.getName());
mbean.setName(beanName);
handleManagedpropertiesCompiled(mbean, fields(clazz));
Modified: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean2.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean2.java?rev=918108&r1=918107&r2=918108&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean2.java (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean2.java Tue Mar 2 16:40:29 2010
@@ -20,22 +20,32 @@
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
+import javax.faces.bean.RequestScoped;
+import javax.faces.bean.ManagedProperty;
+
import javax.faces.event.ComponentSystemEvent;
@ManagedBean(name = "javatestbean")
-@SessionScoped
+@RequestScoped
+
public class TestBean2 {
String sayHello = "<h2>hello world test</h2>";
String hello2 = "hello from added attribute";
String hello3 = "hello from added attribute 2";
+ int cnt = 0;
+
+ //@ManagedProperty(value="#{TestBean3}")
+ TestBean3 bean3;
+
public void validate(ComponentSystemEvent e) {
System.out.println("Validating");
}
public String getSayHello() {
- return sayHello;
+ System.out.println("cnt++:" + cnt++);
+ return "hello from bean2";
}
public String getSayHello2() {
@@ -73,4 +83,11 @@
return "hello world";
}
+ public TestBean3 getBean3() {
+ return bean3;
+ }
+
+ public void setBean3(TestBean3 bean3) {
+ this.bean3 = bean3;
+ }
}
\ No newline at end of file
Modified: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean3.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean3.java?rev=918108&r1=918107&r2=918108&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean3.java (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/test/TestBean3.java Tue Mar 2 16:40:29 2010
@@ -18,6 +18,12 @@
*/
package org.apache.myfaces.javaloader.test;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.SessionScoped;
+import javax.faces.bean.RequestScoped;
+
+@ManagedBean(name = "javatestbean3")
+@RequestScoped
public class TestBean3 {
String sayHello = "hello world";