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";